2 * This file is part of the libsigrok project.
4 * Copyright (C) 2018 James Churchill <pelrun@gmail.com>
5 * Copyright (C) 2019 Frank Stettner <frank-stettner@gmx.net>
6 * Copyright (C) 2021 Gerhard Sittig <gerhard.sittig@gmx.net>
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #ifndef LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H
23 #define LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H
28 #include <libsigrok/libsigrok.h>
31 #include "libsigrok-internal.h"
33 #define LOG_PREFIX "rdtech-dps"
35 struct rdtech_dps_model {
38 unsigned int max_current;
39 unsigned int max_voltage;
40 unsigned int max_power;
41 unsigned int current_digits;
42 unsigned int voltage_digits;
46 const struct rdtech_dps_model *model;
47 double current_multiplier;
48 double voltage_multiplier;
49 struct sr_sw_limits limits;
51 gboolean curr_ovp_state;
52 gboolean curr_ocp_state;
53 gboolean curr_cc_state;
54 gboolean curr_out_state;
57 /* Container to get and set parameter values. */
58 struct rdtech_dps_state {
59 enum rdtech_dps_state_mask {
61 STATE_OUTPUT_ENABLED = 1 << 1,
62 STATE_REGULATION_CC = 1 << 2,
63 STATE_PROTECT_OVP = 1 << 3,
64 STATE_PROTECT_OCP = 1 << 4,
65 STATE_PROTECT_ENABLED = 1 << 5,
66 STATE_VOLTAGE_TARGET = 1 << 6,
67 STATE_CURRENT_LIMIT = 1 << 7,
68 STATE_OVP_THRESHOLD = 1 << 8,
69 STATE_OCP_THRESHOLD = 1 << 9,
70 STATE_VOLTAGE = 1 << 10,
71 STATE_CURRENT = 1 << 11,
72 STATE_POWER = 1 << 12,
75 gboolean output_enabled, regulation_cc;
76 gboolean protect_ovp, protect_ocp, protect_enabled;
77 float voltage_target, current_limit;
78 float ovp_threshold, ocp_threshold;
79 float voltage, current, power;
82 SR_PRIV int rdtech_dps_get_state(const struct sr_dev_inst *sdi,
83 struct rdtech_dps_state *state);
84 SR_PRIV int rdtech_dps_set_state(const struct sr_dev_inst *sdi,
85 struct rdtech_dps_state *state);
87 SR_PRIV int rdtech_dps_get_model_version(struct sr_modbus_dev_inst *modbus,
88 uint16_t *model, uint16_t *version);
89 SR_PRIV int rdtech_dps_seed_receive(const struct sr_dev_inst *sdi);
90 SR_PRIV int rdtech_dps_receive_data(int fd, int revents, void *cb_data);