Commit 79100d4e authored by Soeren Apel's avatar Soeren Apel

lecroy-xstream: Implement config_channel_set API callback

parent 5000c12f
...@@ -302,6 +302,16 @@ static int config_set(uint32_t key, GVariant *data, ...@@ -302,6 +302,16 @@ static int config_set(uint32_t key, GVariant *data,
return ret; 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, static int config_list(uint32_t key, GVariant **data,
const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) 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 = { ...@@ -497,6 +507,7 @@ static struct sr_dev_driver lecroy_xstream_driver_info = {
.dev_clear = dev_clear, .dev_clear = dev_clear,
.config_get = config_get, .config_get = config_get,
.config_set = config_set, .config_set = config_set,
.config_channel_set = config_channel_set,
.config_list = config_list, .config_list = config_list,
.dev_open = dev_open, .dev_open = dev_open,
.dev_close = dev_close, .dev_close = dev_close,
......
...@@ -318,6 +318,54 @@ static int analog_channel_state_get(struct sr_scpi_dev_inst *scpi, ...@@ -318,6 +318,54 @@ static int analog_channel_state_get(struct sr_scpi_dev_inst *scpi,
return SR_OK; 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) SR_PRIV int lecroy_xstream_update_sample_rate(const struct sr_dev_inst *sdi)
{ {
struct dev_context *devc; struct dev_context *devc;
......
...@@ -96,6 +96,8 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data); ...@@ -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 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_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); SR_PRIV int lecroy_xstream_update_sample_rate(const struct sr_dev_inst *sdi);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment