]> sigrok.org Git - libsigrok.git/blobdiff - hardware/serial-dmm/protocol.h
serial-dmm: Implement request timeout mechanism.
[libsigrok.git] / hardware / serial-dmm / protocol.h
index 8db0e6355ed5bd797b3f34d2d87b7f9c55c88773..fb5a2a336d99e88fc11c8d618dfb144b3acfb0b5 100644 (file)
@@ -39,6 +39,7 @@ enum {
        RADIOSHACK_22_805,
        RADIOSHACK_22_812,
        TECPEL_DMM_8061_SER,
+       VOLTCRAFT_M3650CR,
        VOLTCRAFT_M3650D,
        VOLTCRAFT_M4650CR,
        VOLTCRAFT_ME42,
@@ -68,6 +69,12 @@ struct dmm_info {
        uint32_t baudrate;
        /** 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;
        /** Packet request function. */
        int (*packet_request)(struct sr_serial_dev_inst *);
        /** Packet validation function. */
@@ -101,13 +108,20 @@ struct dev_context {
        /** The current number of already received samples. */
        uint64_t num_samples;
 
+       /** The starting time of current sampling run. */
        int64_t starttime;
 
        uint8_t buf[DMM_BUFSIZE];
        int bufoffset;
        int buflen;
+
+       /** The timestamp [µs] to send the next request.
+        *  Used only if device needs polling. */
+       int64_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);
@@ -124,6 +138,7 @@ 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);