]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/manson-hcs-3xxx/api.c
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / manson-hcs-3xxx / api.c
index c7991c31c2fdf21a52d09cb4f5997fc6b8c170fb..9d3c9238ed35e4d82f57f4bce7e435f85c58a6fc 100644 (file)
@@ -43,23 +43,38 @@ static const uint32_t devopts[] = {
 
 /* Note: All models have one power supply output only. */
 static const struct hcs_model models[] = {
-       { MANSON_HCS_3100, "HCS-3100",     "3100", { 1, 18, 0.1 }, { 0, 10,   0.10 } },
-       { MANSON_HCS_3102, "HCS-3102",     "3102", { 1, 36, 0.1 }, { 0,  5,   0.01 } },
-       { MANSON_HCS_3104, "HCS-3104",     "3104", { 1, 60, 0.1 }, { 0,  2.5, 0.01 } },
-       { MANSON_HCS_3150, "HCS-3150",     "3150", { 1, 18, 0.1 }, { 0, 15,   0.10 } },
-       { MANSON_HCS_3200, "HCS-3200",     "3200", { 1, 18, 0.1 }, { 0, 20,   0.10 } },
-       { MANSON_HCS_3202, "HCS-3202",     "3202", { 1, 36, 0.1 }, { 0, 10,   0.10 } },
-       { MANSON_HCS_3204, "HCS-3204",     "3204", { 1, 60, 0.1 }, { 0,  5,   0.01 } },
-       { MANSON_HCS_3300, "HCS-3300-USB", "3300", { 1, 16, 0.1 }, { 0, 30,   0.10 } },
-       { MANSON_HCS_3302, "HCS-3302-USB", "3302", { 1, 32, 0.1 }, { 0, 15,   0.10 } },
-       { MANSON_HCS_3304, "HCS-3304-USB", "3304", { 1, 60, 0.1 }, { 0,  8,   0.10 } },
+       { MANSON_HCS_3100, "HCS-3100",     "3100",     { 1, 18, 0.1 }, { 0, 10,   0.10 } },
+       { MANSON_HCS_3100, "HCS-3100",     "HCS-3100", { 1, 18, 0.1 }, { 0, 10,   0.10 } },
+       { MANSON_HCS_3102, "HCS-3102",     "3102",     { 1, 36, 0.1 }, { 0,  5,   0.01 } },
+       { MANSON_HCS_3102, "HCS-3102",     "HCS-3102", { 1, 36, 0.1 }, { 0,  5,   0.01 } },
+       { MANSON_HCS_3104, "HCS-3104",     "3104",     { 1, 60, 0.1 }, { 0,  2.5, 0.01 } },
+       { MANSON_HCS_3104, "HCS-3104",     "HCS-3104", { 1, 60, 0.1 }, { 0,  2.5, 0.01 } },
+       { MANSON_HCS_3150, "HCS-3150",     "3150",     { 1, 18, 0.1 }, { 0, 15,   0.10 } },
+       { MANSON_HCS_3150, "HCS-3150",     "HCS-3150", { 1, 18, 0.1 }, { 0, 15,   0.10 } },
+       { MANSON_HCS_3200, "HCS-3200",     "3200",     { 1, 18, 0.1 }, { 0, 20,   0.10 } },
+       { MANSON_HCS_3200, "HCS-3200",     "HCS-3200", { 1, 18, 0.1 }, { 0, 20,   0.10 } },
+       { MANSON_HCS_3202, "HCS-3202",     "3202",     { 1, 36, 0.1 }, { 0, 10,   0.10 } },
+       { MANSON_HCS_3202, "HCS-3202",     "HCS-3202", { 1, 36, 0.1 }, { 0, 10,   0.10 } },
+       { MANSON_HCS_3204, "HCS-3204",     "3204",     { 1, 60, 0.1 }, { 0,  5,   0.01 } },
+       { MANSON_HCS_3204, "HCS-3204",     "HCS-3204", { 1, 60, 0.1 }, { 0,  5,   0.01 } },
+       { MANSON_HCS_3300, "HCS-3300-USB", "3300",     { 1, 16, 0.1 }, { 0, 30,   0.10 } },
+       { MANSON_HCS_3300, "HCS-3300-USB", "HCS-3300", { 1, 16, 0.1 }, { 0, 30,   0.10 } },
+       { MANSON_HCS_3302, "HCS-3302-USB", "3302",     { 1, 32, 0.1 }, { 0, 15,   0.10 } },
+       { MANSON_HCS_3302, "HCS-3302-USB", "HCS-3302", { 1, 32, 0.1 }, { 0, 15,   0.10 } },
+       { MANSON_HCS_3304, "HCS-3304-USB", "3304",     { 1, 60, 0.1 }, { 0,  8,   0.10 } },
        { MANSON_HCS_3304, "HCS-3304-USB", "HCS-3304", { 1, 60, 0.1 }, { 0,  8,   0.10 } },
-       { MANSON_HCS_3400, "HCS-3400-USB", "3400", { 1, 16, 0.1 }, { 0, 40,   0.10 } },
-       { MANSON_HCS_3402, "HCS-3402-USB", "3402", { 1, 32, 0.1 }, { 0, 20,   0.10 } },
-       { MANSON_HCS_3404, "HCS-3404-USB", "3404", { 1, 60, 0.1 }, { 0, 10,   0.10 } },
-       { MANSON_HCS_3600, "HCS-3600-USB", "3600", { 1, 16, 0.1 }, { 0, 60,   0.10 } },
-       { MANSON_HCS_3602, "HCS-3602-USB", "3602", { 1, 32, 0.1 }, { 0, 30,   0.10 } },
-       { MANSON_HCS_3604, "HCS-3604-USB", "3604", { 1, 60, 0.1 }, { 0, 15,   0.10 } },
+       { MANSON_HCS_3400, "HCS-3400-USB", "3400",     { 1, 16, 0.1 }, { 0, 40,   0.10 } },
+       { MANSON_HCS_3400, "HCS-3400-USB", "HCS-3400", { 1, 16, 0.1 }, { 0, 40,   0.10 } },
+       { MANSON_HCS_3402, "HCS-3402-USB", "3402",     { 1, 32, 0.1 }, { 0, 20,   0.10 } },
+       { MANSON_HCS_3402, "HCS-3402-USB", "HCS-3402", { 1, 32, 0.1 }, { 0, 20,   0.10 } },
+       { MANSON_HCS_3404, "HCS-3404-USB", "3404",     { 1, 60, 0.1 }, { 0, 10,   0.10 } },
+       { MANSON_HCS_3404, "HCS-3404-USB", "HCS-3404", { 1, 60, 0.1 }, { 0, 10,   0.10 } },
+       { MANSON_HCS_3600, "HCS-3600-USB", "3600",     { 1, 16, 0.1 }, { 0, 60,   0.10 } },
+       { MANSON_HCS_3600, "HCS-3600-USB", "HCS-3600", { 1, 16, 0.1 }, { 0, 60,   0.10 } },
+       { MANSON_HCS_3602, "HCS-3602-USB", "3602",     { 1, 32, 0.1 }, { 0, 30,   0.10 } },
+       { MANSON_HCS_3602, "HCS-3602-USB", "HCS-3602", { 1, 32, 0.1 }, { 0, 30,   0.10 } },
+       { MANSON_HCS_3604, "HCS-3604-USB", "3604",     { 1, 60, 0.1 }, { 0, 15,   0.10 } },
+       { MANSON_HCS_3604, "HCS-3604-USB", "HCS-3604", { 1, 60, 0.1 }, { 0, 15,   0.10 } },
        ALL_ZERO
 };
 
@@ -103,8 +118,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        sr_info("Probing serial port %s.", conn);
 
        /* Get the device model. */
@@ -250,11 +263,15 @@ static int config_set(uint32_t key, GVariant *data,
                break;
        case SR_CONF_ENABLED:
                bval = g_variant_get_boolean(data);
-               if (bval == devc->output_enabled) /* Nothing to do. */
-                       break;
-               if ((hcs_send_cmd(sdi->conn, "SOUT%1d\r", !bval) < 0) ||
-                   (hcs_read_reply(sdi->conn, 1, devc->buf, sizeof(devc->buf)) < 0))
+
+               if (hcs_send_cmd(sdi->conn, "SOUT%1d\r", !bval) < 0) {
+                       sr_err("Could not send SR_CONF_ENABLED command.");
                        return SR_ERR;
+               }
+               if (hcs_read_reply(sdi->conn, 1, devc->buf, sizeof(devc->buf)) < 0) {
+                       sr_err("Could not read SR_CONF_ENABLED reply.");
+                       return SR_ERR;
+               }
                devc->output_enabled = bval;
                break;
        default:
@@ -277,10 +294,14 @@ static int config_list(uint32_t key, GVariant **data,
        case SR_CONF_DEVICE_OPTIONS:
                return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
        case SR_CONF_VOLTAGE_TARGET:
+               if (!devc || !devc->model)
+                       return SR_ERR_ARG;
                a = devc->model->voltage;
                *data = std_gvar_min_max_step(a[0], devc->voltage_max_device, a[2]);
                break;
        case SR_CONF_CURRENT_LIMIT:
+               if (!devc || !devc->model)
+                       return SR_ERR_ARG;
                a = devc->model->current;
                *data = std_gvar_min_max_step(a[0], devc->current_max_device, a[2]);
                break;