]> sigrok.org Git - libsigrok.git/commitdiff
sr: add new driver API call: scan()
authorBert Vermeulen <redacted>
Thu, 5 Jul 2012 09:27:48 +0000 (11:27 +0200)
committerBert Vermeulen <redacted>
Fri, 3 Aug 2012 08:27:36 +0000 (10:27 +0200)
This changes the semantics of the init() call as well. That now only
initializes the driver -- an administrative affair, no hardware gets
touched during this call. It returns a standard SR_OK or SR_ERR* code.

The scan() call does a discovery run for devices it knows, and returns
the number found. It can be called at any time.

hardware/asix-sigma/asix-sigma.c
hardware/chronovu-la8/api.c
hardware/demo/demo.c
hardware/fx2lafw/fx2lafw.c
hardware/genericdmm/api.c
hardware/hantek-dso/api.c
hardware/link-mso19/link-mso19.c
hardware/openbench-logic-sniffer/ols.c
hardware/zeroplus-logic-cube/zeroplus.c
libsigrok.h
session_driver.c

index 4884afde18e5b13a0ce6f96e52342c8b57785575..097a56489437cde00c3b164c9bf4adbb60527cdd 100644 (file)
@@ -406,6 +406,14 @@ static int bin2bitbang(const char *filename,
 }
 
 static int hw_init(void)
+{
+
+       /* Nothing to do. */
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        struct sr_dev_inst *sdi;
        struct context *ctx;
@@ -1437,6 +1445,7 @@ SR_PRIV struct sr_dev_driver asix_sigma_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index 5a4ddbbe2e97c1198629fbb4899ab7a06cd19bfe..08348e72b502929ca4f1d3f542279f2ef1023106 100644 (file)
@@ -40,6 +40,14 @@ static const uint16_t usb_pids[] = {
 static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
 
 static int hw_init(void)
+{
+
+       /* Nothing to do. */
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        int ret;
        struct sr_dev_inst *sdi;
@@ -542,6 +550,7 @@ SR_PRIV struct sr_dev_driver chronovu_la8_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index ed8c6f4b1ece8ac7c75962e63e0c5befccd5754d..175e72630ab48f11bc6eda9e5c633956b15a55cf 100644 (file)
@@ -141,6 +141,14 @@ static int thread_running;
 static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
 
 static int hw_init(void)
+{
+
+       /* Nothing to do. */
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        struct sr_dev_inst *sdi;
 
@@ -510,6 +518,7 @@ SR_PRIV struct sr_dev_driver demo_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index 736490feca20e9c3cfa5d2d3b26193c9055f10ff..4344cf24199e4913b3313d09fafb89abe58f26e1 100644 (file)
@@ -383,22 +383,27 @@ static struct context *fx2lafw_dev_new(void)
  */
 
 static int hw_init(void)
+{
+
+       if (libusb_init(&usb_context) != 0) {
+               sr_warn("fx2lafw: Failed to initialize libusb.");
+               return SR_ERR;
+       }
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        struct sr_dev_inst *sdi;
        struct libusb_device_descriptor des;
        const struct fx2lafw_profile *prof;
        struct context *ctx;
        libusb_device **devlist;
-       int ret;
-       int devcnt = 0;
-       int i, j;
-
-       if (libusb_init(&usb_context) != 0) {
-               sr_warn("fx2lafw: Failed to initialize libusb.");
-               return 0;
-       }
+       int devcnt, ret, i, j;
 
        /* Find all fx2lafw compatible devices and upload firmware to them. */
+       devcnt = 0;
        libusb_get_device_list(usb_context, &devlist);
        for (i = 0; devlist[i]; i++) {
 
@@ -1009,6 +1014,7 @@ SR_PRIV struct sr_dev_driver fx2lafw_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index ca50a728f9ca13aefa57dd529a04c64071c1622e..4a5da74432a5e1b448756279ec824169340f0158 100644 (file)
@@ -58,15 +58,22 @@ SR_PRIV libusb_context *genericdmm_usb_context = NULL;
 
 static int hw_init(void)
 {
-       struct sr_dev_inst *sdi;
-       struct context *ctx;
-       int devcnt = 0;
 
        if (libusb_init(&genericdmm_usb_context) != 0) {
                sr_err("genericdmm: Failed to initialize USB.");
-               return 0;
+               return SR_ERR;
        }
 
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
+{
+       struct sr_dev_inst *sdi;
+       struct context *ctx;
+       int devcnt = 0;
+
        if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
                sr_err("genericdmm: ctx malloc failed.");
                return 0;
@@ -610,6 +617,7 @@ SR_PRIV struct sr_dev_driver genericdmm_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index dc8dbef87b8823eab3886e0daab6155734d67a6d..40303fee1c2e9d643a82bc465800af5357b6f1d5 100644 (file)
@@ -201,25 +201,31 @@ static int configure_probes(struct context *ctx, const GSList *probes)
 }
 
 static int hw_init(void)
+{
+
+       if (libusb_init(&usb_context) != 0) {
+               sr_err("hantek-dso: Failed to initialize USB.");
+               return SR_ERR;
+       }
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        struct sr_dev_inst *sdi;
        struct libusb_device_descriptor des;
        const struct dso_profile *prof;
        struct context *ctx;
        libusb_device **devlist;
-       int err, devcnt, i, j;
-
-       if (libusb_init(&usb_context) != 0) {
-               sr_err("hantek-dso: Failed to initialize USB.");
-               return 0;
-       }
+       int devcnt, ret, i, j;
 
        /* Find all Hantek DSO devices and upload firmware to all of them. */
        devcnt = 0;
        libusb_get_device_list(usb_context, &devlist);
        for (i = 0; devlist[i]; i++) {
-               if ((err = libusb_get_device_descriptor(devlist[i], &des))) {
-                       sr_err("hantek-dso: failed to get device descriptor: %d", err);
+               if ((ret = libusb_get_device_descriptor(devlist[i], &des))) {
+                       sr_err("hantek-dso: failed to get device descriptor: %d", ret);
                        continue;
                }
 
@@ -856,6 +862,7 @@ SR_PRIV struct sr_dev_driver hantek_dso_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index 4b3d921839d1d3b4bd5615bcd7153addf89f3086..c264b3cc396986ba844848f5149dfc324ca3e2f5 100644 (file)
@@ -402,6 +402,14 @@ static int mso_parse_serial(const char *iSerial, const char *iProduct,
 }
 
 static int hw_init(void)
+{
+
+       /* Nothing to do. */
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        struct sr_dev_inst *sdi;
        int devcnt = 0;
@@ -840,6 +848,7 @@ SR_PRIV struct sr_dev_driver link_mso19_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index 02afff33a7df027fc3f733681ceafd979669f17f..bcbba5dfa151db6437e67a021ffb9badf8161ff7 100644 (file)
@@ -349,6 +349,14 @@ static struct sr_dev_inst *get_metadata(int fd)
 }
 
 static int hw_init(void)
+{
+
+       /* Nothing to do. */
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        struct sr_dev_inst *sdi;
        struct context *ctx;
@@ -1047,6 +1055,7 @@ SR_PRIV struct sr_dev_driver ols_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index 25660af08eaf7d3839d454a7eebf3564c8f6ef23..ac396dede945615963a1aa917c068bae32c19cce 100644 (file)
@@ -328,6 +328,14 @@ static int configure_probes(struct sr_dev_inst *sdi, const GSList *probes)
  */
 
 static int hw_init(void)
+{
+
+       /* Nothing to do. */
+
+       return SR_OK;
+}
+
+static int hw_scan(void)
 {
        struct sr_dev_inst *sdi;
        struct libusb_device_descriptor des;
@@ -737,6 +745,7 @@ SR_PRIV struct sr_dev_driver zeroplus_logic_cube_driver_info = {
        .api_version = 1,
        .init = hw_init,
        .cleanup = hw_cleanup,
+       .scan = hw_scan,
        .dev_open = hw_dev_open,
        .dev_close = hw_dev_close,
        .dev_info_get = hw_dev_info_get,
index 695b360ba94332d6922b2ce25e4a484574f3b718..ccad393c05d8111eab3df25e41f2395c9bf6f79c 100644 (file)
@@ -472,6 +472,7 @@ struct sr_dev_driver {
        int api_version;
        int (*init) (void);
        int (*cleanup) (void);
+       int (*scan) (void);
 
        /* Device-specific */
        int (*dev_open) (int dev_index);
index ed397a96e466a250020dfd73c2da5a61f00da28b..0b8c1ed26cc2833b646708a6ba55c68cfb2e0903 100644 (file)
@@ -151,7 +151,7 @@ static int hw_cleanup(void);
 static int hw_init(void)
 {
 
-       return 0;
+       return SR_OK;
 }
 
 /**