X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=libsigrok.h;h=2ff6244ea0912670e9f16cb74091a599f4ba735e;hb=b35c829306b86dbeeeecf14de7fe30a05a88c914;hp=ccad393c05d8111eab3df25e41f2395c9bf6f79c;hpb=61136ea6035778f2894a1e32b78f94a0640a5a91;p=libsigrok.git diff --git a/libsigrok.h b/libsigrok.h index ccad393c..2ff6244e 100644 --- a/libsigrok.h +++ b/libsigrok.h @@ -194,7 +194,7 @@ struct sr_datafeed_analog { struct sr_input { struct sr_input_format *format; GHashTable *param; - struct sr_dev *vdev; + struct sr_dev_inst *sdi; void *internal; }; @@ -208,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; }; @@ -250,7 +250,7 @@ struct sr_dev { }; enum { - SR_PROBE_TYPE_LOGIC, + SR_PROBE_LOGIC, }; struct sr_probe { @@ -261,7 +261,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: e.g. 8n1 */ + SR_HWOPT_SERIALCOMM, +}; + +/* Hardware device capabilities */ enum { SR_HWCAP_DUMMY = 0, /* Used to terminate lists. Must be 0! */ @@ -280,17 +299,6 @@ 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: e.g. 8n1 */ - SR_HWCAP_SERIALCOMM, - - /*--- Device configuration ------------------------------------------*/ /** The device supports setting/changing its samplerate. */ @@ -390,12 +398,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; }; @@ -426,7 +436,12 @@ enum { /* Device info IDs */ enum { /* struct sr_dev_inst for this specific device */ + /* TODO: obsolete */ 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 */ @@ -472,17 +487,22 @@ struct sr_dev_driver { int api_version; int (*init) (void); int (*cleanup) (void); - int (*scan) (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 */ + GSList *instances; }; struct sr_session {