]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/serial-dmm/protocol.h
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / serial-dmm / protocol.h
index fb5a2a336d99e88fc11c8d618dfb144b3acfb0b5..092f506b207b8f525cac7971e0c5a1d9e498d0f0 100644 (file)
 
 #define LOG_PREFIX "serial-dmm"
 
-enum {
-       BBCGM_M2110,
-       DIGITEK_DT4000ZC,
-       TEKPOWER_TP4000ZC,
-       METEX_ME31,
-       PEAKTECH_3410,
-       MASTECH_MAS345,
-       VA_VA18B,
-       VA_VA40B,
-       METEX_M3640D,
-       METEX_M4650CR,
-       PEAKTECH_4370,
-       PCE_PCE_DM32,
-       RADIOSHACK_22_168,
-       RADIOSHACK_22_805,
-       RADIOSHACK_22_812,
-       TECPEL_DMM_8061_SER,
-       VOLTCRAFT_M3650CR,
-       VOLTCRAFT_M3650D,
-       VOLTCRAFT_M4650CR,
-       VOLTCRAFT_ME42,
-       VOLTCRAFT_VC820_SER,
-       VOLTCRAFT_VC830_SER,
-       VOLTCRAFT_VC840_SER,
-       UNI_T_UT60A_SER,
-       UNI_T_UT60E_SER,
-       UNI_T_UT60G_SER,
-       UNI_T_UT61B_SER,
-       UNI_T_UT61C_SER,
-       UNI_T_UT61D_SER,
-       UNI_T_UT61E_SER,
-       ISO_TECH_IDM103N,
-       TENMA_72_7745_SER,
-       TENMA_72_7750_SER,
-};
-
 struct dmm_info {
+       /** libsigrok driver info struct. */
+       struct sr_dev_driver di;
        /** Manufacturer/brand. */
-       char *vendor;
+       const char *vendor;
        /** Model. */
-       char *device;
-       /** serialconn string. */
-       char *conn;
-       /** Baud rate. */
-       uint32_t baudrate;
+       const char *device;
+       /** conn string. */
+       const char *conn;
+       /** serialcomm string. */
+       const char *serialcomm;
        /** Packet size in bytes. */
-       int packet_size;
-       /** Request timeout [ms] before request is considered lost and a new
-        *  one is sent. Used only if device needs polling. */
-       int64_t req_timeout_ms;
-       /** Delay between reception of packet and next request. Some DMMs
-        *  need this. Used only if device needs polling. */
-       int64_t req_delay_ms;
+       size_t packet_size;
+       /**
+        * Request timeout [ms] before request is considered lost and a new
+        * one is sent. Used only if device needs polling.
+        */
+       uint64_t req_timeout_ms;
+       /**
+        * Delay between reception of packet and next request. Some DMMs
+        * need this. Used only if device needs polling.
+        */
+       uint64_t req_delay_ms;
        /** Packet request function. */
        int (*packet_request)(struct sr_serial_dev_inst *);
+       /** Number of channels / displays. */
+       size_t channel_count;
+       /** (Optional) printf formats for channel names. */
+       const char **channel_formats;
        /** Packet validation function. */
        gboolean (*packet_valid)(const uint8_t *);
        /** Packet parsing function. */
@@ -84,76 +58,44 @@ struct dmm_info {
                            struct sr_datafeed_analog *, void *);
        /** */
        void (*dmm_details)(struct sr_datafeed_analog *, void *);
-       /** libsigrok driver info struct. */
-       struct sr_dev_driver *di;
-       /** Data reception function. */
-       int (*receive_data)(int, int, void *);
+       /** Size of chipset info struct. */
+       gsize info_size;
+       /* Serial-dmm items "with state" and variable length packets. */
+       void *dmm_state;
+       void *(*dmm_state_init)(void);
+       void (*dmm_state_free)(void *state);
+       int (*after_open)(struct sr_serial_dev_inst *serial);
+       int (*packet_valid_len)(void *state, const uint8_t *data, size_t dlen,
+               size_t *pkt_len);
+       int (*packet_parse_len)(void *state, const uint8_t *data, size_t dlen,
+               double *val, struct sr_datafeed_analog *analog, void *info);
+       int (*config_get)(void *state, uint32_t key, GVariant **data,
+               const struct sr_dev_inst *sdi, const struct sr_channel_group *cg);
+       int (*config_set)(void *state, uint32_t key, GVariant *data,
+               const struct sr_dev_inst *sdi, const struct sr_channel_group *cg);
+       int (*config_list)(void *state, uint32_t key, GVariant **data,
+               const struct sr_dev_inst *sdi, const struct sr_channel_group *cg);
+       /** Hook at acquisition start. Can re-route the receive routine. */
+       int (*acquire_start)(void *state, const struct sr_dev_inst *sdi,
+               sr_receive_data_callback *cb, void **cb_data);
 };
 
-extern SR_PRIV struct dmm_info dmms[];
-
 #define DMM_BUFSIZE 256
 
-/** Private, per-device-instance driver context. */
 struct dev_context {
-       /** The current sampling limit (in number of samples). */
-       uint64_t limit_samples;
-
-       /** The time limit (in milliseconds). */
-       uint64_t limit_msec;
-
-       /** Opaque pointer passed in by the frontend. */
-       void *cb_data;
-
-       /** The current number of already received samples. */
-       uint64_t num_samples;
-
-       /** The starting time of current sampling run. */
-       int64_t starttime;
+       struct sr_sw_limits limits;
 
        uint8_t buf[DMM_BUFSIZE];
-       int bufoffset;
-       int buflen;
+       size_t buflen;
 
-       /** The timestamp [µs] to send the next request.
-        *  Used only if device needs polling. */
-       int64_t req_next_at;
+       /**
+        * The timestamp [µs] to send the next request.
+        * Used only if device needs polling.
+        */
+       uint64_t req_next_at;
 };
 
-SR_PRIV int req_packet(struct sr_dev_inst *sdi, int dmm);
-
-SR_PRIV int receive_data_BBCGM_M2110(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_DIGITEK_DT4000ZC(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_TEKPOWER_TP4000ZC(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_METEX_ME31(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_PEAKTECH_3410(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_MASTECH_MAS345(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VA_VA18B(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VA_VA40B(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_METEX_M3640D(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_METEX_M4650CR(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_PEAKTECH_4370(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_PCE_PCE_DM32(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_RADIOSHACK_22_168(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_RADIOSHACK_22_805(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_RADIOSHACK_22_812(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_TECPEL_DMM_8061_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VOLTCRAFT_M3650CR(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VOLTCRAFT_M3650D(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VOLTCRAFT_M4650CR(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VOLTCRAFT_ME42(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VOLTCRAFT_VC820_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VOLTCRAFT_VC830_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_VOLTCRAFT_VC840_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_UNI_T_UT60A_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_UNI_T_UT60E_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_UNI_T_UT60G_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_UNI_T_UT61B_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_UNI_T_UT61C_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_UNI_T_UT61D_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_UNI_T_UT61E_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_ISO_TECH_IDM103N(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_TENMA_72_7745_SER(int fd, int revents, void *cb_data);
-SR_PRIV int receive_data_TENMA_72_7750_SER(int fd, int revents, void *cb_data);
+SR_PRIV int req_packet(struct sr_dev_inst *sdi);
+SR_PRIV int receive_data(int fd, int revents, void *cb_data);
 
 #endif