From: Guido Trentalancia Date: Tue, 20 Nov 2018 15:00:48 +0000 (+0100) Subject: hameg-hmo: Don't hardcode POD/channel numbers. X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=a12456f1bbc65111b0bf0c7f72b03af097246a17;p=libsigrok.git hameg-hmo: Don't hardcode POD/channel numbers. Don't hardcode the number of PODs or the number of logic (digital) channels per POD. --- diff --git a/src/hardware/hameg-hmo/api.c b/src/hardware/hameg-hmo/api.c index f3e587f0..e5808fb3 100644 --- a/src/hardware/hameg-hmo/api.c +++ b/src/hardware/hameg-hmo/api.c @@ -415,7 +415,7 @@ static int config_set(uint32_t key, GVariant *data, if (model->logic_threshold_for_pod) i = j + 1; else - i = j * 8; + i = j * DIGITAL_CHANNELS_PER_POD; g_snprintf(command, sizeof(command), (*model->scpi_dialect)[SCPI_CMD_SET_DIG_POD_THRESHOLD], i, (*model->logic_threshold)[idx]); @@ -442,7 +442,7 @@ static int config_set(uint32_t key, GVariant *data, if (model->logic_threshold_for_pod) idx = j + 1; else - idx = j * 8; + idx = j * DIGITAL_CHANNELS_PER_POD; /* Try to support different dialects exhaustively. */ for (i = 0; i < model->num_logic_threshold; i++) { if (!strcmp("USER2", (*model->logic_threshold)[i])) { @@ -595,7 +595,7 @@ SR_PRIV int hmo_request_data(const struct sr_dev_inst *sdi) case SR_CHANNEL_LOGIC: g_snprintf(command, sizeof(command), (*model->scpi_dialect)[SCPI_CMD_GET_DIG_DATA], - ch->index < 8 ? 1 : 2); + ch->index / DIGITAL_CHANNELS_PER_POD + 1); break; default: sr_err("Invalid channel type."); @@ -632,7 +632,7 @@ static int hmo_check_channels(GSList *channels) enabled_chan[idx] = TRUE; break; case SR_CHANNEL_LOGIC: - idx = ch->index / 8; + idx = ch->index / DIGITAL_CHANNELS_PER_POD; if (idx < ARRAY_SIZE(enabled_pod)) enabled_pod[idx] = TRUE; break; @@ -697,10 +697,10 @@ static int hmo_setup_channels(const struct sr_dev_inst *sdi) case SR_CHANNEL_LOGIC: /* * A digital POD needs to be enabled for every group of - * 8 channels. + * DIGITAL_CHANNELS_PER_POD channels. */ if (ch->enabled) - pod_enabled[ch->index < 8 ? 0 : 1] = TRUE; + pod_enabled[ch->index / DIGITAL_CHANNELS_PER_POD] = TRUE; if (ch->enabled == state->digital_channels[ch->index]) break; @@ -778,7 +778,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) if (!ch->enabled) continue; /* Only add a single digital channel per group (pod). */ - group = ch->index / 8; + group = ch->index / DIGITAL_CHANNELS_PER_POD; if (ch->type != SR_CHANNEL_LOGIC || !digital_added[group]) { devc->enabled_channels = g_slist_append( devc->enabled_channels, ch); diff --git a/src/hardware/hameg-hmo/protocol.c b/src/hardware/hameg-hmo/protocol.c index ef30c6f7..9135601c 100644 --- a/src/hardware/hameg-hmo/protocol.c +++ b/src/hardware/hameg-hmo/protocol.c @@ -326,7 +326,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}, @@ -374,7 +374,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, @@ -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, @@ -460,7 +458,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, @@ -502,7 +499,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, @@ -544,7 +540,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, @@ -586,7 +581,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, @@ -628,7 +622,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, @@ -670,7 +663,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, @@ -712,7 +704,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, @@ -997,7 +988,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], @@ -1191,6 +1182,8 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi) sr_dbg("Unsupported device."); 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); @@ -1237,7 +1230,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); } @@ -1468,7 +1461,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); } diff --git a/src/hardware/hameg-hmo/protocol.h b/src/hardware/hameg-hmo/protocol.h index 30efc862..df4a4e4c 100644 --- a/src/hardware/hameg-hmo/protocol.h +++ b/src/hardware/hameg-hmo/protocol.h @@ -28,17 +28,19 @@ #define LOG_PREFIX "hameg-hmo" -#define MAX_INSTRUMENT_VERSIONS 10 -#define MAX_COMMAND_SIZE 128 -#define MAX_ANALOG_CHANNEL_COUNT 4 -#define MAX_DIGITAL_CHANNEL_COUNT 16 -#define MAX_DIGITAL_GROUP_COUNT 2 +#define DIGITAL_CHANNELS_PER_POD 8 + +#define MAX_INSTRUMENT_VERSIONS 10 +#define MAX_COMMAND_SIZE 128 +#define MAX_ANALOG_CHANNEL_COUNT 4 +#define MAX_DIGITAL_CHANNEL_COUNT 16 +#define MAX_DIGITAL_GROUP_COUNT 2 struct scope_config { const char *name[MAX_INSTRUMENT_VERSIONS]; const uint8_t analog_channels; const uint8_t digital_channels; - const uint8_t digital_pods; + uint8_t digital_pods; const char *(*analog_names)[]; const char *(*digital_names)[];