X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibsigrok-internal.h;h=78bb9d588b92b51a1a9e3817ab847600cba99c97;hb=edec0436db2a73b545f5d4db0c1635d6c67ff45c;hp=6fbc1d245cb86c7a6c46660430beae03a81ad257;hpb=1ac8c2181b0390c601278ad05bab93dd1c801734;p=libsigrok.git diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 6fbc1d24..78bb9d58 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -29,6 +29,9 @@ #include "config.h" #include +#ifdef HAVE_LIBHIDAPI +#include +#endif #ifdef HAVE_LIBSERIALPORT #include #endif @@ -36,6 +39,7 @@ #include #endif #include +#include #include #include @@ -726,6 +730,7 @@ struct sr_usb_dev_inst { struct sr_serial_dev_inst; #ifdef HAVE_SERIAL_COMM struct ser_lib_functions; +struct ser_hid_chip_functions; struct sr_serial_dev_inst { /** Port name, e.g. '/dev/tty42'. */ char *port; @@ -738,10 +743,23 @@ struct sr_serial_dev_inst { int parity_bits; int stop_bits; } comm_params; + GString *rcv_buffer; #ifdef HAVE_LIBSERIALPORT /** libserialport port handle */ struct sp_port *sp_data; #endif +#ifdef HAVE_LIBHIDAPI + enum ser_hid_chip_t { + SER_HID_CHIP_UNKNOWN, /**!< place holder */ + SER_HID_CHIP_LAST, /**!< sentinel */ + } hid_chip; + struct ser_hid_chip_functions *hid_chip_funcs; + char *usb_path; + char *usb_serno; + const char *hid_path; + hid_device *hid_dev; + GSList *hid_source_args; +#endif }; #endif @@ -1140,6 +1158,13 @@ SR_PRIV int serial_source_remove(struct sr_session *session, SR_PRIV GSList *sr_serial_find_usb(uint16_t vendor_id, uint16_t product_id); SR_PRIV int serial_timeout(struct sr_serial_dev_inst *port, int num_bytes); +SR_PRIV void sr_ser_discard_queued_data(struct sr_serial_dev_inst *serial); +SR_PRIV size_t sr_ser_has_queued_data(struct sr_serial_dev_inst *serial); +SR_PRIV void sr_ser_queue_rx_data(struct sr_serial_dev_inst *serial, + const uint8_t *data, size_t len); +SR_PRIV size_t sr_ser_unqueue_rx_data(struct sr_serial_dev_inst *serial, + uint8_t *data, size_t len); + struct ser_lib_functions { int (*open)(struct sr_serial_dev_inst *serial, int flags); int (*close)(struct sr_serial_dev_inst *serial); @@ -1168,6 +1193,32 @@ struct ser_lib_functions { size_t (*get_rx_avail)(struct sr_serial_dev_inst *serial); }; extern SR_PRIV struct ser_lib_functions *ser_lib_funcs_libsp; +SR_PRIV int ser_name_is_hid(struct sr_serial_dev_inst *serial); +extern SR_PRIV struct ser_lib_functions *ser_lib_funcs_hid; + +#ifdef HAVE_LIBHIDAPI +struct vid_pid_item { + uint16_t vid, pid; +}; +#define VID_PID_TERM ALL_ZERO + +struct ser_hid_chip_functions { + const char *chipname; + const char *chipdesc; + const struct vid_pid_item *vid_pid_items; + const int max_bytes_per_request; + int (*set_params)(struct sr_serial_dev_inst *serial, + int baudrate, int bits, int parity, int stopbits, + int flowcontrol, int rts, int dtr); + int (*read_bytes)(struct sr_serial_dev_inst *serial, + uint8_t *data, int space, unsigned int timeout); + int (*write_bytes)(struct sr_serial_dev_inst *serial, + const uint8_t *data, int space); + int (*flush)(struct sr_serial_dev_inst *serial); + int (*drain)(struct sr_serial_dev_inst *serial); +}; +SR_PRIV const char *ser_hid_chip_find_name_vid_pid(uint16_t vid, uint16_t pid); +#endif #endif /*--- ezusb.c ---------------------------------------------------------------*/