]> sigrok.org Git - libsigrok.git/commitdiff
Factor out common hw_init() driver code.
authorUwe Hermann <redacted>
Tue, 29 Jan 2013 11:55:00 +0000 (12:55 +0100)
committerUwe Hermann <redacted>
Tue, 29 Jan 2013 11:56:02 +0000 (12:56 +0100)
Most drivers do pretty much the same things in their hw_init()
right now, so factor out that code to std_hw_init() in std.c.

22 files changed:
Makefile.am
hardware/agilent-dmm/api.c
hardware/alsa/api.c
hardware/asix-sigma/asix-sigma.c
hardware/chronovu-la8/api.c
hardware/colead-slm/api.c
hardware/demo/demo.c
hardware/fluke-dmm/api.c
hardware/fx2lafw/fx2lafw.c
hardware/hantek-dso/api.c
hardware/lascar-el-usb/api.c
hardware/link-mso19/api.c
hardware/nexus-osciprime/api.c
hardware/openbench-logic-sniffer/api.c
hardware/rigol-ds1xx2/api.c
hardware/serial-dmm/api.c
hardware/tondaj-sl-814/api.c
hardware/uni-t-dmm/api.c
hardware/victor-dmm/api.c
hardware/zeroplus-logic-cube/zeroplus.c
libsigrok-internal.h
std.c [new file with mode: 0644]

index 503233b7eab610d214605c7098610d9caff6d874..4e2da389aa635846d988618a27f443bb9ec84bd4 100644 (file)
@@ -37,7 +37,8 @@ libsigrok_la_SOURCES = \
        strutil.c \
        log.c \
        version.c \
-       error.c
+       error.c \
+       std.c
 
 libsigrok_la_LIBADD = \
        $(LIBOBJS) \
index 8c792a35c5d10bdd903d18cbe317466908aa92f5..26213938af2bb09e36d662c65a467f00c8816675 100644 (file)
@@ -91,17 +91,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 67773f60582e5977f0daa2a3faf528d400bf7df0..d9dd83ef1fc0ef329cf7f8113f02851051e099e5 100644 (file)
@@ -52,17 +52,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index d40c911b347c1a572398d1c469f3f73343356aa2..59a1ec4289c3e183494582b75a7a03a492ab36d3 100644 (file)
@@ -420,17 +420,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 2a97440f013a21d3cf8e4cfa2ef7fa90aaae221e..b1f889198d13ed99cb56eed95db3c2433ea30685 100644 (file)
@@ -70,17 +70,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 39e557a676ee2106fd9d232e82e6c154f0edcab7..5532b1a162fca5e2a93079afd713c6ce35165977 100644 (file)
@@ -74,17 +74,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 923d20a9b60acdd256e3dfba8e2e64faa0b5feed..60a511f2532f6d4321d2fbf1ff225c2affd0b212 100644 (file)
@@ -148,17 +148,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 331b4afdabe6eb2dbfc2916be9cf98bec1f3260a..0d73fb63780535388682e5a047b90d23aa530fec 100644 (file)
@@ -89,17 +89,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *fluke_scan(const char *conn, const char *serialcomm)
index b0f94c590db4e1649b444e9ce17433911780e5fc..a0955371a21e105fd129208a03e7c6d4ef264691 100644 (file)
@@ -384,17 +384,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index acb6d815b786446d629f0fb90825cbf3a6169537..97742ffe88a4a8bb225a2449e016162bbbcd9b4c 100644 (file)
@@ -259,17 +259,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 1804f2d54793b1ea4e450a2661b8a2db2051b78b..1ab2a68fdb3e7f6a0fc6f23401e1d417dc4c93a4 100644 (file)
@@ -70,17 +70,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 11ae88880df8008386c855146b4b9bcfd48af81a..9fcb9cf81f49d3a9ce32c89562b29620a3f1f81c 100644 (file)
@@ -54,17 +54,7 @@ static struct sr_dev_driver *di = &link_mso19_driver_info;
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 1b8d8083858a45fce348636d55d07410a7993894..bb3936b83b6d4a01f7a39890d6a5ce80ce88955c 100644 (file)
@@ -139,17 +139,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 6da0eab25eaea28f8ee5b1edb10f5c0969e8ea2e..f69ca5113b91f883298d104483db68bd17942cd3 100644 (file)
@@ -57,17 +57,7 @@ static struct sr_dev_driver *di = &ols_driver_info;
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 894f5afc01343c24a489449a8f188fe94b400ac1..8107fb8a9ab71380d98dd00f23098538629b823c 100644 (file)
@@ -152,17 +152,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index b3b0a8efa2963794f0f29c25d2ce8d53801201db..987fafbfadbd0f5fb5ff0ce44b0b604103b28f1c 100644 (file)
@@ -192,19 +192,9 @@ static int clear_instances(int dmm)
 
 static int hw_init(struct sr_context *sr_ctx, int dmm)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
        sr_dbg("Selected '%s' subdriver.", dmms[dmm].di->name);
 
-       drvc->sr_ctx = sr_ctx;
-       dmms[dmm].di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, dmms[dmm].di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *scan(const char *conn, const char *serialcomm, int dmm)
index c621eeb8cf3042033c3fe21ac628447b89fd0014..da88bd070d479939db147dde54938d7c8da2e49c 100644 (file)
@@ -70,17 +70,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 26b3e16e7a8fe6327cd8dd2f43f62fb32747de66..fcc8c0f6b82456ee80244d1b0caf8a4baae1c21f 100644 (file)
@@ -57,23 +57,13 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx, int dmm)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
        if (dmm == UNI_T_UT61D)
                di = di_ut61d;
        else if (dmm == VOLTCRAFT_VC820)
                di = di_vc820;
        sr_dbg("Selected '%s' subdriver.", di->name);
 
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static int hw_init_ut61d(struct sr_context *sr_ctx)
index 0edd79e4c650fc374a4d4fe181ad3af337edfb5c..75c893d1779150fb34aa1e868b0bec7e78b79bf9 100644 (file)
@@ -74,17 +74,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN);
 }
 
 static GSList *hw_scan(GSList *options)
index 8ccd40f164fc27e15ab01d6699f729d504f310eb..9d9e227d1b1ecf8120b4e1284ca67de03815768b 100644 (file)
@@ -289,17 +289,7 @@ static int clear_instances(void)
 
 static int hw_init(struct sr_context *sr_ctx)
 {
-       struct drv_context *drvc;
-
-       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
-               sr_err("Driver context malloc failed.");
-               return SR_ERR_MALLOC;
-       }
-
-       drvc->sr_ctx = sr_ctx;
-       di->priv = drvc;
-
-       return SR_OK;
+       return std_hw_init(sr_ctx, di, "zeroplus: ");
 }
 
 static GSList *hw_scan(GSList *options)
index 59709e63d195fb6ed8879371c37e299d19e0a787..41144cbd22dd14616e2b999aa44e7302720f8596 100644 (file)
@@ -123,6 +123,11 @@ SR_PRIV int sr_source_add(int fd, int events, int timeout,
 SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
                            const struct sr_datafeed_packet *packet);
 
+/*--- std.c -----------------------------------------------------------------*/
+
+SR_PRIV int std_hw_init(struct sr_context *sr_ctx, struct sr_dev_driver *di,
+                       const char *prefix);
+
 /*--- hardware/common/serial.c ----------------------------------------------*/
 
 enum {
diff --git a/std.c b/std.c
new file mode 100644 (file)
index 0000000..a9cbec0
--- /dev/null
+++ b/std.c
@@ -0,0 +1,59 @@
+/*
+ * This file is part of the sigrok project.
+ *
+ * Copyright (C) 2013 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#include <glib.h>
+#include "libsigrok.h"
+#include "libsigrok-internal.h"
+
+/**
+ * Standard sr_driver_init() API helper.
+ *
+ * This function can be used to simplify most driver's hw_init() API callback.
+ *
+ * It creates a new 'struct drv_context' (drvc), assigns sr_ctx to it, and
+ * then 'drvc' is assigned to the 'struct sr_dev_driver' (di) that is passed.
+ *
+ * @param sr_ctx The libsigrok context to assign.
+ * @param di The driver instance to use.
+ * @param prefix A driver-specific prefix string used for log messages.
+ *
+ * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments, or
+ *         SR_ERR_MALLOC upon memory allocation errors.
+ */
+SR_PRIV int std_hw_init(struct sr_context *sr_ctx, struct sr_dev_driver *di,
+                       const char *prefix)
+{
+       struct drv_context *drvc;
+
+       if (!di) {
+               sr_err("%sInvalid driver, cannot initialize.", prefix);
+               return SR_ERR_ARG;
+       }
+
+       if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) {
+               sr_err("%sDriver context malloc failed.", prefix);
+               return SR_ERR_MALLOC;
+       }
+
+       drvc->sr_ctx = sr_ctx;
+       di->priv = drvc;
+
+       return SR_OK;
+}