X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fbrymen-dmm%2Fprotocol.h;h=e6d2e560d66f1b88938a2cf0558ebae5077bb0a4;hb=3544f848e0d7f67af8e11ce7ec344b34cd797df3;hp=ee59fd7d9f0c16a0b41a0b938e723ec768afade5;hpb=20cbc7854dc0a375e23fea2ca7e7feee3d3ac701;p=libsigrok.git diff --git a/hardware/brymen-dmm/protocol.h b/hardware/brymen-dmm/protocol.h index ee59fd7d..e6d2e560 100644 --- a/hardware/brymen-dmm/protocol.h +++ b/hardware/brymen-dmm/protocol.h @@ -21,17 +21,22 @@ #define LIBSIGROK_HARDWARE_BRYMEN_DMM_PROTOCOL_H #include +#include +#include +#include +#include #include "libsigrok.h" #include "libsigrok-internal.h" -/* Message logging helpers with driver-specific prefix string. */ -#define DRIVER_LOG_DOMAIN "brymen-dmm: " -#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args) -#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args) -#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args) -#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args) -#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args) -#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args) +#define LOG_PREFIX "brymen-dmm" + +#define DMM_BUFSIZE 256 + +enum packet_len_status { + PACKET_HEADER_OK, + PACKET_NEED_MORE_DATA, + PACKET_INVALID_HEADER, +}; /** Private, per-device-instance driver context. */ struct dev_context { @@ -46,8 +51,35 @@ struct dev_context { /** The current number of already received samples. */ uint64_t num_samples; + + /** Start time of acquisition session */ + int64_t starttime; + + uint8_t buf[DMM_BUFSIZE]; + int bufoffset; + int buflen; + int next_packet_len; }; +/** + * Callback that assesses the size and status of the incoming packet. + * + * @return PACKET_HEADER_OK - This is a proper packet header. + * PACKET_NEED_MORE_DATA The buffer does not contain the entire header. + * PACKET_INVALID_HEADER Not a valid start of packet. + */ +typedef int (*packet_length_t)(const uint8_t *buf, int *len); + SR_PRIV int brymen_dmm_receive_data(int fd, int revents, void *cb_data); +SR_PRIV int brymen_packet_request(struct sr_serial_dev_inst *serial); + +SR_PRIV int brymen_packet_length(const uint8_t *buf, int *len); +SR_PRIV gboolean brymen_packet_is_valid(const uint8_t *buf); + +SR_PRIV int brymen_stream_detect(struct sr_serial_dev_inst *serial, + uint8_t *buf, size_t *buflen, + packet_length_t get_packet_size, + packet_valid_t is_valid, + uint64_t timeout_ms, int baudrate); #endif