X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhameg-hmo%2Fprotocol.c;h=167c1a4fe5e9960d4f1a0df91e76c20ef9209857;hb=29a9b1a0bd0af79e0eb2adee594f42895452344c;hp=2806352bf157308818890a2a3fe7cc18e8c0ed1a;hpb=396af5ad7d607085ba597b2318769127df58799e;p=libsigrok.git diff --git a/src/hardware/hameg-hmo/protocol.c b/src/hardware/hameg-hmo/protocol.c index 2806352b..167c1a4f 100644 --- a/src/hardware/hameg-hmo/protocol.c +++ b/src/hardware/hameg-hmo/protocol.c @@ -34,13 +34,14 @@ static const char *hameg_scpi_dialect[] = { [SCPI_CMD_GET_DIG_DATA] = ":FORM UINT,8;:POD%d:DATA?", [SCPI_CMD_GET_TIMEBASE] = ":TIM:SCAL?", [SCPI_CMD_SET_TIMEBASE] = ":TIM:SCAL %s", + [SCPI_CMD_GET_HORIZONTAL_DIV] = ":TIM:DIV?", [SCPI_CMD_GET_COUPLING] = ":CHAN%d:COUP?", [SCPI_CMD_SET_COUPLING] = ":CHAN%d:COUP %s", [SCPI_CMD_GET_SAMPLE_RATE] = ":ACQ:SRAT?", [SCPI_CMD_GET_ANALOG_DATA] = ":FORM:BORD %s;" \ ":FORM REAL,32;:CHAN%d:DATA?", - [SCPI_CMD_GET_VERTICAL_DIV] = ":CHAN%d:SCAL?", - [SCPI_CMD_SET_VERTICAL_DIV] = ":CHAN%d:SCAL %s", + [SCPI_CMD_GET_VERTICAL_SCALE] = ":CHAN%d:SCAL?", + [SCPI_CMD_SET_VERTICAL_SCALE] = ":CHAN%d:SCAL %s", [SCPI_CMD_GET_DIG_POD_STATE] = ":POD%d:STAT?", [SCPI_CMD_SET_DIG_POD_STATE] = ":POD%d:STAT %d", [SCPI_CMD_GET_TRIGGER_SLOPE] = ":TRIG:A:EDGE:SLOP?", @@ -71,13 +72,14 @@ static const char *rohde_schwarz_log_not_pod_scpi_dialect[] = { [SCPI_CMD_GET_DIG_DATA] = ":FORM UINT,8;:LOG%d:DATA?", [SCPI_CMD_GET_TIMEBASE] = ":TIM:SCAL?", [SCPI_CMD_SET_TIMEBASE] = ":TIM:SCAL %s", + [SCPI_CMD_GET_HORIZONTAL_DIV] = ":TIM:DIV?", [SCPI_CMD_GET_COUPLING] = ":CHAN%d:COUP?", [SCPI_CMD_SET_COUPLING] = ":CHAN%d:COUP %s", [SCPI_CMD_GET_SAMPLE_RATE] = ":ACQ:SRAT?", [SCPI_CMD_GET_ANALOG_DATA] = ":FORM:BORD %s;" \ ":FORM REAL,32;:CHAN%d:DATA?", - [SCPI_CMD_GET_VERTICAL_DIV] = ":CHAN%d:SCAL?", - [SCPI_CMD_SET_VERTICAL_DIV] = ":CHAN%d:SCAL %s", + [SCPI_CMD_GET_VERTICAL_SCALE] = ":CHAN%d:SCAL?", + [SCPI_CMD_SET_VERTICAL_SCALE] = ":CHAN%d:SCAL %s", [SCPI_CMD_GET_DIG_POD_STATE] = ":LOG%d:STAT?", [SCPI_CMD_SET_DIG_POD_STATE] = ":LOG%d:STAT %d", [SCPI_CMD_GET_TRIGGER_SLOPE] = ":TRIG:A:EDGE:SLOP?", @@ -326,7 +328,7 @@ static const char *scope_digital_channel_names[] = { "D8", "D9", "D10", "D11", "D12", "D13", "D14", "D15", }; -static const struct scope_config scope_models[] = { +static struct scope_config scope_models[] = { { /* HMO Compact2: HMO722/1022/1522/2022 support only 8 digital channels. */ .name = {"HMO722", "HMO1022", "HMO1522", "HMO2022", NULL}, @@ -364,7 +366,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &hameg_scpi_dialect, @@ -374,7 +375,6 @@ static const struct scope_config scope_models[] = { .name = {"RTC1002", "HMO1002", "HMO1202", NULL}, .analog_channels = 2, .digital_channels = 8, - .digital_pods = 1, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -407,7 +407,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &hameg_scpi_dialect, @@ -417,7 +416,6 @@ static const struct scope_config scope_models[] = { .name = {"HMO3032", "HMO3042", "HMO3052", "HMO3522", NULL}, .analog_channels = 2, .digital_channels = 16, - .digital_pods = 2, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -450,7 +448,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &hameg_scpi_dialect, @@ -460,7 +457,6 @@ static const struct scope_config scope_models[] = { .name = {"HMO724", "HMO1024", "HMO1524", "HMO2024", NULL}, .analog_channels = 4, .digital_channels = 8, - .digital_pods = 1, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -493,7 +489,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &hameg_scpi_dialect, @@ -502,7 +497,6 @@ static const struct scope_config scope_models[] = { .name = {"HMO2524", "HMO3034", "HMO3044", "HMO3054", "HMO3524", NULL}, .analog_channels = 4, .digital_channels = 16, - .digital_pods = 2, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -535,7 +529,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &hameg_scpi_dialect, @@ -544,7 +537,6 @@ static const struct scope_config scope_models[] = { .name = {"RTB2002", NULL}, .analog_channels = 2, .digital_channels = 16, - .digital_pods = 2, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -577,7 +569,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &rohde_schwarz_log_not_pod_scpi_dialect, @@ -586,7 +577,6 @@ static const struct scope_config scope_models[] = { .name = {"RTB2004", NULL}, .analog_channels = 4, .digital_channels = 16, - .digital_pods = 2, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -619,7 +609,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &rohde_schwarz_log_not_pod_scpi_dialect, @@ -628,7 +617,6 @@ static const struct scope_config scope_models[] = { .name = {"RTM3002", NULL}, .analog_channels = 2, .digital_channels = 16, - .digital_pods = 2, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -661,7 +649,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &rohde_schwarz_log_not_pod_scpi_dialect, @@ -670,7 +657,6 @@ static const struct scope_config scope_models[] = { .name = {"RTM3004", NULL}, .analog_channels = 4, .digital_channels = 16, - .digital_pods = 2, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -703,7 +689,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &rohde_schwarz_log_not_pod_scpi_dialect, @@ -712,7 +697,6 @@ static const struct scope_config scope_models[] = { .name = {"RTA4004", NULL}, .analog_channels = 4, .digital_channels = 16, - .digital_pods = 2, .analog_names = &scope_analog_channel_names, .digital_names = &scope_digital_channel_names, @@ -745,7 +729,6 @@ static const struct scope_config scope_models[] = { .vdivs = &vdivs, .num_vdivs = ARRAY_SIZE(vdivs), - .num_xdivs = 12, .num_ydivs = 8, .scpi_dialect = &rohde_schwarz_log_not_pod_scpi_dialect, @@ -894,7 +877,7 @@ static int analog_channel_state_get(struct sr_dev_inst *sdi, ch->enabled = state->analog_channels[i].state; g_snprintf(command, sizeof(command), - (*config->scpi_dialect)[SCPI_CMD_GET_VERTICAL_DIV], + (*config->scpi_dialect)[SCPI_CMD_GET_VERTICAL_SCALE], i + 1); if (sr_scpi_get_string(scpi, command, &tmp_str) != SR_OK) @@ -997,7 +980,7 @@ static int digital_channel_state_get(struct sr_dev_inst *sdi, if (config->logic_threshold_for_pod) idx = i + 1; else - idx = i * 8; + idx = i * DIGITAL_CHANNELS_PER_POD; g_snprintf(command, sizeof(command), (*config->scpi_dialect)[SCPI_CMD_GET_DIG_POD_THRESHOLD], @@ -1086,11 +1069,6 @@ SR_PRIV int hmo_scope_state_get(struct sr_dev_inst *sdi) if (digital_channel_state_get(sdi, config, state) != SR_OK) return SR_ERR; - if (sr_scpi_get_float(sdi->conn, - (*config->scpi_dialect)[SCPI_CMD_GET_TIMEBASE], - &tmp_float) != SR_OK) - return SR_ERR; - if (sr_scpi_get_string(sdi->conn, (*config->scpi_dialect)[SCPI_CMD_GET_TIMEBASE], &tmp_str) != SR_OK) @@ -1105,6 +1083,12 @@ SR_PRIV int hmo_scope_state_get(struct sr_dev_inst *sdi) state->timebase = i; + /* Determine the number of horizontal (x) divisions. */ + if (sr_scpi_get_int(sdi->conn, + (*config->scpi_dialect)[SCPI_CMD_GET_HORIZONTAL_DIV], + (int *)&config->num_xdivs) != SR_OK) + return SR_ERR; + if (sr_scpi_get_float(sdi->conn, (*config->scpi_dialect)[SCPI_CMD_GET_HORIZ_TRIGGERPOS], &tmp_float) != SR_OK) @@ -1197,6 +1181,9 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi) return SR_ERR_NA; } + /* Configure the number of PODs given the number of digital channels. */ + scope_models[model_index].digital_pods = scope_models[model_index].digital_channels / DIGITAL_CHANNELS_PER_POD; + devc->analog_groups = g_malloc0(sizeof(struct sr_channel_group*) * scope_models[model_index].analog_channels); devc->digital_groups = g_malloc0(sizeof(struct sr_channel_group*) * @@ -1242,7 +1229,7 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi) ch = sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, (*scope_models[model_index].digital_names)[i]); - group = i / 8; + group = i / DIGITAL_CHANNELS_PER_POD; devc->digital_groups[group]->channels = g_slist_append( devc->digital_groups[group]->channels, ch); } @@ -1473,7 +1460,7 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data) packet.payload = &logic; sr_session_send(sdi, &packet); } else { - group = ch->index / 8; + group = ch->index / DIGITAL_CHANNELS_PER_POD; hmo_queue_logic_data(devc, group, data); }