X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fmaynuo-m97%2Fprotocol.h;h=31589d901d745e19312e51b1df260efa32fa378d;hb=8cd15dd4ce2fdbefbcc6e64632c8006e5404f253;hp=57a6e9546b12caff3d41f3b32fbe14b70dc39b36;hpb=e1ccfb191062d13b98bb7536d162a044e0758678;p=libsigrok.git diff --git a/src/hardware/maynuo-m97/protocol.h b/src/hardware/maynuo-m97/protocol.h index 57a6e954..31589d90 100644 --- a/src/hardware/maynuo-m97/protocol.h +++ b/src/hardware/maynuo-m97/protocol.h @@ -21,24 +21,135 @@ #define LIBSIGROK_HARDWARE_MAYNUO_M97_PROTOCOL_H #include -#include -#include "libsigrok.h" +#include #include "libsigrok-internal.h" #define LOG_PREFIX "maynuo-m97" -/** Private, per-device-instance driver context. */ -struct dev_context { - /* Model-specific information */ +struct maynuo_m97_model { + unsigned int id; + const char *name; + unsigned int max_current; + unsigned int max_voltage; + unsigned int max_power; +}; - /* Acquisition settings */ +struct dev_context { + const struct maynuo_m97_model *model; + struct sr_sw_limits limits; + int expecting_registers; +}; - /* Operational state */ +enum maynuo_m97_coil { + PC1 = 0x0500, + PC2 = 0X0501, + TRIG = 0x0502, + REMOTE = 0x0503, + ISTATE = 0x0510, + TRACK = 0x0511, + MEMORY = 0x0512, + VOICEEN = 0x0513, + CONNECT = 0x0514, + ATEST = 0x0515, + ATESTUN = 0x0516, + ATESTPASS = 0x0517, + IOVER = 0x0520, + UOVER = 0x0521, + POVER = 0x0522, + HEAT = 0x0523, + REVERSE = 0x0524, + UNREG = 0x0525, + ERREP = 0x0526, + ERRCAL = 0x0527, +}; - /* Temporary state across callbacks */ +enum maynuo_m97_register { + CMD = 0x0A00, + IFIX = 0x0A01, + UFIX = 0x0A03, + PFIX = 0x0A05, + RFIX = 0x0A07, + TMCCS = 0x0A09, + TMCVS = 0x0A0B, + UCCONSET = 0x0A0D, + UCCOFFSET = 0x0A0F, + UCVONSET = 0x0A11, + UCVOFFSET = 0x0A13, + UCPONSET = 0x0A15, + UCPOFFSET = 0x0A17, + UCRONSET = 0x0A19, + UCROFFSET = 0x0A1B, + UCCCV = 0x0A1D, + UCRCV = 0x0A1F, + IA = 0x0A21, + IB = 0x0A23, + TMAWD = 0x0A25, + TMBWD = 0x0A27, + TMTRANSRIS = 0x0A29, + TMTRANSFAL = 0x0A2B, + MODETRAN = 0x0A2D, + UBATTEND = 0x0A2E, + BATT = 0x0A30, + SERLIST = 0x0A32, + SERATEST = 0x0A33, + IMAX = 0x0A34, + UMAX = 0x0A36, + PMAX = 0x0A38, + ILCAL = 0x0A3A, + IHCAL = 0x0A3C, + ULCAL = 0x0A3E, + UHCAL = 0x0A40, + TAGSCAL = 0x0A42, + U = 0x0B00, + I = 0x0B02, + SETMODE = 0x0B04, + INPUTMODE = 0x0B05, + MODEL = 0x0B06, + EDITION = 0x0B07, +}; +enum maynuo_m97_mode { + CC = 1, + CV = 2, + CW = 3, + CR = 4, + CC_SOFT_START = 20, + DYNAMIC = 25, + SHORT_CIRCUIT = 26, + LIST = 27, + CC_L_AND_UL = 30, + CV_L_AND_UL = 31, + CW_L_AND_UL = 32, + CR_L_AND_UL = 33, + CC_TO_CV = 34, + CR_TO_CV = 36, + BATTERY_TEST = 38, + CV_SOFT_START = 39, + SYSTEM_PARAM = 41, + INPUT_ON = 42, + INPUT_OFF = 43, }; +SR_PRIV int maynuo_m97_get_bit(struct sr_modbus_dev_inst *modbus, + enum maynuo_m97_coil address, int *value); +SR_PRIV int maynuo_m97_set_bit(struct sr_modbus_dev_inst *modbus, + enum maynuo_m97_coil address, int value); +SR_PRIV int maynuo_m97_get_float(struct sr_modbus_dev_inst *modbus, + enum maynuo_m97_register address, float *value); +SR_PRIV int maynuo_m97_set_float(struct sr_modbus_dev_inst *modbus, + enum maynuo_m97_register address, float value); + +SR_PRIV int maynuo_m97_get_mode(struct sr_modbus_dev_inst *modbus, + enum maynuo_m97_mode *mode); +SR_PRIV int maynuo_m97_set_mode(struct sr_modbus_dev_inst *modbus, + enum maynuo_m97_mode mode); +SR_PRIV int maynuo_m97_set_input(struct sr_modbus_dev_inst *modbus, int enable); +SR_PRIV int maynuo_m97_get_model_version(struct sr_modbus_dev_inst *modbus, + uint16_t *model, uint16_t *version); + +SR_PRIV const char *maynuo_m97_mode_to_str(enum maynuo_m97_mode mode); + +SR_PRIV int maynuo_m97_capture_start(const struct sr_dev_inst *sdi); SR_PRIV int maynuo_m97_receive_data(int fd, int revents, void *cb_data); #endif