]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/gmc-mh-1x-2x/api.c
Don't check sr_channel_new() return value (always succeeds).
[libsigrok.git] / src / hardware / gmc-mh-1x-2x / api.c
index e8914244380c74233d4adac89c35f6f365a729ef..8e7d2c1b961f106440c8fae4a1a9706173f73721 100644 (file)
@@ -43,19 +43,19 @@ static const uint32_t scanopts[] = {
 static const uint32_t devopts_sm[] = {
        SR_CONF_MULTIMETER,
        SR_CONF_THERMOMETER,    /**< All GMC 1x/2x multimeters seem to support this */
-       SR_CONF_LIMIT_SAMPLES,
-       SR_CONF_LIMIT_MSEC,
        SR_CONF_CONTINUOUS,
+       SR_CONF_LIMIT_SAMPLES | SR_CONF_GET | SR_CONF_SET,
+       SR_CONF_LIMIT_MSEC | SR_CONF_GET | SR_CONF_SET,
 };
 
 /** Hardware capabilities for Metrahit 2x devices in bidirectional Mode. */
 static const uint32_t devopts_bd[] = {
        SR_CONF_MULTIMETER,
        SR_CONF_THERMOMETER,    /**< All GMC 1x/2x multimeters seem to support this */
-       SR_CONF_LIMIT_SAMPLES,
-       SR_CONF_LIMIT_MSEC,
        SR_CONF_CONTINUOUS,
-       SR_CONF_POWER_OFF,
+       SR_CONF_LIMIT_SAMPLES | SR_CONF_GET | SR_CONF_SET,
+       SR_CONF_LIMIT_MSEC | SR_CONF_GET | SR_CONF_SET,
+       SR_CONF_POWER_OFF | SR_CONF_GET | SR_CONF_SET,
 };
 
 
@@ -90,7 +90,7 @@ static int read_byte(struct sr_serial_dev_inst *serial, gint64 timeout)
        int rc = 0;
 
        for (;;) {
-               rc = serial_read(serial, &result, 1);
+               rc = serial_read_nonblocking(serial, &result, 1);
                if (rc == 1) {
                        sr_spew("read: 0x%02x/%d", result, result);
                        return result;
@@ -198,7 +198,7 @@ static GSList *scan_1x_2x_rs232(GSList *options)
        if (!(serial = sr_serial_dev_inst_new(conn, serialcomm)))
                return NULL;
 
-       if (serial_open(serial, SERIAL_RDWR | SERIAL_NONBLOCK) != SR_OK) {
+       if (serial_open(serial, SERIAL_RDWR) != SR_OK) {
                sr_serial_dev_inst_free(serial);
                return NULL;
        }
@@ -223,25 +223,21 @@ static GSList *scan_1x_2x_rs232(GSList *options)
 
        if (model != METRAHIT_NONE) {
                sr_spew("%s %s detected!", VENDOR_GMC, gmc_model_str(model));
-               if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, VENDOR_GMC,
-                               gmc_model_str(model), NULL)))
-                       return NULL;
-               if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) {
-                       sr_err("Device context malloc failed.");
-                       return NULL;
-               }
+               sdi = g_malloc0(sizeof(struct sr_dev_inst));
+               sdi->status = SR_ST_INACTIVE;
+               sdi->vendor = g_strdup(VENDOR_GMC);
+               sdi->model = g_strdup(gmc_model_str(model));
+               devc = g_malloc0(sizeof(struct dev_context));
                devc->model = model;
                devc->limit_samples = 0;
                devc->limit_msec = 0;
                devc->num_samples = 0;
                devc->elapsed_msec = g_timer_new();
                devc->settings_ok = FALSE;
-
                sdi->conn = serial;
                sdi->priv = devc;
                sdi->driver = &gmc_mh_1x_2x_rs232_driver_info;
-               if (!(ch = sr_channel_new(0, SR_CHANNEL_ANALOG, TRUE, "P1")))
-                       return NULL;
+               ch = sr_channel_new(0, SR_CHANNEL_ANALOG, TRUE, "P1");
                sdi->channels = g_slist_append(sdi->channels, ch);
                drvc->instances = g_slist_append(drvc->instances, sdi);
                devices = g_slist_append(devices, sdi);
@@ -295,17 +291,14 @@ static GSList *scan_2x_bd232(GSList *options)
        if (!(serial = sr_serial_dev_inst_new(conn, serialcomm)))
                return NULL;
 
-       if (serial_open(serial, SERIAL_RDWR | SERIAL_NONBLOCK) != SR_OK)
-               goto exit_err;
-
-       if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) {
-               sr_err("Device context malloc failed.");
+       if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                goto exit_err;
-       }
 
-       if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, VENDOR_GMC, NULL, NULL)))
-               goto exit_err;
+       devc = g_malloc0(sizeof(struct dev_context));
 
+       sdi = g_malloc0(sizeof(struct sr_dev_inst));
+       sdi->status = SR_ST_INACTIVE;
+       sdi->vendor = g_strdup(VENDOR_GMC);
        sdi->priv = devc;
 
        /* Send message 03 "Query multimeter version and status" */
@@ -335,27 +328,20 @@ static GSList *scan_2x_bd232(GSList *options)
 
                if (devc->model != METRAHIT_NONE) {
                        sr_spew("%s %s detected!", VENDOR_GMC, gmc_model_str(devc->model));
-
                        devc->elapsed_msec = g_timer_new();
-
                        sdi->model = g_strdup(gmc_model_str(devc->model));
                        sdi->version = g_strdup_printf("Firmware %d.%d", devc->fw_ver_maj, devc->fw_ver_min);
                        sdi->conn = serial;
                        sdi->priv = devc;
                        sdi->driver = &gmc_mh_2x_bd232_driver_info;
-                       if (!(ch = sr_channel_new(0, SR_CHANNEL_ANALOG, TRUE, "P1")))
-                               goto exit_err;
+                       ch = sr_channel_new(0, SR_CHANNEL_ANALOG, TRUE, "P1");
                        sdi->channels = g_slist_append(sdi->channels, ch);
                        drvc->instances = g_slist_append(drvc->instances, sdi);
                        devices = g_slist_append(devices, sdi);
-
-                       if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) {
-                               sr_err("Device context malloc failed.");
-                               goto exit_err;
-                       }
-
-                       if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, VENDOR_GMC, NULL, NULL)))
-                               goto exit_err;
+                       devc = g_malloc0(sizeof(struct dev_context));
+                       sdi = g_malloc0(sizeof(struct sr_dev_inst));
+                       sdi->status = SR_ST_INACTIVE;
+                       sdi->vendor = g_strdup(VENDOR_GMC);
                }
        };
 
@@ -463,7 +449,7 @@ static int config_list_common(uint32_t key, GVariant **data, const struct sr_dev
        switch (key) {
        case SR_CONF_SCAN_OPTIONS:
                *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
-                                                 scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
+                               scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
                break;
        default:
                return SR_ERR_NA;
@@ -479,7 +465,7 @@ static int config_list_sm(uint32_t key, GVariant **data, const struct sr_dev_ins
        switch (key) {
        case SR_CONF_DEVICE_OPTIONS:
                *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
-                                                 devopts_sm, ARRAY_SIZE(devopts_sm), sizeof(uint32_t));
+                               devopts_sm, ARRAY_SIZE(devopts_sm), sizeof(uint32_t));
                break;
        default:
                return config_list_common(key, data, sdi, cg);
@@ -495,7 +481,7 @@ static int config_list_bd(uint32_t key, GVariant **data, const struct sr_dev_ins
        switch (key) {
        case SR_CONF_DEVICE_OPTIONS:
                *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
-                                                 devopts_bd, ARRAY_SIZE(devopts_bd), sizeof(uint32_t));
+                               devopts_bd, ARRAY_SIZE(devopts_bd), sizeof(uint32_t));
                break;
        default:
                return config_list_common(key, data, sdi, cg);