X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fyokogawa-dlm%2Fapi.c;h=eb5bbc19b39aca02da04e8f9d1f0aee00af2484c;hb=2dcf82e9cb486dc235c1e0b96334d4edb0f19130;hp=0ccf5834e157638aac443d69708a5230a8fceb46;hpb=f3c60fb6affce2ebd81250db1d60bee733e5f479;p=libsigrok.git diff --git a/src/hardware/yokogawa-dlm/api.c b/src/hardware/yokogawa-dlm/api.c index 0ccf5834..eb5bbc19 100644 --- a/src/hardware/yokogawa-dlm/api.c +++ b/src/hardware/yokogawa-dlm/api.c @@ -491,6 +491,16 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd return ret; } +static int config_channel_set(const struct sr_dev_inst *sdi, + struct sr_channel *ch, unsigned int changes) +{ + /* Curretly we only handle SR_CHANNEL_SET_ENABLED. */ + if (changes != SR_CHANNEL_SET_ENABLED) + return SR_ERR_NA; + + return dlm_channel_state_set(sdi, ch->index, ch->enabled); +} + static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { @@ -612,79 +622,6 @@ static int dlm_check_channels(GSList *channels) return SR_OK; } -static int dlm_setup_channels(const struct sr_dev_inst *sdi) -{ - GSList *l; - unsigned int i; - gboolean *pod_enabled, setup_changed; - struct scope_state *state; - const struct scope_config *model; - struct sr_channel *ch; - struct dev_context *devc; - struct sr_scpi_dev_inst *scpi; - - devc = sdi->priv; - scpi = sdi->conn; - state = devc->model_state; - model = devc->model_config; - setup_changed = FALSE; - - pod_enabled = g_malloc0(sizeof(gboolean) * model->pods); - - for (l = sdi->channels; l; l = l->next) { - ch = l->data; - switch (ch->type) { - case SR_CHANNEL_ANALOG: - if (ch->enabled == state->analog_states[ch->index].state) - break; - - if (dlm_analog_chan_state_set(scpi, ch->index + 1, - ch->enabled) != SR_OK) - return SR_ERR; - - state->analog_states[ch->index].state = ch->enabled; - setup_changed = TRUE; - break; - case SR_CHANNEL_LOGIC: - i = ch->index - DLM_DIG_CHAN_INDEX_OFFS; - if (ch->enabled) - pod_enabled[i / 8] = TRUE; - - if (ch->enabled == state->digital_states[i]) - break; - - if (dlm_digital_chan_state_set(scpi, i + 1, - ch->enabled) != SR_OK) - return SR_ERR; - - state->digital_states[i] = ch->enabled; - setup_changed = TRUE; - break; - default: - return SR_ERR; - } - } - - for (i = 1; i <= model->pods; ++i) { - if (state->pod_states[i - 1] == pod_enabled[i - 1]) - continue; - - if (dlm_digital_pod_state_set(scpi, i, - pod_enabled[i - 1]) != SR_OK) - return SR_ERR; - - state->pod_states[i - 1] = pod_enabled[i - 1]; - setup_changed = TRUE; - } - - g_free(pod_enabled); - - if (setup_changed && dlm_sample_rate_query(sdi) != SR_OK) - return SR_ERR; - - return SR_OK; -} - static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) { GSList *l; @@ -726,11 +663,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) return SR_ERR_NA; } - if (dlm_setup_channels(sdi) != SR_OK) { - sr_err("Failed to setup channel configuration!"); - return SR_ERR; - } - /* Request data for the first enabled channel. */ devc->current_channel = devc->enabled_channels; dlm_channel_data_request(sdi); @@ -778,6 +710,7 @@ SR_PRIV struct sr_dev_driver yokogawa_dlm_driver_info = { .dev_clear = dev_clear, .config_get = config_get, .config_set = config_set, + .config_channel_set = config_channel_set, .config_list = config_list, .dev_open = dev_open, .dev_close = dev_close,