]> sigrok.org Git - libsigrok.git/blobdiff - libsigrok.h
sr/drivers: obsolete SR_HWCAP_PROBECONFIG
[libsigrok.git] / libsigrok.h
index 2c0d6f9648a6ee762c85fdf6703e11ee8320e6c0..75f6c3c26b6a362b77c1a452aa5c15afbfd5ca63 100644 (file)
@@ -193,8 +193,9 @@ struct sr_datafeed_analog {
 
 struct sr_input {
        struct sr_input_format *format;
-       char *param;
-       struct sr_dev *vdev;
+       GHashTable *param;
+       struct sr_dev_inst *sdi;
+       void *internal;
 };
 
 struct sr_input_format {
@@ -207,7 +208,7 @@ struct sr_input_format {
 
 struct sr_output {
        struct sr_output_format *format;
-       struct sr_dev *dev;
+       struct sr_dev_inst *sdi;
        char *param;
        void *internal;
 };
@@ -249,7 +250,8 @@ struct sr_dev {
 };
 
 enum {
-       SR_PROBE_TYPE_LOGIC,
+       SR_PROBE_LOGIC,
+       SR_PROBE_ANALOG,
 };
 
 struct sr_probe {
@@ -260,7 +262,26 @@ struct sr_probe {
        char *trigger;
 };
 
-/* Hardware driver capabilities */
+struct sr_hwopt {
+       int hwopt;
+       const void *value;
+};
+
+/* Hardware driver options */
+enum {
+       SR_HWOPT_DUMMY = 0, /* Used to terminate lists. Must be 0! */
+
+       /** Some drivers cannot detect the exact model they're talking to. */
+       SR_HWOPT_MODEL,
+
+       /** Specification on how to connect to a device */
+       SR_HWOPT_CONN,
+
+       /** Serial communication spec: <data bits><parity><stop bit> e.g. 8n1 */
+       SR_HWOPT_SERIALCOMM,
+};
+
+/* Hardware device capabilities */
 enum {
        SR_HWCAP_DUMMY = 0, /* Used to terminate lists. Must be 0! */
 
@@ -279,26 +300,11 @@ enum {
        SR_HWCAP_DEMO_DEV,
 
 
-       /*--- Device communication ------------------------------------------*/
-       /** Some drivers cannot detect the exact model they're talking to. */
-       SR_HWCAP_MODEL,
-
-       /** Specification on how to connect to a device */
-       SR_HWCAP_CONN,
-
-       /** Serial communication spec: <data bits><parity><stop bit> e.g. 8n1 */
-       SR_HWCAP_SERIALCOMM,
-
-
        /*--- Device configuration ------------------------------------------*/
 
        /** The device supports setting/changing its samplerate. */
        SR_HWCAP_SAMPLERATE,
 
-       /* TODO: Better description? Rename to PROBE_AND_TRIGGER_CONFIG? */
-       /** The device supports setting a probe mask. */
-       SR_HWCAP_PROBECONFIG,
-
        /** The device supports setting a pre/post-trigger capture ratio. */
        SR_HWCAP_CAPTURE_RATIO,
 
@@ -336,6 +342,9 @@ enum {
 
        /*--- Special stuff -------------------------------------------------*/
 
+       /** Session filename */
+       SR_HWCAP_SESSIONFILE,
+
        /* TODO: Better description. */
        /** The device supports specifying a capturefile to inject. */
        SR_HWCAP_CAPTUREFILE,
@@ -386,12 +395,14 @@ struct sr_hwcap_option {
 };
 
 struct sr_dev_inst {
+       struct sr_dev_driver *driver;
        int index;
        int status;
        int inst_type;
        char *vendor;
        char *model;
        char *version;
+       GSList *probes;
        void *priv;
 };
 
@@ -421,8 +432,10 @@ enum {
 
 /* Device info IDs */
 enum {
-       /* struct sr_dev_inst for this specific device */
-       SR_DI_INST,
+       /* A list of options supported by the driver. */
+       SR_DI_HWOPTS,
+       /* A list of capabilities supported by the device. */
+       SR_DI_HWCAPS,
        /* The number of probes connected to this device */
        SR_DI_NUM_PROBES,
        /* The probe names on this device */
@@ -466,18 +479,24 @@ struct sr_dev_driver {
        char *name;
        char *longname;
        int api_version;
-       int (*init) (const char *devinfo);
+       int (*init) (void);
        int (*cleanup) (void);
+       GSList *(*scan) (GSList *options);
 
        /* Device-specific */
-       int (*dev_open) (int dev_index);
-       int (*dev_close) (int dev_index);
-       const void *(*dev_info_get) (int dev_index, int dev_info_id);
-       int (*dev_status_get) (int dev_index);
-       const int *(*hwcap_get_all) (void);
-       int (*dev_config_set) (int dev_index, int hwcap, const void *value);
-       int (*dev_acquisition_start) (int dev_index, void *session_dev_id);
-       int (*dev_acquisition_stop) (int dev_index, void *session_dev_id);
+       int (*dev_open) (struct sr_dev_inst *sdi);
+       int (*dev_close) (struct sr_dev_inst *sdi);
+       int (*info_get) (int info_id, const void **data,
+                       const struct sr_dev_inst *sdi);
+       int (*dev_config_set) (const struct sr_dev_inst *sdi, int hwcap,
+                       const void *value);
+       int (*dev_acquisition_start) (const struct sr_dev_inst *sdi,
+                       void *cb_data);
+       int (*dev_acquisition_stop) (const struct sr_dev_inst *sdi,
+                       void *cb_data);
+
+       /* Dynamic */
+       void *priv;
 };
 
 struct sr_session {
@@ -486,7 +505,17 @@ struct sr_session {
        /* list of sr_receive_data_callback_t */
        GSList *datafeed_callbacks;
        GTimeVal starttime;
-       gboolean running;
+
+       unsigned int num_sources;
+
+       /* Both "sources" and "pollfds" are of the same size and contain pairs of
+        * descriptor and callback function. We can not embed the GPollFD into the
+        * source struct since we want to be able to pass the array of all poll
+        * descriptors to g_poll.
+        */
+       struct source *sources;
+       GPollFD *pollfds;
+       int source_timeout;
 };
 
 #include "proto.h"