]> 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 c80180ce0b976c089036b8d26d4b50d249b3ef53..092f506b207b8f525cac7971e0c5a1d9e498d0f0 100644 (file)
@@ -29,24 +29,28 @@ 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;
+       size_t 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;
+       uint64_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;
+       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. */
@@ -56,6 +60,24 @@ struct dmm_info {
        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
@@ -64,14 +86,13 @@ struct dev_context {
        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;
+       uint64_t req_next_at;
 };
 
 SR_PRIV int req_packet(struct sr_dev_inst *sdi);