"EITH",
};
-static const char *compact2_trigger_sources[] = {
+/* HMO compact2 */
+static const char *an2_dig8_trigger_sources[] = {
"CH1", "CH2",
"LINE", "EXT", "PATT", "BUS1", "BUS2",
"D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
};
-static const char *compact4_trigger_sources[] = {
+/* HMO xxx2 */
+static const char *an2_dig16_trigger_sources[] = {
+ "CH1", "CH2",
+ "LINE", "EXT", "PATT", "BUS1", "BUS2",
+ "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
+ "D8", "D9", "D10", "D11", "D12", "D13", "D14", "D15",
+};
+
+/* HMO compact4 */
+static const char *an4_dig8_trigger_sources[] = {
"CH1", "CH2", "CH3", "CH4",
"LINE", "EXT", "PATT", "BUS1", "BUS2",
"D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
};
-static const char *compact4_dig16_trigger_sources[] = {
+/* HMO xxx4 */
+static const char *an4_dig16_trigger_sources[] = {
"CH1", "CH2", "CH3", "CH4",
"LINE", "EXT", "PATT", "BUS1", "BUS2",
"D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
static const struct scope_config scope_models[] = {
{
- /* HMO2522/3032/3042/3052 support 16 digital channels but they're not supported yet. */
- .name = {"HMO1002", "HMO722", "HMO1022", "HMO1522", "HMO2022", "HMO2522",
- "HMO3032", "HMO3042", "HMO3052", NULL},
+ /* HMO722/1002/1022/1522/2022 support only 8 digital channels. */
+ .name = {"HMO722", "HMO1002", "HMO1022", "HMO1522", "HMO2022", NULL},
.analog_channels = 2,
.digital_channels = 8,
.digital_pods = 1,
.coupling_options = &coupling_options,
.num_coupling_options = ARRAY_SIZE(coupling_options),
- .trigger_sources = &compact2_trigger_sources,
- .num_trigger_sources = ARRAY_SIZE(compact2_trigger_sources),
+ .trigger_sources = &an2_dig8_trigger_sources,
+ .num_trigger_sources = ARRAY_SIZE(an2_dig8_trigger_sources),
+
+ .trigger_slopes = &scope_trigger_slopes,
+ .num_trigger_slopes = ARRAY_SIZE(scope_trigger_slopes),
+
+ .timebases = &timebases,
+ .num_timebases = ARRAY_SIZE(timebases),
+
+ .vdivs = &vdivs,
+ .num_vdivs = ARRAY_SIZE(vdivs),
+
+ .num_xdivs = 12,
+ .num_ydivs = 8,
+
+ .scpi_dialect = &hameg_scpi_dialect,
+ },
+ {
+ /* HMO3032/3042/3052/3522 support 16 digital channels. */
+ .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,
+
+ .devopts = &devopts,
+ .num_devopts = ARRAY_SIZE(devopts),
+
+ .devopts_cg_analog = &devopts_cg_analog,
+ .num_devopts_cg_analog = ARRAY_SIZE(devopts_cg_analog),
+
+ .coupling_options = &coupling_options,
+ .num_coupling_options = ARRAY_SIZE(coupling_options),
+
+ .trigger_sources = &an2_dig16_trigger_sources,
+ .num_trigger_sources = ARRAY_SIZE(an2_dig16_trigger_sources),
.trigger_slopes = &scope_trigger_slopes,
.num_trigger_slopes = ARRAY_SIZE(scope_trigger_slopes),
.coupling_options = &coupling_options,
.num_coupling_options = ARRAY_SIZE(coupling_options),
- .trigger_sources = &compact4_trigger_sources,
- .num_trigger_sources = ARRAY_SIZE(compact4_trigger_sources),
+ .trigger_sources = &an4_dig8_trigger_sources,
+ .num_trigger_sources = ARRAY_SIZE(an4_dig8_trigger_sources),
.trigger_slopes = &scope_trigger_slopes,
.num_trigger_slopes = ARRAY_SIZE(scope_trigger_slopes),
.coupling_options = &coupling_options,
.num_coupling_options = ARRAY_SIZE(coupling_options),
- .trigger_sources = &compact4_dig16_trigger_sources,
- .num_trigger_sources = ARRAY_SIZE(compact4_dig16_trigger_sources),
+ .trigger_sources = &an4_dig16_trigger_sources,
+ .num_trigger_sources = ARRAY_SIZE(an4_dig16_trigger_sources),
.trigger_slopes = &scope_trigger_slopes,
.num_trigger_slopes = ARRAY_SIZE(scope_trigger_slopes),
unsigned int i, j, group;
struct sr_channel *ch;
struct dev_context *devc;
+ int ret;
devc = sdi->priv;
model_index = -1;
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*) *
scope_models[model_index].digital_pods);
+ if (!devc->analog_groups || !devc->digital_groups) {
+ g_free(devc->analog_groups);
+ g_free(devc->digital_groups);
+ return SR_ERR_MALLOC;
+ }
/* Add analog channels. */
for (i = 0; i < scope_models[model_index].analog_channels; i++) {
}
/* Add digital channel groups. */
+ ret = SR_OK;
for (i = 0; i < scope_models[model_index].digital_pods; i++) {
devc->digital_groups[i] = g_malloc0(sizeof(struct sr_channel_group));
+ if (!devc->digital_groups[i]) {
+ ret = SR_ERR_MALLOC;
+ break;
+ }
devc->digital_groups[i]->name = g_strdup_printf("POD%d", i);
sdi->channel_groups = g_slist_append(sdi->channel_groups,
devc->digital_groups[i]);
}
+ if (ret != SR_OK)
+ return ret;
/* Add digital channels. */
for (i = 0; i < scope_models[model_index].digital_channels; i++) {
if (sr_scpi_get_block(sdi->conn, NULL, &data) != SR_OK) {
if (data)
g_byte_array_free(data, TRUE);
-
return TRUE;
}
break;
case SR_CHANNEL_LOGIC:
if (sr_scpi_get_block(sdi->conn, NULL, &data) != SR_OK) {
- g_free(data);
+ if (data)
+ g_byte_array_free(data, TRUE);
return TRUE;
}