X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Flascar-el-usb%2Fprotocol.h;h=a94bd8a59da2c6c51b7b418045edf6b547cab170;hb=9740d9bf8c257e714d937602a10b8d81a7762d4e;hp=ea3e4c81f049d4e3a5f3d9696220deb36113c2d2;hpb=46697e38b286541e0e5aa354d35a6f4564855fa6;p=libsigrok.git diff --git a/hardware/lascar-el-usb/protocol.h b/hardware/lascar-el-usb/protocol.h index ea3e4c81..a94bd8a5 100644 --- a/hardware/lascar-el-usb/protocol.h +++ b/hardware/lascar-el-usb/protocol.h @@ -24,30 +24,57 @@ #include "libsigrok.h" #include "libsigrok-internal.h" -/* Message logging helpers with driver-specific prefix string. */ -#define DRIVER_LOG_DOMAIN "lascar-el-usb: " -#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 "lascar-el-usb" + +#define LASCAR_VENDOR "Lascar" +#define LASCAR_INTERFACE 0 +#define LASCAR_EP_IN 0x82 +#define LASCAR_EP_OUT 2 +/* Max 100ms for a device to positively identify. */ +#define SCAN_TIMEOUT 100000 +#define MAX_CONFIGBLOCK_SIZE 256 /** Private, per-device-instance driver context. */ struct dev_context { - /** The current sampling limit (in number of samples). */ + void *cb_data; + const struct elusb_profile *profile; + /* Generic EL-USB */ + unsigned char config[MAX_CONFIGBLOCK_SIZE]; + unsigned int log_size; + unsigned int rcvd_bytes; + unsigned int sample_size; + unsigned int logged_samples; + unsigned int rcvd_samples; uint64_t limit_samples; + /* Model-specific */ + /* EL-USB-CO: these are something like scaling and calibration values + * fixed per device, used to convert the sample values to CO ppm. */ + float co_high; + float co_low; + /* Temperature units as stored in the device config. */ + int temp_unit; +}; - /** The current sampling limit (in ms). */ - uint64_t limit_msec; - - /** Opaque pointer passed in by the frontend. */ - void *cb_data; +enum { + LOG_UNSUPPORTED, + LOG_TEMP_RH, + LOG_CO, +}; - /** The current number of already received samples. */ - uint64_t num_samples; +struct elusb_profile { + int modelid; + char *modelname; + int logformat; }; -SR_PRIV int lascar_el_usb_receive_data(int fd, int revents, void *cb_data); +SR_PRIV int lascar_get_config(libusb_device_handle *dev_hdl, + unsigned char *configblock, int *configlen); +SR_PRIV struct sr_dev_inst *lascar_scan(int bus, int address); +SR_PRIV int lascar_el_usb_handle_events(int fd, int revents, void *cb_data); +SR_PRIV void lascar_el_usb_receive_transfer(struct libusb_transfer *transfer); +SR_PRIV int lascar_start_logging(const struct sr_dev_inst *sdi); +SR_PRIV int lascar_stop_logging(const struct sr_dev_inst *sdi); +SR_PRIV int lascar_is_logging(const struct sr_dev_inst *sdi); +SR_PRIV int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data); #endif