cem-dt-885x: Fix datalog on/off setting in max/min hold mode
As it turns out, the device randomly decides to send no logging state info when max hold or min hold mode is enabled.
This commit is contained in:
parent
a90e480cdc
commit
0cd9107dfb
|
@ -185,7 +185,8 @@ static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi)
|
|||
*data = g_variant_new_uint64(devc->limit_samples);
|
||||
break;
|
||||
case SR_CONF_DATALOG:
|
||||
*data = g_variant_new_boolean(cem_dt_885x_recording_get(sdi));
|
||||
if ((ret = cem_dt_885x_recording_get(sdi, &tmp)) == SR_OK)
|
||||
*data = g_variant_new_boolean(tmp);
|
||||
break;
|
||||
case SR_CONF_SPL_WEIGHT_FREQ:
|
||||
tmp = cem_dt_885x_weight_freq_get(sdi);
|
||||
|
@ -243,13 +244,7 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi)
|
|||
ret = SR_OK;
|
||||
break;
|
||||
case SR_CONF_DATALOG:
|
||||
if (g_variant_get_boolean(data)) {
|
||||
/* Start logging. */
|
||||
ret = cem_dt_885x_recording_set(sdi, TRUE);
|
||||
} else {
|
||||
/* Stop logging. */
|
||||
ret = cem_dt_885x_recording_set(sdi, FALSE);
|
||||
}
|
||||
ret = cem_dt_885x_recording_set(sdi, g_variant_get_boolean(data));
|
||||
break;
|
||||
case SR_CONF_SPL_WEIGHT_FREQ:
|
||||
tmp_str = g_variant_get_string(data, NULL);
|
||||
|
|
|
@ -343,26 +343,28 @@ SR_PRIV int cem_dt_885x_toggle(const struct sr_dev_inst *sdi, uint8_t cmd,
|
|||
return SR_OK;
|
||||
}
|
||||
|
||||
SR_PRIV gboolean cem_dt_885x_recording_get(const struct sr_dev_inst *sdi)
|
||||
SR_PRIV gboolean cem_dt_885x_recording_get(const struct sr_dev_inst *sdi,
|
||||
int *state)
|
||||
{
|
||||
struct dev_context *devc;
|
||||
char tokens[5];
|
||||
|
||||
devc = sdi->priv;
|
||||
|
||||
if (devc->recording == -1) {
|
||||
/* Didn't pick up device state yet. */
|
||||
tokens[0] = TOKEN_RECORDING_ON;
|
||||
tokens[1] = TOKEN_RECORDING_OFF;
|
||||
tokens[2] = -1;
|
||||
if (wait_for_token(sdi, tokens, 0) != SR_OK)
|
||||
if (wait_for_token(sdi, tokens, 510) != SR_OK)
|
||||
return SR_ERR;
|
||||
}
|
||||
*state = devc->token == TOKEN_RECORDING_ON;
|
||||
|
||||
return devc->token == TOKEN_RECORDING_ON;
|
||||
return SR_OK;
|
||||
}
|
||||
|
||||
SR_PRIV int cem_dt_885x_recording_set(const struct sr_dev_inst *sdi, gboolean start)
|
||||
SR_PRIV int cem_dt_885x_recording_set(const struct sr_dev_inst *sdi,
|
||||
gboolean state)
|
||||
{
|
||||
struct dev_context *devc;
|
||||
int ret;
|
||||
|
@ -371,7 +373,7 @@ SR_PRIV int cem_dt_885x_recording_set(const struct sr_dev_inst *sdi, gboolean st
|
|||
devc = sdi->priv;
|
||||
|
||||
/* The toggle below needs the desired state in first position. */
|
||||
if (start) {
|
||||
if (state) {
|
||||
tokens[0] = TOKEN_RECORDING_ON;
|
||||
tokens[1] = TOKEN_RECORDING_OFF;
|
||||
} else {
|
||||
|
@ -387,7 +389,7 @@ SR_PRIV int cem_dt_885x_recording_set(const struct sr_dev_inst *sdi, gboolean st
|
|||
if (devc->token == tokens[0])
|
||||
/* Nothing to do. */
|
||||
return SR_OK;
|
||||
} else if (devc->recording == start)
|
||||
} else if (devc->recording == state)
|
||||
/* Nothing to do. */
|
||||
return SR_OK;
|
||||
|
||||
|
|
|
@ -106,7 +106,8 @@ enum {
|
|||
|
||||
SR_PRIV int cem_dt_885x_receive_data(int fd, int revents, void *cb_data);
|
||||
SR_PRIV int cem_dt_885x_recording_set(const struct sr_dev_inst *sdi, gboolean start);
|
||||
SR_PRIV gboolean cem_dt_885x_recording_get(const struct sr_dev_inst *sdi);
|
||||
SR_PRIV gboolean cem_dt_885x_recording_get(const struct sr_dev_inst *sdi,
|
||||
int *state);
|
||||
SR_PRIV int cem_dt_885x_weight_freq_get(const struct sr_dev_inst *sdi);
|
||||
SR_PRIV int cem_dt_885x_weight_freq_set(const struct sr_dev_inst *sdi, int freqw);
|
||||
SR_PRIV int cem_dt_885x_weight_time_get(const struct sr_dev_inst *sdi);
|
||||
|
|
Loading…
Reference in New Issue