+ sr_session_send_meta(sdi, SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE,
+ g_variant_new_boolean(TRUE));
+ return;
+ }
+
+ if (g_str_has_prefix((const char *)devc->buf, "undervolt")) {
+ sr_warn("Undervoltage condition!");
+ devc->uvc_active = TRUE;
+ sr_session_send_meta(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION_ACTIVE,
+ g_variant_new_boolean(TRUE));
+ return;
+ }
+
+ if (g_str_has_prefix((const char *)devc->buf, "err ")) {
+ sr_err("Device replied with an error: '%s'.", devc->buf);
+ return;
+ }
+
+ if (g_str_has_prefix((const char *)devc->buf, "set ")) {
+ tokens = g_strsplit((const char *)devc->buf, " ", 2);
+ devc->current_limit = g_ascii_strtod(tokens[1], NULL) / 1000;
+ g_strfreev(tokens);
+ g_cond_signal(&devc->current_limit_cond);
+ sr_session_send_meta(sdi, SR_CONF_CURRENT_LIMIT,
+ g_variant_new_double(devc->current_limit));
+ return;
+ }
+
+ if (g_str_has_prefix((const char *)devc->buf, "uvlo ")) {
+ tokens = g_strsplit((const char *)devc->buf, " ", 2);
+ devc->uvc_threshold = g_ascii_strtod(tokens[1], NULL) / 1000;
+ g_strfreev(tokens);
+ g_cond_signal(&devc->uvc_threshold_cond);
+ if (devc->uvc_threshold == .0) {
+ sr_session_send_meta(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION,
+ g_variant_new_boolean(FALSE));
+ } else {
+ sr_session_send_meta(sdi, SR_CONF_UNDER_VOLTAGE_CONDITION,
+ g_variant_new_boolean(TRUE));
+ sr_session_send_meta(sdi,
+ SR_CONF_UNDER_VOLTAGE_CONDITION_THRESHOLD,
+ g_variant_new_double(devc->uvc_threshold));
+ }