X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Frdtech-dps%2Fprotocol.h;h=1170dbf99baabb7d7d8b158f703c8f3e920fa3b1;hb=87e738be5134dbd48e724075fab88589f3bf7f71;hp=26c196ff43755d1585206c0e60df30f6bcf54e03;hpb=884ae8c02167e9575c84f09c7eee427e0c7353b7;p=libsigrok.git diff --git a/src/hardware/rdtech-dps/protocol.h b/src/hardware/rdtech-dps/protocol.h index 26c196ff..1170dbf9 100644 --- a/src/hardware/rdtech-dps/protocol.h +++ b/src/hardware/rdtech-dps/protocol.h @@ -22,7 +22,7 @@ #ifndef LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H #define LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H -#include +#include "config.h" #include #include @@ -38,10 +38,8 @@ enum rdtech_dps_model_type { MODEL_RD, }; -struct rdtech_dps_model { - enum rdtech_dps_model_type model_type; - unsigned int id; - const char *name; +struct rdtech_dps_range { + const char *range_str; unsigned int max_current; unsigned int max_voltage; unsigned int max_power; @@ -49,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; @@ -59,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. */ @@ -77,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; @@ -84,16 +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, 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);