hameg-hmo: Forward internal channel state to sigrok channel state
This fixes bug #883.
This commit is contained in:
parent
41802ca4c0
commit
bd70ec4b73
|
@ -379,13 +379,29 @@ static int array_float_get(gchar *value, const uint64_t array[][2],
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int analog_channel_state_get(struct sr_scpi_dev_inst *scpi,
|
static struct sr_channel *get_channel_by_index_and_type(GSList *channel_lhead,
|
||||||
|
int index, int type)
|
||||||
|
{
|
||||||
|
while (channel_lhead) {
|
||||||
|
struct sr_channel *ch = channel_lhead->data;
|
||||||
|
if (ch->index == index && ch->type == type)
|
||||||
|
return ch;
|
||||||
|
|
||||||
|
channel_lhead = channel_lhead->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int analog_channel_state_get(struct sr_dev_inst *sdi,
|
||||||
const struct scope_config *config,
|
const struct scope_config *config,
|
||||||
struct scope_state *state)
|
struct scope_state *state)
|
||||||
{
|
{
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
char command[MAX_COMMAND_SIZE];
|
char command[MAX_COMMAND_SIZE];
|
||||||
char *tmp_str;
|
char *tmp_str;
|
||||||
|
struct sr_channel *ch;
|
||||||
|
struct sr_scpi_dev_inst *scpi = sdi->conn;
|
||||||
|
|
||||||
for (i = 0; i < config->analog_channels; i++) {
|
for (i = 0; i < config->analog_channels; i++) {
|
||||||
g_snprintf(command, sizeof(command),
|
g_snprintf(command, sizeof(command),
|
||||||
|
@ -396,6 +412,10 @@ static int analog_channel_state_get(struct sr_scpi_dev_inst *scpi,
|
||||||
&state->analog_channels[i].state) != SR_OK)
|
&state->analog_channels[i].state) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
|
|
||||||
|
ch = get_channel_by_index_and_type(sdi->channels, i, SR_CHANNEL_ANALOG);
|
||||||
|
if (ch)
|
||||||
|
ch->enabled = state->analog_channels[i].state;
|
||||||
|
|
||||||
g_snprintf(command, sizeof(command),
|
g_snprintf(command, sizeof(command),
|
||||||
(*config->scpi_dialect)[SCPI_CMD_GET_VERTICAL_DIV],
|
(*config->scpi_dialect)[SCPI_CMD_GET_VERTICAL_DIV],
|
||||||
i + 1);
|
i + 1);
|
||||||
|
@ -446,12 +466,14 @@ static int analog_channel_state_get(struct sr_scpi_dev_inst *scpi,
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int digital_channel_state_get(struct sr_scpi_dev_inst *scpi,
|
static int digital_channel_state_get(struct sr_dev_inst *sdi,
|
||||||
const struct scope_config *config,
|
const struct scope_config *config,
|
||||||
struct scope_state *state)
|
struct scope_state *state)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
char command[MAX_COMMAND_SIZE];
|
char command[MAX_COMMAND_SIZE];
|
||||||
|
struct sr_channel *ch;
|
||||||
|
struct sr_scpi_dev_inst *scpi = sdi->conn;
|
||||||
|
|
||||||
for (i = 0; i < config->digital_channels; i++) {
|
for (i = 0; i < config->digital_channels; i++) {
|
||||||
g_snprintf(command, sizeof(command),
|
g_snprintf(command, sizeof(command),
|
||||||
|
@ -461,6 +483,10 @@ static int digital_channel_state_get(struct sr_scpi_dev_inst *scpi,
|
||||||
if (sr_scpi_get_bool(scpi, command,
|
if (sr_scpi_get_bool(scpi, command,
|
||||||
&state->digital_channels[i]) != SR_OK)
|
&state->digital_channels[i]) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
|
|
||||||
|
ch = get_channel_by_index_and_type(sdi->channels, i, SR_CHANNEL_LOGIC);
|
||||||
|
if (ch)
|
||||||
|
ch->enabled = state->digital_channels[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < config->digital_pods; i++) {
|
for (i = 0; i < config->digital_pods; i++) {
|
||||||
|
@ -552,10 +578,10 @@ SR_PRIV int hmo_scope_state_get(struct sr_dev_inst *sdi)
|
||||||
|
|
||||||
sr_info("Fetching scope state");
|
sr_info("Fetching scope state");
|
||||||
|
|
||||||
if (analog_channel_state_get(sdi->conn, config, state) != SR_OK)
|
if (analog_channel_state_get(sdi, config, state) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
|
|
||||||
if (digital_channel_state_get(sdi->conn, config, state) != SR_OK)
|
if (digital_channel_state_get(sdi, config, state) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
|
|
||||||
if (sr_scpi_get_float(sdi->conn,
|
if (sr_scpi_get_float(sdi->conn,
|
||||||
|
|
Loading…
Reference in New Issue