]> sigrok.org Git - libsigrok.git/blobdiff - src/libsigrok-internal.h
device: introduce common sr_channel_free() support code
[libsigrok.git] / src / libsigrok-internal.h
index 33048562b492f656343b09dab9e7c7d734bde86a..6f43e8da78ac63d04c3de550dcd4d9e2b347994e 100644 (file)
@@ -426,6 +426,8 @@ struct sr_input_module {
         * Check if this input module can load and parse the specified stream.
         *
         * @param[in] metadata Metadata the module can use to identify the stream.
+        * @param[out] confidence "Strength" of the detection.
+        *   Specialized handlers can take precedence over generic/basic support.
         *
         * @retval SR_OK This module knows the format.
         * @retval SR_ERR_NA There wasn't enough data for this module to
@@ -434,8 +436,15 @@ struct sr_input_module {
         *   it. This means the stream is either corrupt, or indicates a
         *   feature that the module does not support.
         * @retval SR_ERR This module does not know the format.
+        *
+        * Lower numeric values of 'confidence' mean that the input module
+        * stronger believes in its capability to handle this specific format.
+        * This way, multiple input modules can claim support for a format,
+        * and the application can pick the best match, or try fallbacks
+        * in case of errors. This approach also copes with formats that
+        * are unreliable to detect in the absence of magic signatures.
         */
-       int (*format_match) (GHashTable *metadata);
+       int (*format_match) (GHashTable *metadata, unsigned int *confidence);
 
        /**
         * Initialize the input module.
@@ -736,7 +745,7 @@ struct drv_context {
 
 /*--- log.c -----------------------------------------------------------------*/
 
-#if defined(G_OS_WIN32) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+#if defined(_WIN32) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
 /*
  * On MinGW, we need to specify the gnu_printf format flavor or GCC
  * will assume non-standard Microsoft printf syntax.
@@ -773,6 +782,8 @@ 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);
 
@@ -900,9 +911,6 @@ SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
 SR_PRIV int sr_sessionfile_check(const char *filename);
 SR_PRIV struct sr_dev_inst *sr_session_prepare_sdi(const char *filename,
                struct sr_session **session);
-SR_PRIV int sr_packet_copy(const struct sr_datafeed_packet *packet,
-               struct sr_datafeed_packet **copy);
-SR_PRIV void sr_packet_free(struct sr_datafeed_packet *packet);
 
 /*--- session_file.c --------------------------------------------------------*/
 
@@ -954,6 +962,8 @@ SR_PRIV int std_opts_config_list(uint32_t key, GVariant **data,
        const uint32_t scanopts[], size_t scansize, const uint32_t drvopts[],
        size_t drvsize, const uint32_t devopts[], size_t devsize);
 
+extern SR_PRIV const uint32_t NO_OPTS[1];
+
 #define STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts) \
        std_opts_config_list(key, data, sdi, cg, ARRAY_AND_SIZE(scanopts), \
                ARRAY_AND_SIZE(drvopts), ARRAY_AND_SIZE(devopts))
@@ -969,9 +979,9 @@ SR_PRIV GVariant *std_gvar_min_max_step_thresholds(const double dmin, const doub
 SR_PRIV GVariant *std_gvar_tuple_u64(uint64_t low, uint64_t high);
 SR_PRIV GVariant *std_gvar_tuple_double(double low, double high);
 
-SR_PRIV GVariant *std_gvar_array_i32(const int32_t *a, unsigned int n);
-SR_PRIV GVariant *std_gvar_array_u32(const uint32_t *a, unsigned int n);
-SR_PRIV GVariant *std_gvar_array_u64(const uint64_t *a, unsigned int n);
+SR_PRIV GVariant *std_gvar_array_i32(const int32_t a[], unsigned int n);
+SR_PRIV GVariant *std_gvar_array_u32(const uint32_t a[], unsigned int n);
+SR_PRIV GVariant *std_gvar_array_u64(const uint64_t a[], unsigned int n);
 SR_PRIV GVariant *std_gvar_array_str(const char *a[], unsigned int n);
 
 SR_PRIV GVariant *std_gvar_thresholds(const double a[][2], unsigned int n);
@@ -1366,6 +1376,21 @@ 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 ---------------------------------------------------*/
+
+#define VC96_PACKET_SIZE 13
+
+struct vc96_info {
+       size_t ch_idx;
+       gboolean is_ac, is_dc, is_resistance, is_diode, is_ampere, is_volt;
+       gboolean is_ohm, is_micro, is_milli, is_kilo, is_mega, is_hfe;
+       gboolean is_unitless;
+};
+
+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 ------------------------------------------------*/
 
 SR_PRIV void es51919_serial_clean(void *priv);