X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhantek-6xxx%2Fapi.c;h=899dc86716bfc49c75b7a19f108b780c13c607d7;hb=3d70d77709b023499b09e7d0f0e3c20f3c58f140;hp=c5bb94eb9958a9a278353f13be543164c8dd2cf0;hpb=95c1fe62f77d347bf173b1236c38a9043efabd2b;p=libsigrok.git diff --git a/src/hardware/hantek-6xxx/api.c b/src/hardware/hantek-6xxx/api.c index c5bb94eb..899dc867 100644 --- a/src/hardware/hantek-6xxx/api.c +++ b/src/hardware/hantek-6xxx/api.c @@ -217,7 +217,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) libusb_get_device_descriptor(devlist[i], &des); - usb_get_port_path(devlist[i], connection_id, sizeof(connection_id)); + if (usb_get_port_path(devlist[i], connection_id, sizeof(connection_id)) < 0) + continue; prof = NULL; for (j = 0; dev_profiles[j].orig_vid; j++) { @@ -390,10 +391,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { struct dev_context *devc; - uint64_t p, q; - int tmp_int, ch_idx; - unsigned int i; - const char *tmp_str; + int ch_idx, idx; devc = sdi->priv; if (!cg) { @@ -420,30 +418,16 @@ static int config_set(uint32_t key, GVariant *data, return SR_ERR_ARG; switch (key) { case SR_CONF_VDIV: - g_variant_get(data, "(tt)", &p, &q); - tmp_int = -1; - for (i = 0; i < ARRAY_SIZE(vdivs); i++) { - if (vdivs[i][0] == p && vdivs[i][1] == q) { - tmp_int = i; - break; - } - } - if (tmp_int >= 0) { - devc->voltage[ch_idx] = tmp_int; - hantek_6xxx_update_vdiv(sdi); - } else + if ((idx = std_u64_tuple_idx(data, ARRAY_AND_SIZE(vdivs))) < 0) return SR_ERR_ARG; + devc->voltage[ch_idx] = idx; + hantek_6xxx_update_vdiv(sdi); break; case SR_CONF_COUPLING: - tmp_str = g_variant_get_string(data, NULL); - for (i = 0; i < devc->coupling_tab_size; i++) { - if (!strcmp(tmp_str, devc->coupling_vals[i])) { - devc->coupling[ch_idx] = i; - break; - } - } - if (i == devc->coupling_tab_size) + if ((idx = std_str_idx(data, devc->coupling_vals, + devc->coupling_tab_size)) < 0) return SR_ERR_ARG; + devc->coupling[ch_idx] = idx; break; default: return SR_ERR_NA; @@ -477,6 +461,8 @@ static int config_list(uint32_t key, GVariant **data, *data = std_gvar_array_u32(ARRAY_AND_SIZE(devopts_cg)); break; case SR_CONF_COUPLING: + if (!devc) + return SR_ERR_ARG; *data = g_variant_new_strv(devc->coupling_vals, devc->coupling_tab_size); break; case SR_CONF_VDIV: @@ -547,7 +533,7 @@ static void send_chunk(struct sr_dev_inst *sdi, unsigned char *buf, return; } - for (int ch = 0; ch < 2; ch++) { + for (int ch = 0; ch < NUM_CHANNELS; ch++) { if (!devc->ch_enabled[ch]) continue;