]> sigrok.org Git - libsigrok.git/blobdiff - src/libsigrok-internal.h
serial: determine timeout from most recent set_params() values
[libsigrok.git] / src / libsigrok-internal.h
index f3e4d335ce2248199b9f2cdda016a3c9021fda5a..812cf3ceca11811aebe7569c6e14439375a7febb 100644 (file)
 #ifndef LIBSIGROK_LIBSIGROK_INTERNAL_H
 #define LIBSIGROK_LIBSIGROK_INTERNAL_H
 
-#include <stdarg.h>
-#include <stdio.h>
 #include <glib.h>
-#ifdef HAVE_LIBUSB_1_0
-#include <libusb.h>
-#endif
 #ifdef HAVE_LIBSERIALPORT
 #include <libserialport.h>
 #endif
+#ifdef HAVE_LIBUSB_1_0
+#include <libusb.h>
+#endif
+#include <stdarg.h>
+#include <stdio.h>
 
 struct zip;
 struct zip_stat;
@@ -726,8 +726,14 @@ struct sr_serial_dev_inst {
        char *port;
        /** Comm params for serial_set_paramstr(). */
        char *serialcomm;
+       struct {
+               int bit_rate;
+               int data_bits;
+               int parity_bits;
+               int stop_bits;
+       } comm_params;
        /** libserialport port handle */
-       struct sp_port *data;
+       struct sp_port *sp_data;
 };
 #endif
 
@@ -782,8 +788,12 @@ enum {
 
 SR_PRIV struct sr_channel *sr_channel_new(struct sr_dev_inst *sdi,
                int index, int type, gboolean enabled, const char *name);
+SR_PRIV void sr_channel_free(struct sr_channel *ch);
+SR_PRIV void sr_channel_free_cb(void *p);
 SR_PRIV struct sr_channel *sr_next_enabled_channel(const struct sr_dev_inst *sdi,
                struct sr_channel *cur_channel);
+SR_PRIV gboolean sr_channels_differ(struct sr_channel *ch1, struct sr_channel *ch2);
+SR_PRIV gboolean sr_channel_lists_differ(GSList *l1, GSList *l2);
 
 /** Device instance data */
 struct sr_dev_inst {
@@ -904,6 +914,8 @@ SR_PRIV int sr_session_source_remove_pollfd(struct sr_session *session,
 SR_PRIV int sr_session_source_remove_channel(struct sr_session *session,
                GIOChannel *channel);
 
+SR_PRIV int sr_session_send_meta(const struct sr_dev_inst *sdi,
+               uint32_t key, GVariant *var);
 SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
                const struct sr_datafeed_packet *packet);
 SR_PRIV int sr_sessionfile_check(const char *filename);
@@ -1022,6 +1034,9 @@ SR_PRIV int sr_atof(const char *str, float *ret);
 SR_PRIV int sr_atod_ascii(const char *str, double *ret);
 SR_PRIV int sr_atof_ascii(const char *str, float *ret);
 
+SR_PRIV GString *sr_hexdump_new(const uint8_t *data, const size_t len);
+SR_PRIV void sr_hexdump_free(GString *s);
+
 /*--- soft-trigger.c --------------------------------------------------------*/
 
 struct soft_trigger_logic {
@@ -1037,6 +1052,7 @@ struct soft_trigger_logic {
        int pre_trigger_fill;
 };
 
+SR_PRIV int logic_channel_unitsize(GSList *channels);
 SR_PRIV struct soft_trigger_logic *soft_trigger_logic_new(
                const struct sr_dev_inst *sdi, struct sr_trigger *trigger,
                int pre_trigger_samples);
@@ -1044,7 +1060,7 @@ SR_PRIV void soft_trigger_logic_free(struct soft_trigger_logic *st);
 SR_PRIV int soft_trigger_logic_check(struct soft_trigger_logic *st, uint8_t *buf,
                int len, int *pre_trigger_samples);
 
-/*--- hardware/serial.c -----------------------------------------------------*/
+/*--- serial.c --------------------------------------------------------------*/
 
 #ifdef HAVE_LIBSERIALPORT
 enum {
@@ -1088,7 +1104,7 @@ 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);
 #endif
 
-/*--- hardware/ezusb.c ------------------------------------------------------*/
+/*--- ezusb.c ---------------------------------------------------------------*/
 
 #ifdef HAVE_LIBUSB_1_0
 SR_PRIV int ezusb_reset(struct libusb_device_handle *hdl, int set_clear);
@@ -1098,7 +1114,7 @@ SR_PRIV int ezusb_upload_firmware(struct sr_context *ctx, libusb_device *dev,
                                  int configuration, const char *name);
 #endif
 
-/*--- hardware/usb.c --------------------------------------------------------*/
+/*--- usb.c -----------------------------------------------------------------*/
 
 #ifdef HAVE_LIBUSB_1_0
 SR_PRIV GSList *sr_usb_find(libusb_context *usb_ctx, const char *conn);
@@ -1166,7 +1182,7 @@ SR_PRIV int sr_modbus_write_multiple_registers(struct sr_modbus_dev_inst*modbus,
 SR_PRIV int sr_modbus_close(struct sr_modbus_dev_inst *modbus);
 SR_PRIV void sr_modbus_free(struct sr_modbus_dev_inst *modbus);
 
-/*--- hardware/dmm/es519xx.c ------------------------------------------------*/
+/*--- dmm/es519xx.c ---------------------------------------------------------*/
 
 /**
  * All 11-byte es519xx chips repeat each block twice for each conversion cycle
@@ -1212,7 +1228,7 @@ SR_PRIV gboolean sr_es519xx_19200_14b_sel_lpf_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_es519xx_19200_14b_sel_lpf_parse(const uint8_t *buf,
                float *floatval, struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/fs9922.c -------------------------------------------------*/
+/*--- dmm/fs9922.c ----------------------------------------------------------*/
 
 #define FS9922_PACKET_SIZE 14
 
@@ -1230,7 +1246,7 @@ SR_PRIV int sr_fs9922_parse(const uint8_t *buf, float *floatval,
                            struct sr_datafeed_analog *analog, void *info);
 SR_PRIV void sr_fs9922_z1_diode(struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/fs9721.c -------------------------------------------------*/
+/*--- dmm/fs9721.c ----------------------------------------------------------*/
 
 #define FS9721_PACKET_SIZE 14
 
@@ -1250,7 +1266,31 @@ 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);
 
-/*--- hardware/dmm/ms8250d.c ------------------------------------------------*/
+/*--- 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
 
@@ -1265,7 +1305,7 @@ SR_PRIV gboolean sr_ms8250d_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_ms8250d_parse(const uint8_t *buf, float *floatval,
                             struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/dtm0660.c ------------------------------------------------*/
+/*--- dmm/dtm0660.c ---------------------------------------------------------*/
 
 #define DTM0660_PACKET_SIZE 15
 
@@ -1281,7 +1321,7 @@ SR_PRIV gboolean sr_dtm0660_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_dtm0660_parse(const uint8_t *buf, float *floatval,
                        struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/m2110.c --------------------------------------------------*/
+/*--- dmm/m2110.c -----------------------------------------------------------*/
 
 #define BBCGM_M2110_PACKET_SIZE 9
 
@@ -1292,7 +1332,7 @@ SR_PRIV gboolean sr_m2110_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_m2110_parse(const uint8_t *buf, float *floatval,
                             struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/metex14.c ------------------------------------------------*/
+/*--- dmm/metex14.c ---------------------------------------------------------*/
 
 #define METEX14_PACKET_SIZE 14
 
@@ -1316,7 +1356,7 @@ SR_PRIV gboolean sr_metex14_4packets_valid(const uint8_t *buf);
 SR_PRIV int sr_metex14_4packets_parse(const uint8_t *buf, float *floatval,
                             struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/rs9lcd.c -------------------------------------------------*/
+/*--- dmm/rs9lcd.c ----------------------------------------------------------*/
 
 #define RS9LCD_PACKET_SIZE 9
 
@@ -1327,7 +1367,7 @@ SR_PRIV gboolean sr_rs9lcd_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_rs9lcd_parse(const uint8_t *buf, float *floatval,
                            struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/bm25x.c --------------------------------------------------*/
+/*--- dmm/bm25x.c -----------------------------------------------------------*/
 
 #define BRYMEN_BM25X_PACKET_SIZE 15
 
@@ -1338,7 +1378,7 @@ SR_PRIV gboolean sr_brymen_bm25x_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_brymen_bm25x_parse(const uint8_t *buf, float *floatval,
                             struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/ut71x.c --------------------------------------------------*/
+/*--- dmm/ut71x.c -----------------------------------------------------------*/
 
 #define UT71X_PACKET_SIZE 11
 
@@ -1353,7 +1393,7 @@ SR_PRIV gboolean sr_ut71x_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_ut71x_parse(const uint8_t *buf, float *floatval,
                struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/vc870.c --------------------------------------------------*/
+/*--- dmm/vc870.c -----------------------------------------------------------*/
 
 #define VC870_PACKET_SIZE 23
 
@@ -1374,7 +1414,7 @@ SR_PRIV gboolean sr_vc870_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_vc870_parse(const uint8_t *buf, float *floatval,
                struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/vc96.c ---------------------------------------------------*/
+/*--- dmm/vc96.c ------------------------------------------------------------*/
 
 #define VC96_PACKET_SIZE 13
 
@@ -1389,7 +1429,7 @@ SR_PRIV gboolean sr_vc96_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_vc96_parse(const uint8_t *buf, float *floatval,
                struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/lcr/es51919.c ------------------------------------------------*/
+/*--- lcr/es51919.c ---------------------------------------------------------*/
 
 SR_PRIV void es51919_serial_clean(void *priv);
 SR_PRIV struct sr_dev_inst *es51919_serial_scan(GSList *options,
@@ -1407,7 +1447,7 @@ SR_PRIV int es51919_serial_config_list(uint32_t key, GVariant **data,
 SR_PRIV int es51919_serial_acquisition_start(const struct sr_dev_inst *sdi);
 SR_PRIV int es51919_serial_acquisition_stop(struct sr_dev_inst *sdi);
 
-/*--- hardware/dmm/ut372.c --------------------------------------------------*/
+/*--- dmm/ut372.c -----------------------------------------------------------*/
 
 #define UT372_PACKET_SIZE 27
 
@@ -1419,7 +1459,7 @@ SR_PRIV gboolean sr_ut372_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_ut372_parse(const uint8_t *buf, float *floatval,
                struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/dmm/asycii.c -------------------------------------------------*/
+/*--- dmm/asycii.c ----------------------------------------------------------*/
 
 #define ASYCII_PACKET_SIZE 16
 
@@ -1444,7 +1484,50 @@ SR_PRIV gboolean sr_asycii_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_asycii_parse(const uint8_t *buf, float *floatval,
                            struct sr_datafeed_analog *analog, void *info);
 
-/*--- hardware/scale/kern.c -------------------------------------------------*/
+/*--- dmm/eev121gw.c --------------------------------------------------------*/
+
+#define EEV121GW_PACKET_SIZE 19
+
+enum eev121gw_display {
+       EEV121GW_DISPLAY_MAIN,
+       EEV121GW_DISPLAY_SUB,
+       EEV121GW_DISPLAY_BAR,
+       EEV121GW_DISPLAY_COUNT,
+};
+
+struct eev121gw_info {
+       /* Selected channel. */
+       size_t ch_idx;
+       /*
+        * Measured value, number and sign/overflow flags, scale factor
+        * and significant digits.
+        */
+       uint32_t uint_value;
+       gboolean is_ofl, is_neg;
+       int factor, digits;
+       /* Currently active mode (meter's function). */
+       gboolean is_ac, is_dc, is_voltage, is_current, is_power, is_gain;
+       gboolean is_resistance, is_capacitance, is_diode, is_temperature;
+       gboolean is_continuity, is_frequency, is_period, is_duty_cycle;
+       /* Quantities associated with mode/function. */
+       gboolean is_ampere, is_volt, is_volt_ampere, is_dbm;
+       gboolean is_ohm, is_farad, is_celsius, is_fahrenheit;
+       gboolean is_hertz, is_seconds, is_percent, is_loop_current;
+       gboolean is_unitless, is_logic;
+       /* Other indicators. */
+       gboolean is_min, is_max, is_avg, is_1ms_peak, is_rel, is_hold;
+       gboolean is_low_pass, is_mem, is_bt, is_auto_range, is_test;
+       gboolean is_auto_poweroff, is_low_batt;
+};
+
+extern SR_PRIV const char *eev121gw_channel_formats[];
+SR_PRIV gboolean sr_eev121gw_packet_valid(const uint8_t *buf);
+SR_PRIV int sr_eev121gw_parse(const uint8_t *buf, float *floatval,
+                            struct sr_datafeed_analog *analog, void *info);
+SR_PRIV int sr_eev121gw_3displays_parse(const uint8_t *buf, float *floatval,
+                            struct sr_datafeed_analog *analog, void *info);
+
+/*--- scale/kern.c ----------------------------------------------------------*/
 
 struct kern_info {
        gboolean is_gram, is_carat, is_ounce, is_pound, is_troy_ounce;