session: Add helper sr_session_send_meta() to send SR_DF_META packages.

Replace individual functions in drivers for arachnid-labs-re-load-pro
and lcr/es51919 with sr_session_send_meta() helper function.
This commit is contained in:
Frank Stettner 2019-04-09 14:12:31 +02:00 committed by Uwe Hermann
parent 6449b2e035
commit 7d1a4a5239
4 changed files with 48 additions and 76 deletions

View File

@ -265,32 +265,6 @@ SR_PRIV int reloadpro_get_voltage_current(const struct sr_dev_inst *sdi,
return SR_OK; return SR_OK;
} }
static int send_config_update_key(const struct sr_dev_inst *sdi,
uint32_t key, GVariant *var)
{
struct sr_config *cfg;
struct sr_datafeed_packet packet;
struct sr_datafeed_meta meta;
int ret;
cfg = sr_config_new(key, var);
if (!cfg)
return SR_ERR;
memset(&meta, 0, sizeof(meta));
packet.type = SR_DF_META;
packet.payload = &meta;
meta.config = g_slist_append(NULL, cfg);
ret = sr_session_send(sdi, &packet);
g_slist_free(meta.config);
sr_config_free(cfg);
return ret;
}
static void handle_packet(const struct sr_dev_inst *sdi) static void handle_packet(const struct sr_dev_inst *sdi)
{ {
struct sr_datafeed_packet packet; struct sr_datafeed_packet packet;
@ -307,7 +281,7 @@ static void handle_packet(const struct sr_dev_inst *sdi)
if (g_str_has_prefix((const char *)devc->buf, "overtemp")) { if (g_str_has_prefix((const char *)devc->buf, "overtemp")) {
sr_warn("Overtemperature condition!"); sr_warn("Overtemperature condition!");
devc->otp_active = TRUE; devc->otp_active = TRUE;
send_config_update_key(sdi, SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE, sr_session_send_meta(sdi, SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE,
g_variant_new_boolean(TRUE)); g_variant_new_boolean(TRUE));
return; return;
} }
@ -315,7 +289,7 @@ static void handle_packet(const struct sr_dev_inst *sdi)
if (g_str_has_prefix((const char *)devc->buf, "undervolt")) { if (g_str_has_prefix((const char *)devc->buf, "undervolt")) {
sr_warn("Undervoltage condition!"); sr_warn("Undervoltage condition!");
devc->uvc_active = TRUE; devc->uvc_active = TRUE;
send_config_update_key(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION_ACTIVE, sr_session_send_meta(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION_ACTIVE,
g_variant_new_boolean(TRUE)); g_variant_new_boolean(TRUE));
return; return;
} }
@ -330,7 +304,7 @@ static void handle_packet(const struct sr_dev_inst *sdi)
devc->current_limit = g_ascii_strtod(tokens[1], NULL) / 1000; devc->current_limit = g_ascii_strtod(tokens[1], NULL) / 1000;
g_strfreev(tokens); g_strfreev(tokens);
g_cond_signal(&devc->current_limit_cond); g_cond_signal(&devc->current_limit_cond);
send_config_update_key(sdi, SR_CONF_CURRENT_LIMIT, sr_session_send_meta(sdi, SR_CONF_CURRENT_LIMIT,
g_variant_new_double(devc->current_limit)); g_variant_new_double(devc->current_limit));
return; return;
} }
@ -341,12 +315,12 @@ static void handle_packet(const struct sr_dev_inst *sdi)
g_strfreev(tokens); g_strfreev(tokens);
g_cond_signal(&devc->uvc_threshold_cond); g_cond_signal(&devc->uvc_threshold_cond);
if (devc->uvc_threshold == .0) { if (devc->uvc_threshold == .0) {
send_config_update_key(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION, sr_session_send_meta(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION,
g_variant_new_boolean(FALSE)); g_variant_new_boolean(FALSE));
} else { } else {
send_config_update_key(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION, sr_session_send_meta(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION,
g_variant_new_boolean(TRUE)); g_variant_new_boolean(TRUE));
send_config_update_key(sdi, sr_session_send_meta(sdi,
SR_CONF_UNDER_VOLTAGE_CONDITION_THRESHOLD, SR_CONF_UNDER_VOLTAGE_CONDITION_THRESHOLD,
g_variant_new_double(devc->uvc_threshold)); g_variant_new_double(devc->uvc_threshold));
} }

View File

@ -251,42 +251,6 @@ static int serial_stream_check(struct sr_serial_dev_inst *serial,
is_valid, timeout_ms, baudrate); is_valid, timeout_ms, baudrate);
} }
static int send_config_update(struct sr_dev_inst *sdi, struct sr_config *cfg)
{
struct sr_datafeed_packet packet;
struct sr_datafeed_meta meta;
int ret;
memset(&meta, 0, sizeof(meta));
packet.type = SR_DF_META;
packet.payload = &meta;
meta.config = g_slist_append(NULL, cfg);
ret = sr_session_send(sdi, &packet);
g_slist_free(meta.config);
return ret;
}
static int send_config_update_key(struct sr_dev_inst *sdi, uint32_t key,
GVariant *var)
{
struct sr_config *cfg;
int ret;
cfg = sr_config_new(key, var);
if (!cfg)
return SR_ERR;
ret = send_config_update(sdi, cfg);
sr_config_free(cfg);
return ret;
}
/* /*
* Cyrustek ES51919 LCR chipset host protocol. * Cyrustek ES51919 LCR chipset host protocol.
* *
@ -569,21 +533,15 @@ static gboolean packet_valid(const uint8_t *pkt)
return FALSE; return FALSE;
} }
static int do_config_update(struct sr_dev_inst *sdi, uint32_t key,
GVariant *var)
{
return send_config_update_key(sdi, key, var);
}
static int send_freq_update(struct sr_dev_inst *sdi, unsigned int freq) static int send_freq_update(struct sr_dev_inst *sdi, unsigned int freq)
{ {
return do_config_update(sdi, SR_CONF_OUTPUT_FREQUENCY, return sr_session_send_meta(sdi, SR_CONF_OUTPUT_FREQUENCY,
g_variant_new_double(frequencies[freq])); g_variant_new_double(frequencies[freq]));
} }
static int send_model_update(struct sr_dev_inst *sdi, unsigned int model) static int send_model_update(struct sr_dev_inst *sdi, unsigned int model)
{ {
return do_config_update(sdi, SR_CONF_EQUIV_CIRCUIT_MODEL, return sr_session_send_meta(sdi, SR_CONF_EQUIV_CIRCUIT_MODEL,
g_variant_new_string(models[model])); g_variant_new_string(models[model]));
} }

View File

@ -908,6 +908,8 @@ SR_PRIV int sr_session_source_remove_pollfd(struct sr_session *session,
SR_PRIV int sr_session_source_remove_channel(struct sr_session *session, SR_PRIV int sr_session_source_remove_channel(struct sr_session *session,
GIOChannel *channel); GIOChannel *channel);
SR_PRIV int sr_session_send_meta(const struct sr_dev_inst *sdi,
uint32_t key, GVariant *var);
SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi, SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
const struct sr_datafeed_packet *packet); const struct sr_datafeed_packet *packet);
SR_PRIV int sr_sessionfile_check(const char *filename); SR_PRIV int sr_sessionfile_check(const char *filename);

View File

@ -1071,6 +1071,44 @@ static void datafeed_dump(const struct sr_datafeed_packet *packet)
} }
} }
/**
* Helper to send a meta datafeed package (SR_DF_META) to the session bus.
*
* @param sdi The device instance to send the package from. Must not be NULL.
* @param key The config key to send to the session bus.
* @param var The value to send to the session bus.
*
* @retval SR_OK Success.
* @retval SR_ERR_ARG Invalid argument.
*
* @private
*/
SR_PRIV int sr_session_send_meta(const struct sr_dev_inst *sdi,
uint32_t key, GVariant *var)
{
struct sr_config *cfg;
struct sr_datafeed_packet packet;
struct sr_datafeed_meta meta;
int ret;
cfg = sr_config_new(key, var);
if (!cfg)
return SR_ERR;
memset(&meta, 0, sizeof(meta));
packet.type = SR_DF_META;
packet.payload = &meta;
meta.config = g_slist_append(NULL, cfg);
ret = sr_session_send(sdi, &packet);
g_slist_free(meta.config);
sr_config_free(cfg);
return ret;
}
/** /**
* Send a packet to whatever is listening on the datafeed bus. * Send a packet to whatever is listening on the datafeed bus.
* *