X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Frigol-ds%2Fapi.c;h=740e11f7f1f13dac681f2e3f83d7a24f842d94a5;hb=f8195cb2da3268c89e24071ed32ab9acdded5bc0;hp=5e1e9ec7ce9ec11fc3db0e9ee64995d269346288;hpb=e66d1892d0dd16ed166fc8f13493f95de0607362;p=libsigrok.git diff --git a/src/hardware/rigol-ds/api.c b/src/hardware/rigol-ds/api.c index 5e1e9ec7..740e11f7 100644 --- a/src/hardware/rigol-ds/api.c +++ b/src/hardware/rigol-ds/api.c @@ -34,7 +34,7 @@ static const uint32_t scanopts[] = { SR_CONF_CONN, - SR_CONF_SERIALCOMM + SR_CONF_SERIALCOMM, }; static const uint32_t drvopts[] = { @@ -53,7 +53,7 @@ static const uint32_t devopts[] = { SR_CONF_DATA_SOURCE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, }; -static const uint32_t analog_devopts[] = { +static const uint32_t devopts_cg_analog[] = { SR_CONF_NUM_VDIV | SR_CONF_GET, SR_CONF_VDIV | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, SR_CONF_COUPLING | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, @@ -126,56 +126,23 @@ static const uint64_t vdivs[][2] = { { 100, 1 }, }; -#define NUM_TIMEBASE ARRAY_SIZE(timebases) -#define NUM_VDIV ARRAY_SIZE(vdivs) - static const char *trigger_sources[] = { - "CH1", - "CH2", - "CH3", - "CH4", - "EXT", - "AC Line", - "D0", - "D1", - "D2", - "D3", - "D4", - "D5", - "D6", - "D7", - "D8", - "D9", - "D10", - "D11", - "D12", - "D13", - "D14", - "D15", + "CH1", "CH2", "CH3", "CH4", + "EXT", "AC Line", + "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", + "D8", "D9", "D10", "D11", "D12", "D13", "D14", "D15", }; static const char *trigger_slopes[] = { - "r", - "f", + "r", "f", }; static const char *coupling[] = { - "AC", - "DC", - "GND", + "AC", "DC", "GND", }; static const uint64_t probe_factor[] = { - 1, - 2, - 5, - 10, - 20, - 50, - 100, - 200, - 500, - 1000, + 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, }; /* Do not change the order of entries */ @@ -206,8 +173,8 @@ static const struct rigol_ds_vendor supported_vendors[] = { }; #define VENDOR(x) &supported_vendors[x] -/* vendor, series, protocol, max timebase, min vdiv, number of horizontal divs, - * live waveform samples, memory buffer samples */ +/* vendor, series/name, protocol, data format, max timebase, min vdiv, + * number of horizontal divs, live waveform samples, memory buffer samples */ static const struct rigol_ds_series supported_series[] = { [VS5000] = {VENDOR(RIGOL), "VS5000", PROTOCOL_V1, FORMAT_RAW, {50, 1}, {2, 1000}, 14, 2048, 0}, @@ -397,18 +364,18 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) devc->digital_group); } - for (i = 0; i < NUM_TIMEBASE; i++) { + for (i = 0; i < ARRAY_SIZE(timebases); i++) { if (!memcmp(&devc->model->min_timebase, &timebases[i], sizeof(uint64_t[2]))) devc->timebases = &timebases[i]; if (!memcmp(&devc->model->series->max_timebase, &timebases[i], sizeof(uint64_t[2]))) devc->num_timebases = &timebases[i] - devc->timebases + 1; } - for (i = 0; i < NUM_VDIV; i++) { + for (i = 0; i < ARRAY_SIZE(vdivs); i++) { if (!memcmp(&devc->model->series->min_vdiv, &vdivs[i], sizeof(uint64_t[2]))) { devc->vdivs = &vdivs[i]; - devc->num_vdivs = NUM_VDIV - i; + devc->num_vdivs = ARRAY_SIZE(vdivs) - i; } } @@ -747,10 +714,8 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd } break; case SR_CONF_VDIV: - if (!cg) { - sr_err("No channel group specified."); + if (!cg) return SR_ERR_CHANNEL_GROUP; - } g_variant_get(data, "(tt)", &p, &q); for (i = 0; i < devc->model->analog_channels; i++) { if (cg == devc->analog_groups[i]) { @@ -770,10 +735,8 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd sr_dbg("Didn't set vdiv, unknown channel(group)."); return SR_ERR_NA; case SR_CONF_COUPLING: - if (!cg) { - sr_err("No channel group specified."); + if (!cg) return SR_ERR_CHANNEL_GROUP; - } tmp_str = g_variant_get_string(data, NULL); for (i = 0; i < devc->model->analog_channels; i++) { if (cg == devc->analog_groups[i]) { @@ -792,10 +755,8 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd sr_dbg("Didn't set coupling, unknown channel(group)."); return SR_ERR_NA; case SR_CONF_PROBE_FACTOR: - if (!cg) { - sr_err("No channel group specified."); + if (!cg) return SR_ERR_CHANNEL_GROUP; - } p = g_variant_get_uint64(data); for (i = 0; i < devc->model->analog_channels; i++) { if (cg == devc->analog_groups[i]) { @@ -840,8 +801,6 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { - GVariant *tuple, *rational[2]; - GVariantBuilder gvb; unsigned int i; struct dev_context *devc; @@ -853,14 +812,12 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * if (!cg) return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts); if (cg == devc->digital_group) { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - NULL, 0, sizeof(uint32_t)); + *data = std_gvar_array_u32(NULL, 0); return SR_OK; } else { for (i = 0; i < devc->model->analog_channels; i++) { if (cg == devc->analog_groups[i]) { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - analog_devopts, ARRAY_SIZE(analog_devopts), sizeof(uint32_t)); + *data = std_gvar_array_u32(ARRAY_AND_SIZE(devopts_cg_analog)); return SR_OK; } } @@ -870,13 +827,12 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * case SR_CONF_COUPLING: if (!cg) return SR_ERR_CHANNEL_GROUP; - *data = g_variant_new_strv(coupling, ARRAY_SIZE(coupling)); + *data = g_variant_new_strv(ARRAY_AND_SIZE(coupling)); break; case SR_CONF_PROBE_FACTOR: if (!cg) return SR_ERR_CHANNEL_GROUP; - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT64, - probe_factor, ARRAY_SIZE(probe_factor), sizeof(uint64_t)); + *data = std_gvar_array_u64(ARRAY_AND_SIZE(probe_factor)); break; case SR_CONF_VDIV: if (!devc) @@ -884,14 +840,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * return SR_ERR_ARG; if (!cg) return SR_ERR_CHANNEL_GROUP; - g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY); - for (i = 0; i < devc->num_vdivs; i++) { - rational[0] = g_variant_new_uint64(devc->vdivs[i][0]); - rational[1] = g_variant_new_uint64(devc->vdivs[i][1]); - tuple = g_variant_new_tuple(rational, 2); - g_variant_builder_add_value(&gvb, tuple); - } - *data = g_variant_builder_end(&gvb); + *data = std_gvar_tuple_array((const uint64_t (*)[][2])devc->vdivs, devc->num_vdivs); break; case SR_CONF_TIMEBASE: if (!devc) @@ -899,14 +848,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * return SR_ERR_ARG; if (devc->num_timebases <= 0) return SR_ERR_NA; - g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY); - for (i = 0; i < devc->num_timebases; i++) { - rational[0] = g_variant_new_uint64(devc->timebases[i][0]); - rational[1] = g_variant_new_uint64(devc->timebases[i][1]); - tuple = g_variant_new_tuple(rational, 2); - g_variant_builder_add_value(&gvb, tuple); - } - *data = g_variant_builder_end(&gvb); + *data = std_gvar_tuple_array((const uint64_t (*)[][2])devc->timebases, devc->num_timebases); break; case SR_CONF_TRIGGER_SOURCE: if (!devc) @@ -916,7 +858,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * devc->model->has_digital ? ARRAY_SIZE(trigger_sources) : 4); break; case SR_CONF_TRIGGER_SLOPE: - *data = g_variant_new_strv(trigger_slopes, ARRAY_SIZE(trigger_slopes)); + *data = g_variant_new_strv(ARRAY_AND_SIZE(trigger_slopes)); break; case SR_CONF_DATA_SOURCE: if (!devc) @@ -930,7 +872,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * *data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources) - 1); break; default: - *data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources)); + *data = g_variant_new_strv(ARRAY_AND_SIZE(data_sources)); break; } break;