X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhung-chang-dso-2100%2Fapi.c;h=c98cdbbeab5ed051996dcd3eec28ab5b763cea4b;hb=6b82c3e57aea481a1c9ac949a9d93078e0607292;hp=419b40bc2075ecf5f6ba735ae1fb867ce78e2be0;hpb=6e43c3d5318a8ff320bf6539a9efe7f0b8497e2f;p=libsigrok.git diff --git a/src/hardware/hung-chang-dso-2100/api.c b/src/hardware/hung-chang-dso-2100/api.c index 419b40bc..c98cdbbe 100644 --- a/src/hardware/hung-chang-dso-2100/api.c +++ b/src/hardware/hung-chang-dso-2100/api.c @@ -39,7 +39,7 @@ static const uint32_t devopts[] = { SR_CONF_BUFFERSIZE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, }; -static const uint32_t cgopts[] = { +static const uint32_t devopts_cg[] = { SR_CONF_VDIV | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, SR_CONF_COUPLING | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, SR_CONF_PROBE_FACTOR | SR_CONF_GET | SR_CONF_SET, @@ -218,10 +218,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) return std_scan_complete(di, devices); } -static void clear_private(void *priv) +static void clear_helper(struct dev_context *devc) { - struct dev_context *devc = priv; - g_slist_free(devc->enabled_channel); } @@ -238,7 +236,7 @@ static int dev_clear(const struct sr_dev_driver *di) } } - return std_dev_clear_with_callback(di, clear_private); + return std_dev_clear_with_callback(di, (std_dev_clear_callback)clear_helper); } static int dev_open(struct sr_dev_inst *sdi) @@ -343,12 +341,11 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s { struct dev_context *devc = sdi->priv; struct parport *port; - int ret, i, ch = -1; + int i, ch = -1; if (cg) /* sr_config_get will validate cg using config_list */ ch = ((struct sr_channel *)cg->channels->data)->index; - ret = SR_OK; switch (key) { case SR_CONF_CONN: port = sdi->conn; @@ -364,13 +361,13 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s i = reverse_map(devc->cctl[0] & 0xC0, trigger_sources_map, ARRAY_SIZE(trigger_sources_map)); if (i == -1) - ret = SR_ERR; + return SR_ERR; else *data = g_variant_new_string(trigger_sources[i]); break; case SR_CONF_TRIGGER_SLOPE: if (devc->edge >= ARRAY_SIZE(trigger_slopes)) - ret = SR_ERR; + return SR_ERR; else *data = g_variant_new_string(trigger_slopes[devc->edge]); break; @@ -379,12 +376,12 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s break; case SR_CONF_VDIV: if (ch == -1) { - ret = SR_ERR_CHANNEL_GROUP; + return SR_ERR_CHANNEL_GROUP; } else { i = reverse_map(devc->cctl[ch] & 0x33, vdivs_map, ARRAY_SIZE(vdivs_map)); if (i == -1) - ret = SR_ERR; + return SR_ERR; else *data = g_variant_new("(tt)", vdivs[i][0], vdivs[i][1]); @@ -392,40 +389,39 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s break; case SR_CONF_COUPLING: if (ch == -1) { - ret = SR_ERR_CHANNEL_GROUP; + return SR_ERR_CHANNEL_GROUP; } else { i = reverse_map(devc->cctl[ch] & 0x0C, coupling_map, ARRAY_SIZE(coupling_map)); if (i == -1) - ret = SR_ERR; + return SR_ERR; else *data = g_variant_new_string(coupling[i]); } break; case SR_CONF_PROBE_FACTOR: if (ch == -1) - ret = SR_ERR_CHANNEL_GROUP; + return SR_ERR_CHANNEL_GROUP; else *data = g_variant_new_uint64(devc->probe[ch]); break; default: - ret = SR_ERR_NA; + return SR_ERR_NA; } - return ret; + return SR_OK; } 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 = sdi->priv; - int ret, i, ch = -1; + int i, ch = -1; uint64_t u, v; if (cg) /* sr_config_set will validate cg using config_list */ ch = ((struct sr_channel *)cg->channels->data)->index; - ret = SR_OK; switch (key) { case SR_CONF_LIMIT_FRAMES: devc->frame_limit = g_variant_get_uint64(data); @@ -434,7 +430,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd i = find_in_array(data, G_VARIANT_TYPE_UINT64, samplerates, ARRAY_SIZE(samplerates)); if (i == -1) - ret = SR_ERR_ARG; + return SR_ERR_ARG; else devc->rate = i; break; @@ -442,7 +438,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd i = find_in_array(data, G_VARIANT_TYPE_STRING, trigger_sources, ARRAY_SIZE(trigger_sources)); if (i == -1) - ret = SR_ERR_ARG; + return SR_ERR_ARG; else devc->cctl[0] = (devc->cctl[0] & 0x3F) | trigger_sources_map[i]; @@ -451,7 +447,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd i = find_in_array(data, G_VARIANT_TYPE_STRING, trigger_slopes, ARRAY_SIZE(trigger_slopes)); if (i == -1) - ret = SR_ERR_ARG; + return SR_ERR_ARG; else devc->edge = i; break; @@ -459,22 +455,22 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd i = find_in_array(data, G_VARIANT_TYPE_UINT64, buffersizes, ARRAY_SIZE(buffersizes)); if (i == -1) - ret = SR_ERR_ARG; + return SR_ERR_ARG; else devc->last_step = i; break; case SR_CONF_VDIV: if (ch == -1) { - ret = SR_ERR_CHANNEL_GROUP; + return SR_ERR_CHANNEL_GROUP; } else if (!g_variant_is_of_type(data, G_VARIANT_TYPE("(tt)"))) { - ret = SR_ERR_ARG; + return SR_ERR_ARG; } else { g_variant_get(data, "(tt)", &u, &v); for (i = 0; i < (int)ARRAY_SIZE(vdivs); i++) if (vdivs[i][0] == u && vdivs[i][1] == v) break; if (i == ARRAY_SIZE(vdivs)) - ret = SR_ERR_ARG; + return SR_ERR_ARG; else devc->cctl[ch] = (devc->cctl[ch] & 0xCC) | vdivs_map[i]; @@ -482,12 +478,12 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd break; case SR_CONF_COUPLING: if (ch == -1) { - ret = SR_ERR_CHANNEL_GROUP; + return SR_ERR_CHANNEL_GROUP; } else { i = find_in_array(data, G_VARIANT_TYPE_STRING, coupling, ARRAY_SIZE(coupling)); if (i == -1) - ret = SR_ERR_ARG; + return SR_ERR_ARG; else devc->cctl[ch] = (devc->cctl[ch] & 0xF3) | coupling_map[i]; @@ -495,20 +491,20 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd break; case SR_CONF_PROBE_FACTOR: if (ch == -1) { - ret = SR_ERR_CHANNEL_GROUP; + return SR_ERR_CHANNEL_GROUP; } else { u = g_variant_get_uint64(data); if (!u) - ret = SR_ERR_ARG; + return SR_ERR_ARG; else devc->probe[ch] = u; } break; default: - ret = SR_ERR_NA; + return SR_ERR_NA; } - return ret; + return SR_OK; } static int config_channel_set(const struct sr_dev_inst *sdi, @@ -569,7 +565,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * int i; switch (key) { - case SR_CONF_SCAN_OPTIONS: + case SR_CONF_SCAN_OPTIONS: case SR_CONF_DEVICE_OPTIONS: break; case SR_CONF_SAMPLERATE: @@ -595,19 +591,12 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * switch (key) { case SR_CONF_SCAN_OPTIONS: - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t)); - break; + return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, NULL, NULL); case SR_CONF_DEVICE_OPTIONS: - if (!sdi) - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t)); - else if (!cg) - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - devopts, ARRAY_SIZE(devopts), sizeof(uint32_t)); - else - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - cgopts, ARRAY_SIZE(cgopts), sizeof(uint32_t)); + if (!cg) + return STD_CONFIG_LIST(key, data, sdi, cg, NULL, drvopts, devopts); + *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, + devopts_cg, ARRAY_SIZE(devopts_cg), sizeof(uint32_t)); break; case SR_CONF_SAMPLERATE: g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}"));