lecroy-xstream: Implement config_channel_set API callback

This commit is contained in:
Soeren Apel 2017-10-03 17:07:27 +02:00
parent 5000c12f57
commit 79100d4e8b
3 changed files with 61 additions and 0 deletions

View File

@ -302,6 +302,16 @@ static int config_set(uint32_t key, GVariant *data,
return ret;
}
static int config_channel_set(const struct sr_dev_inst *sdi,
struct sr_channel *ch, unsigned int changes)
{
/* Currently we only handle SR_CHANNEL_SET_ENABLED. */
if (changes != SR_CHANNEL_SET_ENABLED)
return SR_ERR_NA;
return lecroy_xstream_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)
{
@ -497,6 +507,7 @@ static struct sr_dev_driver lecroy_xstream_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,

View File

@ -318,6 +318,54 @@ static int analog_channel_state_get(struct sr_scpi_dev_inst *scpi,
return SR_OK;
}
SR_PRIV int lecroy_xstream_channel_state_set(const struct sr_dev_inst *sdi,
const int ch_index, gboolean ch_state)
{
GSList *l;
struct sr_channel *ch;
struct dev_context *devc = NULL;
struct scope_state *state;
char command[MAX_COMMAND_SIZE];
gboolean chan_found;
int result;
result = SR_OK;
devc = sdi->priv;
state = devc->model_state;
chan_found = FALSE;
for (l = sdi->channels; l; l = l->next) {
ch = l->data;
switch (ch->type) {
case SR_CHANNEL_ANALOG:
if (ch->index == ch_index) {
g_snprintf(command, sizeof(command), "C%d:TRACE %s", ch_index + 1,
(ch_state ? "ON" : "OFF"));
if ((sr_scpi_send(sdi->conn, command) != SR_OK ||
sr_scpi_get_opc(sdi->conn) != SR_OK)) {
result = SR_ERR;
break;
}
ch->enabled = ch_state;
state->analog_channels[ch->index].state = ch_state;
chan_found = TRUE;
break;
}
break;
default:
result = SR_ERR_NA;
}
}
if ((result == SR_OK) && !chan_found)
result = SR_ERR_BUG;
return result;
}
SR_PRIV int lecroy_xstream_update_sample_rate(const struct sr_dev_inst *sdi)
{
struct dev_context *devc;

View File

@ -96,6 +96,8 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data);
SR_PRIV void lecroy_xstream_state_free(struct scope_state *state);
SR_PRIV int lecroy_xstream_state_get(struct sr_dev_inst *sdi);
SR_PRIV int lecroy_xstream_channel_state_set(const struct sr_dev_inst *sdi,
const int ch_index, gboolean ch_state);
SR_PRIV int lecroy_xstream_update_sample_rate(const struct sr_dev_inst *sdi);
#endif