]> sigrok.org Git - libsigrok.git/commitdiff
sr: remove unused argument from hardware driver function init()
authorBert Vermeulen <redacted>
Tue, 3 Jul 2012 10:55:46 +0000 (12:55 +0200)
committerBert Vermeulen <redacted>
Fri, 3 Aug 2012 08:27:36 +0000 (10:27 +0200)
It was actually used in one way: the session file loaded abused it for
passing in the filename -- something it definitely wasn't intended for.
This now uses the proper way to pass arguments to a driver: the new
SR_HWCAP_SESSIONFILE.

The OLS driver could also use it as an indication of the serial port to
use instead of actively probing all serial ports on the system, but there
wasn't any frontend code that passed in such a parameter, making it
entirely useless. That will soon be handled differently with the new
scan() API call, regardless.

13 files changed:
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
hwdriver.c
libsigrok.h
session_driver.c
session_file.c

index b5d2b97f8e01772012f4c4f5db259340865a4ee3..4884afde18e5b13a0ce6f96e52342c8b57785575 100644 (file)
@@ -405,7 +405,7 @@ static int bin2bitbang(const char *filename,
        return SR_OK;
 }
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
        struct context *ctx;
@@ -413,9 +413,6 @@ static int hw_init(const char *devinfo)
        char serial_txt[10];
        uint32_t serial;
 
-       /* Avoid compiler warnings. */
-       (void)devinfo;
-
        if (!(ctx = g_try_malloc(sizeof(struct context)))) {
                sr_err("sigma: %s: ctx malloc failed", __func__);
                return SR_ERR_MALLOC;
index 5b82c3ab9d28eb495f46f6e0c6603db879aba37a..5a4ddbbe2e97c1198629fbb4899ab7a06cd19bfe 100644 (file)
@@ -39,16 +39,13 @@ static const uint16_t usb_pids[] = {
 /* Function prototypes. */
 static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        int ret;
        struct sr_dev_inst *sdi;
        struct context *ctx;
        unsigned int i;
 
-       /* Avoid compiler errors. */
-       (void)devinfo;
-
        /* Allocate memory for our private driver context. */
        if (!(ctx = g_try_malloc(sizeof(struct context)))) {
                sr_err("la8: %s: struct context malloc failed", __func__);
index 91f105f356d524c31533aaf0a31d15d55c8e0f93..ed8c6f4b1ece8ac7c75962e63e0c5befccd5754d 100644 (file)
@@ -140,13 +140,10 @@ static int thread_running;
 
 static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
 
-       /* Avoid compiler warnings. */
-       (void)devinfo;
-
        sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, DEMONAME, NULL, NULL);
        if (!sdi) {
                sr_err("demo: %s: sr_dev_inst_new failed", __func__);
index 951c9196ffeebd147e8e38075676c52f5caba8ce..736490feca20e9c3cfa5d2d3b26193c9055f10ff 100644 (file)
@@ -382,7 +382,7 @@ static struct context *fx2lafw_dev_new(void)
  * API callbacks
  */
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
        struct libusb_device_descriptor des;
@@ -393,9 +393,6 @@ static int hw_init(const char *devinfo)
        int devcnt = 0;
        int i, j;
 
-       /* Avoid compiler warnings. */
-       (void)devinfo;
-
        if (libusb_init(&usb_context) != 0) {
                sr_warn("fx2lafw: Failed to initialize libusb.");
                return 0;
index 8f33226329895810c1b1fd380f9c18c357131ba9..ca50a728f9ca13aefa57dd529a04c64071c1622e 100644 (file)
@@ -56,15 +56,12 @@ SR_PRIV GSList *genericdmm_dev_insts = NULL;
 SR_PRIV libusb_context *genericdmm_usb_context = NULL;
 
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
        struct context *ctx;
        int devcnt = 0;
 
-       /* Avoid compiler warnings. */
-       (void)devinfo;
-
        if (libusb_init(&genericdmm_usb_context) != 0) {
                sr_err("genericdmm: Failed to initialize USB.");
                return 0;
index 8a7e9f744a434167b189eca699470e0aade44690..dc8dbef87b8823eab3886e0daab6155734d67a6d 100644 (file)
@@ -200,7 +200,7 @@ static int configure_probes(struct context *ctx, const GSList *probes)
        return SR_OK;
 }
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
        struct libusb_device_descriptor des;
@@ -209,9 +209,6 @@ static int hw_init(const char *devinfo)
        libusb_device **devlist;
        int err, devcnt, i, j;
 
-       /* Avoid compiler warnings. */
-       (void)devinfo;
-
        if (libusb_init(&usb_context) != 0) {
                sr_err("hantek-dso: Failed to initialize USB.");
                return 0;
index 7c25817bebab29ab939ad7632d9547d919bddb61..4b3d921839d1d3b4bd5615bcd7153addf89f3086 100644 (file)
@@ -401,7 +401,7 @@ static int mso_parse_serial(const char *iSerial, const char *iProduct,
        return SR_OK;
 }
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
        int devcnt = 0;
@@ -410,8 +410,6 @@ static int hw_init(const char *devinfo)
        struct udev_list_entry *devs, *dev_list_entry;
        struct context *ctx;
 
-       devinfo = devinfo;
-
        /* It's easier to map usb<->serial using udev */
        /*
         * FIXME: On windows we can get the same information from the
index f2706d11220e17006f4556f2887dffebd1445184..02afff33a7df027fc3f733681ceafd979669f17f 100644 (file)
@@ -348,7 +348,7 @@ static struct sr_dev_inst *get_metadata(int fd)
        return sdi;
 }
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
        struct context *ctx;
@@ -359,12 +359,8 @@ static int hw_init(const char *devinfo)
 
        final_devcnt = 0;
 
-       if (devinfo)
-               ports = g_slist_append(NULL, g_strdup(devinfo));
-       else
-               /* No specific device given, so scan all serial ports. */
-               ports = list_serial_ports();
-
+       /* Scan all serial ports. */
+       ports = list_serial_ports();
        num_ports = g_slist_length(ports);
 
        if (!(fds = g_try_malloc0(num_ports * sizeof(GPollFD)))) {
index 627b937e0ab1bbf66880da1e957b682f026c01c8..25660af08eaf7d3839d454a7eebf3564c8f6ef23 100644 (file)
@@ -327,7 +327,7 @@ static int configure_probes(struct sr_dev_inst *sdi, const GSList *probes)
  * API callbacks
  */
 
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
        struct sr_dev_inst *sdi;
        struct libusb_device_descriptor des;
@@ -335,9 +335,6 @@ static int hw_init(const char *devinfo)
        int ret, devcnt, i;
        struct context *ctx;
 
-       /* Avoid compiler warnings. */
-       (void)devinfo;
-
        /* Allocate memory for our private driver context. */
        if (!(ctx = g_try_malloc(sizeof(struct context)))) {
                sr_err("zp: %s: ctx malloc failed", __func__);
index bd3bf8a16ac9b0ec3e395e8c826af33fdb67b451..7a9e7e668f7a1c0086818cd56e1ff262f7df6ec0 100644 (file)
@@ -144,7 +144,7 @@ SR_API int sr_driver_init(struct sr_dev_driver *driver)
        char **probe_names;
 
        sr_dbg("initializing %s driver", driver->name);
-       num_devs = driver->init(NULL);
+       num_devs = driver->init();
        for (i = 0; i < num_devs; i++) {
                num_probes = GPOINTER_TO_INT(
                                driver->dev_info_get(i, SR_DI_NUM_PROBES));
index 369b2a17d9cef3b370040aceeb3166effdbf258d..695b360ba94332d6922b2ce25e4a484574f3b718 100644 (file)
@@ -337,6 +337,9 @@ enum {
 
        /*--- Special stuff -------------------------------------------------*/
 
+       /** Session filename */
+       SR_HWCAP_SESSIONFILE,
+
        /* TODO: Better description. */
        /** The device supports specifying a capturefile to inject. */
        SR_HWCAP_CAPTUREFILE,
@@ -467,7 +470,7 @@ struct sr_dev_driver {
        char *name;
        char *longname;
        int api_version;
-       int (*init) (const char *devinfo);
+       int (*init) (void);
        int (*cleanup) (void);
 
        /* Device-specific */
index ddcf0add8b3cb5f5bb68060a212e007bd7a5701a..ed397a96e466a250020dfd73c2da5a61f00da28b 100644 (file)
@@ -30,6 +30,7 @@
 #define CHUNKSIZE (512 * 1024)
 
 struct session_vdev {
+       char *sessionfile;
        char *capturefile;
        struct zip *archive;
        struct zip_file *capfile;
@@ -39,7 +40,6 @@ struct session_vdev {
        int num_probes;
 };
 
-static char *sessionfile = NULL;
 static GSList *dev_insts = NULL;
 static const int hwcaps[] = {
        SR_HWCAP_CAPTUREFILE,
@@ -148,9 +148,8 @@ static int hw_cleanup(void);
  *
  * @return TODO.
  */
-static int hw_init(const char *devinfo)
+static int hw_init(void)
 {
-       sessionfile = g_strdup(devinfo);
 
        return 0;
 }
@@ -169,8 +168,6 @@ static int hw_cleanup(void)
 
        sr_session_source_remove(-1);
 
-       g_free(sessionfile);
-
        return SR_OK;
 }
 
@@ -246,6 +243,11 @@ static int hw_dev_config_set(int dev_index, int hwcap, const void *value)
                sr_info("session driver: setting samplerate to %" PRIu64,
                        vdev->samplerate);
                break;
+       case SR_HWCAP_SESSIONFILE:
+               vdev->sessionfile = g_strdup(value);
+               sr_info("session driver: setting sessionfile to %s",
+                       vdev->sessionfile);
+               break;
        case SR_HWCAP_CAPTUREFILE:
                vdev->capturefile = g_strdup(value);
                sr_info("session driver: setting capturefile to %s",
@@ -280,24 +282,24 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data)
        if (!(vdev = get_vdev_by_index(dev_index)))
                return SR_ERR;
 
-       sr_info("session_driver: opening archive %s file %s", sessionfile,
+       sr_info("session_driver: opening archive %s file %s", vdev->sessionfile,
                vdev->capturefile);
 
-       if (!(vdev->archive = zip_open(sessionfile, 0, &ret))) {
+       if (!(vdev->archive = zip_open(vdev->sessionfile, 0, &ret))) {
                sr_err("session driver: Failed to open session file '%s': "
-                      "zip error %d\n", sessionfile, ret);
+                      "zip error %d\n", vdev->sessionfile, ret);
                return SR_ERR;
        }
 
        if (zip_stat(vdev->archive, vdev->capturefile, 0, &zs) == -1) {
                sr_err("session driver: Failed to check capture file '%s' in "
-                      "session file '%s'.", vdev->capturefile, sessionfile);
+                      "session file '%s'.", vdev->capturefile, vdev->sessionfile);
                return SR_ERR;
        }
 
        if (!(vdev->capfile = zip_fopen(vdev->archive, vdev->capturefile, 0))) {
                sr_err("session driver: Failed to open capture file '%s' in "
-                      "session file '%s'.", vdev->capturefile, sessionfile);
+                      "session file '%s'.", vdev->capturefile, vdev->sessionfile);
                return SR_ERR;
        }
 
index 6b7781626c381b01f9da54a3ab12bf4ac091d790..c4830673e52f251d87ab8c04fedeb413a991a2b6 100644 (file)
@@ -117,8 +117,9 @@ SR_API int sr_session_load(const char *filename)
                                        dev = sr_dev_new(&session_driver, devcnt);
                                        if (devcnt == 0)
                                                /* first device, init the driver */
-                                               dev->driver->init((char *)filename);
+                                               dev->driver->init();
                                        sr_session_dev_add(dev);
+                                       dev->driver->dev_config_set(devcnt, SR_HWCAP_SESSIONFILE, filename);
                                        dev->driver->dev_config_set(devcnt, SR_HWCAP_CAPTUREFILE, val);
                                        g_ptr_array_add(capturefiles, val);
                                } else if (!strcmp(keys[j], "samplerate")) {