--- src/hardware/hameg-hmo/api.c | 25 +++++++------------------ src/hardware/hameg-hmo/protocol.c | 31 +++++++++++++++++++++---------- src/hardware/hameg-hmo/protocol.h | 4 ++-- 3 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/src/hardware/hameg-hmo/api.c b/src/hardware/hameg-hmo/api.c index 7f3d5f5..8db1e76 100644 --- a/src/hardware/hameg-hmo/api.c +++ b/src/hardware/hameg-hmo/api.c @@ -123,23 +123,12 @@ static GSList *dev_list(void) static void clear_helper(void *priv) { - unsigned int i; struct dev_context *devc; - struct scope_config *model; devc = priv; - model = devc->model_config; hmo_scope_state_free(devc->model_state); - for (i = 0; i < model->analog_channels; ++i) - g_slist_free(devc->analog_groups[i].channels); - - for (i = 0; i < model->digital_pods; ++i) { - g_slist_free(devc->digital_groups[i].channels); - g_free(devc->digital_groups[i].name); - } - g_free(devc->analog_groups); g_free(devc->digital_groups); @@ -195,11 +184,11 @@ static int check_channel_group(struct dev_context *devc, return CG_NONE; for (i = 0; i < model->analog_channels; ++i) - if (cg == &devc->analog_groups[i]) + if (cg == devc->analog_groups[i]) return CG_ANALOG; for (i = 0; i < model->digital_pods; ++i) - if (cg == &devc->digital_groups[i]) + if (cg == devc->digital_groups[i]) return CG_DIGITAL; sr_err("Invalid channel group specified."); @@ -242,7 +231,7 @@ static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi, return SR_ERR_CHANNEL_GROUP; } else if (cg_type == CG_ANALOG) { for (i = 0; i < model->analog_channels; ++i) { - if (cg != &devc->analog_groups[i]) + if (cg != devc->analog_groups[i]) continue; *data = g_variant_new_int32(model->num_ydivs); ret = SR_OK; @@ -259,7 +248,7 @@ static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi, return SR_ERR_CHANNEL_GROUP; } else if (cg_type == CG_ANALOG) { for (i = 0; i < model->analog_channels; ++i) { - if (cg != &devc->analog_groups[i]) + if (cg != devc->analog_groups[i]) continue; *data = g_variant_new("(tt)", (*model->vdivs)[state->analog_channels[i].vdiv][0], @@ -290,7 +279,7 @@ static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi, return SR_ERR_CHANNEL_GROUP; } else if (cg_type == CG_ANALOG) { for (i = 0; i < model->analog_channels; ++i) { - if (cg != &devc->analog_groups[i]) + if (cg != devc->analog_groups[i]) continue; *data = g_variant_new_string((*model->coupling_options)[state->analog_channels[i].coupling]); ret = SR_OK; @@ -389,7 +378,7 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi, q != (*model->vdivs)[i][1]) continue; for (j = 1; j <= model->analog_channels; ++j) { - if (cg != &devc->analog_groups[j - 1]) + if (cg != devc->analog_groups[j - 1]) continue; state->analog_channels[j - 1].vdiv = i; g_ascii_formatd(float_str, sizeof(float_str), "%E", (float) p / q); @@ -471,7 +460,7 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi, if (strcmp(tmp, (*model->coupling_options)[i]) != 0) continue; for (j = 1; j <= model->analog_channels; ++j) { - if (cg != &devc->analog_groups[j - 1]) + if (cg != devc->analog_groups[j - 1]) continue; state->analog_channels[j-1].coupling = i; diff --git a/src/hardware/hameg-hmo/protocol.c b/src/hardware/hameg-hmo/protocol.c index de23835..a9eb92d 100644 --- a/src/hardware/hameg-hmo/protocol.c +++ b/src/hardware/hameg-hmo/protocol.c @@ -608,11 +608,11 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi) return SR_ERR_NA; } - if (!(devc->analog_groups = g_try_malloc0(sizeof(struct sr_channel_group) * + if (!(devc->analog_groups = g_try_malloc0(sizeof(void*) * scope_models[model_index].analog_channels))) return SR_ERR_MALLOC; - if (!(devc->digital_groups = g_try_malloc0(sizeof(struct sr_channel_group) * + if (!(devc->digital_groups = g_try_malloc0(sizeof(void*) * scope_models[model_index].digital_pods))) return SR_ERR_MALLOC; @@ -623,20 +623,31 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi) return SR_ERR_MALLOC; sdi->channels = g_slist_append(sdi->channels, ch); - devc->analog_groups[i].name = - (char *)(*scope_models[model_index].analog_names)[i]; - devc->analog_groups[i].channels = g_slist_append(NULL, ch); + devc->analog_groups[i] = (struct sr_channel_group*) + g_try_malloc0(sizeof(struct sr_channel_group)); + if (!devc->analog_groups[i]) + return SR_ERR_MALLOC; + + devc->analog_groups[i]->name = g_strdup( + (char *)(*scope_models[model_index].analog_names)[i]); + devc->analog_groups[i]->channels = g_slist_append(NULL, ch); sdi->channel_groups = g_slist_append(sdi->channel_groups, - &devc->analog_groups[i]); + devc->analog_groups[i]); } /* Add digital channel groups. */ for (i = 0; i < scope_models[model_index].digital_pods; ++i) { g_snprintf(tmp, 25, "POD%d", i); - devc->digital_groups[i].name = g_strdup(tmp); + + devc->digital_groups[i] = (struct sr_channel_group*) + g_try_malloc0(sizeof(struct sr_channel_group)); + if (!devc->digital_groups[i]) + return SR_ERR_MALLOC; + + devc->digital_groups[i]->name = g_strdup(tmp); sdi->channel_groups = g_slist_append(sdi->channel_groups, - &devc->digital_groups[i < 8 ? 0 : 1]); + devc->digital_groups[i < 8 ? 0 : 1]); } /* Add digital channels. */ @@ -646,8 +657,8 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi) return SR_ERR_MALLOC; sdi->channels = g_slist_append(sdi->channels, ch); - devc->digital_groups[i < 8 ? 0 : 1].channels = g_slist_append( - devc->digital_groups[i < 8 ? 0 : 1].channels, ch); + devc->digital_groups[i < 8 ? 0 : 1]->channels = g_slist_append( + devc->digital_groups[i < 8 ? 0 : 1]->channels, ch); } devc->model_config = &scope_models[model_index]; diff --git a/src/hardware/hameg-hmo/protocol.h b/src/hardware/hameg-hmo/protocol.h index bdf70fc..932e3ec 100644 --- a/src/hardware/hameg-hmo/protocol.h +++ b/src/hardware/hameg-hmo/protocol.h @@ -93,8 +93,8 @@ struct dev_context { void *model_config; void *model_state; - struct sr_channel_group *analog_groups; - struct sr_channel_group *digital_groups; + struct sr_channel_group **analog_groups; + struct sr_channel_group **digital_groups; GSList *enabled_channels; GSList *current_channel; -- 1.7.8.6 ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ sigrok-devel mailing list sigrok-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sigrok-devel