]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/korad-kaxxxxp/protocol.c
korad-kaxxxxp: eliminate model check in OVP enabled quirk handling
[libsigrok.git] / src / hardware / korad-kaxxxxp / protocol.c
index 2d0cb9b55e97b620d5cf9f25427c50b88278df38..c52bd9011fcc189cbb8fb00cd0785f280b02b1df 100644 (file)
@@ -21,7 +21,6 @@
 #include <config.h>
 #include "protocol.h"
 
-#define REQ_TIMEOUT_MS 500
 #define DEVICE_PROCESSING_TIME_MS 80
 
 SR_PRIV int korad_kaxxxxp_send_cmd(struct sr_serial_dev_inst *serial,
@@ -259,6 +258,7 @@ SR_PRIV int korad_kaxxxxp_get_value(struct sr_serial_dev_inst *serial,
        char reply[6];
        float *value;
        char status_byte;
+       gboolean needs_ovp_quirk;
        gboolean prev_status;
 
        g_mutex_lock(&devc->rw_mutex);
@@ -298,8 +298,11 @@ SR_PRIV int korad_kaxxxxp_get_value(struct sr_serial_dev_inst *serial,
                break;
        default:
                sr_err("Don't know how to query %d.", target);
+               ret = SR_ERR;
+       }
+       if (ret < 0) {
                g_mutex_unlock(&devc->rw_mutex);
-               return SR_ERR;
+               return ret;
        }
 
        devc->req_sent_at = g_get_monotonic_time();
@@ -309,8 +312,6 @@ SR_PRIV int korad_kaxxxxp_get_value(struct sr_serial_dev_inst *serial,
                return ret;
        }
 
-       reply[count] = 0;
-
        if (value) {
                sr_atof_ascii((const char *)&reply, value);
                sr_dbg("value: %f", *value);
@@ -345,9 +346,8 @@ SR_PRIV int korad_kaxxxxp_get_value(struct sr_serial_dev_inst *serial,
                devc->output_enabled_changed = devc->output_enabled != prev_status;
 
                /* OVP enabled, special handling for Velleman LABPS3005 quirk. */
-               if ((devc->model->model_id == VELLEMAN_LABPS3005D && devc->output_enabled) ||
-                       devc->model->model_id != VELLEMAN_LABPS3005D) {
-
+               needs_ovp_quirk = devc->model->quirks & KORAD_QUIRK_LABPS_OVP_EN;
+               if (!needs_ovp_quirk || devc->output_enabled) {
                        prev_status = devc->ovp_enabled;
                        devc->ovp_enabled = status_byte & (1 << 7);
                        devc->ovp_enabled_changed = devc->ovp_enabled != prev_status;