]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/rdtech-dps/protocol.h
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / rdtech-dps / protocol.h
index fc23ed3ab1c087e2fdbe86484e330c4728386dc4..1170dbf99baabb7d7d8b158f703c8f3e920fa3b1 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H
 #define LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H
 
-#include <config.h>
+#include "config.h"
 
 #include <glib.h>
 #include <libsigrok/libsigrok.h>
 
 #define LOG_PREFIX "rdtech-dps"
 
-struct rdtech_dps_model {
-       unsigned int id;
-       const char *name;
+enum rdtech_dps_model_type {
+       MODEL_NONE,
+       MODEL_DPS,
+       MODEL_RD,
+};
+
+struct rdtech_dps_range {
+       const char *range_str;
        unsigned int max_current;
        unsigned int max_voltage;
        unsigned int max_power;
@@ -42,6 +47,14 @@ struct rdtech_dps_model {
        unsigned int voltage_digits;
 };
 
+struct rdtech_dps_model {
+       enum rdtech_dps_model_type model_type;
+       unsigned int id;
+       const char *name;
+       const struct rdtech_dps_range *ranges;
+       size_t n_ranges;
+};
+
 struct dev_context {
        const struct rdtech_dps_model *model;
        double current_multiplier;
@@ -52,6 +65,8 @@ struct dev_context {
        gboolean curr_ocp_state;
        gboolean curr_cc_state;
        gboolean curr_out_state;
+       size_t curr_range;
+       gboolean acquisition_started;
 };
 
 /* Container to get and set parameter values. */
@@ -70,6 +85,7 @@ struct rdtech_dps_state {
                STATE_VOLTAGE = 1 << 10,
                STATE_CURRENT = 1 << 11,
                STATE_POWER = 1 << 12,
+               STATE_RANGE = 1 << 13,
        } mask;
        gboolean lock;
        gboolean output_enabled, regulation_cc;
@@ -77,15 +93,25 @@ struct rdtech_dps_state {
        float voltage_target, current_limit;
        float ovp_threshold, ocp_threshold;
        float voltage, current, power;
+       size_t range;
 };
 
+enum rdtech_dps_state_context {
+       ST_CTX_NONE,
+       ST_CTX_CONFIG,
+       ST_CTX_PRE_ACQ,
+       ST_CTX_IN_ACQ,
+};
 SR_PRIV int rdtech_dps_get_state(const struct sr_dev_inst *sdi,
-       struct rdtech_dps_state *state);
+       struct rdtech_dps_state *state, enum rdtech_dps_state_context reason);
 SR_PRIV int rdtech_dps_set_state(const struct sr_dev_inst *sdi,
        struct rdtech_dps_state *state);
 
 SR_PRIV int rdtech_dps_get_model_version(struct sr_modbus_dev_inst *modbus,
-       uint16_t *model, uint16_t *version);
+       enum rdtech_dps_model_type model_type,
+       uint16_t *model, uint16_t *version, uint32_t *serno);
+SR_PRIV void rdtech_dps_update_multipliers(const struct sr_dev_inst *sdi);
+SR_PRIV int rdtech_dps_update_range(const struct sr_dev_inst *sdi);
 SR_PRIV int rdtech_dps_seed_receive(const struct sr_dev_inst *sdi);
 SR_PRIV int rdtech_dps_receive_data(int fd, int revents, void *cb_data);