]> 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 da6742c35b6732f776eea17a66b5ca4e6b872f1c..092f506b207b8f525cac7971e0c5a1d9e498d0f0 100644 (file)
@@ -29,54 +29,70 @@ struct dmm_info {
        const char *vendor;
        /** Model. */
        const char *device;
-       /** serialconn string. */
+       /** conn string. */
        const char *conn;
-       /** Baud rate. */
-       uint32_t baudrate;
+       /** 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. */
        int (*packet_parse)(const uint8_t *, float *,
-                           struct sr_datafeed_analog_old *, void *);
+                           struct sr_datafeed_analog *, void *);
        /** */
-       void (*dmm_details)(struct sr_datafeed_analog_old *, void *);
+       void (*dmm_details)(struct sr_datafeed_analog *, 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);
 };
 
 #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;
-
-       /** 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);