X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Flibsigrok-internal.h;h=3ea3590ae6c5dec04ddd2e5d075f43d94f3182f5;hb=1df81f4b062fcfe8c6de4d2e5edf9743030ae0fc;hp=c72aab1991df78ea79bebc54ae5ef8f9c7955b35;hpb=fcfa36fd6fd671e032697f2690a1b459324a386e;p=libsigrok.git diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index c72aab19..3ea3590a 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -26,6 +26,8 @@ #ifndef LIBSIGROK_LIBSIGROK_INTERNAL_H #define LIBSIGROK_LIBSIGROK_INTERNAL_H +#include "config.h" + #include #ifdef HAVE_LIBSERIALPORT #include @@ -35,6 +37,7 @@ #endif #include #include +#include struct zip; struct zip_stat; @@ -720,14 +723,24 @@ struct sr_usb_dev_inst { }; #endif -#ifdef HAVE_LIBSERIALPORT +#ifdef HAVE_SERIAL_COMM +struct ser_lib_functions; struct sr_serial_dev_inst { /** Port name, e.g. '/dev/tty42'. */ char *port; /** Comm params for serial_set_paramstr(). */ char *serialcomm; + struct ser_lib_functions *lib_funcs; + struct { + int bit_rate; + int data_bits; + int parity_bits; + int stop_bits; + } comm_params; +#ifdef HAVE_LIBSERIALPORT /** libserialport port handle */ - struct sp_port *data; + struct sp_port *sp_data; +#endif }; #endif @@ -829,7 +842,7 @@ SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus, SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb); #endif -#ifdef HAVE_LIBSERIALPORT +#ifdef HAVE_SERIAL_COMM /* Serial-specific instances */ SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port, const char *serialcomm); @@ -946,7 +959,7 @@ SR_PRIV int std_dummy_dev_open(struct sr_dev_inst *sdi); SR_PRIV int std_dummy_dev_close(struct sr_dev_inst *sdi); SR_PRIV int std_dummy_dev_acquisition_start(const struct sr_dev_inst *sdi); SR_PRIV int std_dummy_dev_acquisition_stop(struct sr_dev_inst *sdi); -#ifdef HAVE_LIBSERIALPORT +#ifdef HAVE_SERIAL_COMM SR_PRIV int std_serial_dev_open(struct sr_dev_inst *sdi); SR_PRIV int std_serial_dev_acquisition_stop(struct sr_dev_inst *sdi); #endif @@ -1056,7 +1069,7 @@ SR_PRIV int soft_trigger_logic_check(struct soft_trigger_logic *st, uint8_t *buf /*--- serial.c --------------------------------------------------------------*/ -#ifdef HAVE_LIBSERIALPORT +#ifdef HAVE_SERIAL_COMM enum { SERIAL_RDWR = 1, SERIAL_RDONLY = 2, @@ -1064,10 +1077,15 @@ enum { typedef gboolean (*packet_valid_callback)(const uint8_t *buf); +typedef GSList *(*sr_ser_list_append_t)(GSList *devs, const char *name, + const char *desc); +typedef GSList *(*sr_ser_find_append_t)(GSList *devs, const char *name); + SR_PRIV int serial_open(struct sr_serial_dev_inst *serial, int flags); SR_PRIV int serial_close(struct sr_serial_dev_inst *serial); SR_PRIV int serial_flush(struct sr_serial_dev_inst *serial); SR_PRIV int serial_drain(struct sr_serial_dev_inst *serial); +SR_PRIV size_t serial_has_receive_data(struct sr_serial_dev_inst *serial); SR_PRIV int serial_write_blocking(struct sr_serial_dev_inst *serial, const void *buf, size_t count, unsigned int timeout_ms); SR_PRIV int serial_write_nonblocking(struct sr_serial_dev_inst *serial, @@ -1096,6 +1114,35 @@ SR_PRIV int serial_source_remove(struct sr_session *session, struct sr_serial_dev_inst *serial); 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); + +struct ser_lib_functions { + int (*open)(struct sr_serial_dev_inst *serial, int flags); + int (*close)(struct sr_serial_dev_inst *serial); + int (*flush)(struct sr_serial_dev_inst *serial); + int (*drain)(struct sr_serial_dev_inst *serial); + int (*write)(struct sr_serial_dev_inst *serial, + const void *buf, size_t count, + int nonblocking, unsigned int timeout_ms); + int (*read)(struct sr_serial_dev_inst *serial, + void *buf, size_t count, + int nonblocking, unsigned int timeout_ms); + int (*set_params)(struct sr_serial_dev_inst *serial, + int baudrate, int bits, int parity, int stopbits, + int flowcontrol, int rts, int dtr); + int (*setup_source_add)(struct sr_session *session, + struct sr_serial_dev_inst *serial, + int events, int timeout, + sr_receive_data_callback cb, void *cb_data); + int (*setup_source_remove)(struct sr_session *session, + struct sr_serial_dev_inst *serial); + GSList *(*list)(GSList *list, sr_ser_list_append_t append); + GSList *(*find_usb)(GSList *list, sr_ser_find_append_t append, + uint16_t vendor_id, uint16_t product_id); + int (*get_frame_format)(struct sr_serial_dev_inst *serial, + int *baud, int *bits); + size_t (*get_rx_avail)(struct sr_serial_dev_inst *serial); +}; +extern SR_PRIV struct ser_lib_functions *ser_lib_funcs_libsp; #endif /*--- ezusb.c ---------------------------------------------------------------*/ @@ -1260,6 +1307,30 @@ SR_PRIV void sr_fs9721_10_temp_c(struct sr_datafeed_analog *analog, void *info); SR_PRIV void sr_fs9721_01_10_temp_f_c(struct sr_datafeed_analog *analog, void *info); SR_PRIV void sr_fs9721_max_c_min(struct sr_datafeed_analog *analog, void *info); +/*--- dmm/ms2115b.c ---------------------------------------------------------*/ + +#define MS2115B_PACKET_SIZE 9 + +enum ms2115b_display { + MS2115B_DISPLAY_MAIN, + MS2115B_DISPLAY_SUB, + MS2115B_DISPLAY_COUNT, +}; + +struct ms2115b_info { + /* Selected channel. */ + size_t ch_idx; + gboolean is_ac, is_dc, is_auto; + gboolean is_diode, is_beep, is_farad; + gboolean is_ohm, is_ampere, is_volt, is_hz; + gboolean is_duty_cycle, is_percent; +}; + +extern SR_PRIV const char *ms2115b_channel_formats[]; +SR_PRIV gboolean sr_ms2115b_packet_valid(const uint8_t *buf); +SR_PRIV int sr_ms2115b_parse(const uint8_t *buf, float *floatval, + struct sr_datafeed_analog *analog, void *info); + /*--- dmm/ms8250d.c ---------------------------------------------------------*/ #define MS8250D_PACKET_SIZE 18 @@ -1316,7 +1387,7 @@ struct metex14_info { gboolean is_hfe, is_unitless, is_logic, is_min, is_max, is_avg; }; -#ifdef HAVE_LIBSERIALPORT +#ifdef HAVE_SERIAL_COMM SR_PRIV int sr_metex14_packet_request(struct sr_serial_dev_inst *serial); #endif SR_PRIV gboolean sr_metex14_packet_valid(const uint8_t *buf); @@ -1447,7 +1518,7 @@ struct asycii_info { gboolean is_invalid; }; -#ifdef HAVE_LIBSERIALPORT +#ifdef HAVE_SERIAL_COMM SR_PRIV int sr_asycii_packet_request(struct sr_serial_dev_inst *serial); #endif SR_PRIV gboolean sr_asycii_packet_valid(const uint8_t *buf);