]> sigrok.org Git - libsigrok.git/blame - src/hardware/rdtech-dps/protocol.h
rdtech-dps: research to reduce serial comm transfer volume again
[libsigrok.git] / src / hardware / rdtech-dps / protocol.h
CommitLineData
0549416e
JC
1/*
2 * This file is part of the libsigrok project.
3 *
4 * Copyright (C) 2018 James Churchill <pelrun@gmail.com>
7c0891b0 5 * Copyright (C) 2019 Frank Stettner <frank-stettner@gmx.net>
d7a4dad8 6 * Copyright (C) 2021 Gerhard Sittig <gerhard.sittig@gmx.net>
0549416e
JC
7 *
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.
12 *
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.
17 *
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/>.
20 */
21
22#ifndef LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H
23#define LIBSIGROK_HARDWARE_RDTECH_DPS_PROTOCOL_H
24
d7a4dad8
GS
25#include <config.h>
26
0549416e
JC
27#include <glib.h>
28#include <libsigrok/libsigrok.h>
d7a4dad8
GS
29#include <stdint.h>
30
0549416e
JC
31#include "libsigrok-internal.h"
32
33#define LOG_PREFIX "rdtech-dps"
34
884ae8c0
GS
35enum rdtech_dps_model_type {
36 MODEL_NONE,
37 MODEL_DPS,
38 MODEL_RD,
39};
40
69b05583 41struct rdtech_dps_model {
884ae8c0 42 enum rdtech_dps_model_type model_type;
69b05583
JC
43 unsigned int id;
44 const char *name;
45 unsigned int max_current;
46 unsigned int max_voltage;
47 unsigned int max_power;
cce6a8a1
FS
48 unsigned int current_digits;
49 unsigned int voltage_digits;
69b05583
JC
50};
51
0549416e 52struct dev_context {
69b05583 53 const struct rdtech_dps_model *model;
cce6a8a1
FS
54 double current_multiplier;
55 double voltage_multiplier;
d7a4dad8
GS
56 struct sr_sw_limits limits;
57 GMutex rw_mutex;
58 gboolean curr_ovp_state;
59 gboolean curr_ocp_state;
60 gboolean curr_cc_state;
61 gboolean curr_out_state;
0549416e
JC
62};
63
d7a4dad8
GS
64/* Container to get and set parameter values. */
65struct rdtech_dps_state {
66 enum rdtech_dps_state_mask {
67 STATE_LOCK = 1 << 0,
68 STATE_OUTPUT_ENABLED = 1 << 1,
69 STATE_REGULATION_CC = 1 << 2,
70 STATE_PROTECT_OVP = 1 << 3,
71 STATE_PROTECT_OCP = 1 << 4,
72 STATE_PROTECT_ENABLED = 1 << 5,
73 STATE_VOLTAGE_TARGET = 1 << 6,
74 STATE_CURRENT_LIMIT = 1 << 7,
75 STATE_OVP_THRESHOLD = 1 << 8,
76 STATE_OCP_THRESHOLD = 1 << 9,
77 STATE_VOLTAGE = 1 << 10,
78 STATE_CURRENT = 1 << 11,
79 STATE_POWER = 1 << 12,
80 } mask;
81 gboolean lock;
82 gboolean output_enabled, regulation_cc;
83 gboolean protect_ovp, protect_ocp, protect_enabled;
84 float voltage_target, current_limit;
85 float ovp_threshold, ocp_threshold;
86 float voltage, current, power;
69b05583
JC
87};
88
7a78fd56
GS
89enum rdtech_dps_state_context {
90 ST_CTX_NONE,
91 ST_CTX_CONFIG,
92 ST_CTX_PRE_ACQ,
93 ST_CTX_IN_ACQ,
94};
d7a4dad8 95SR_PRIV int rdtech_dps_get_state(const struct sr_dev_inst *sdi,
7a78fd56 96 struct rdtech_dps_state *state, enum rdtech_dps_state_context reason);
d7a4dad8
GS
97SR_PRIV int rdtech_dps_set_state(const struct sr_dev_inst *sdi,
98 struct rdtech_dps_state *state);
69b05583
JC
99
100SR_PRIV int rdtech_dps_get_model_version(struct sr_modbus_dev_inst *modbus,
884ae8c0
GS
101 enum rdtech_dps_model_type model_type,
102 uint16_t *model, uint16_t *version, uint32_t *serno);
d7a4dad8 103SR_PRIV int rdtech_dps_seed_receive(const struct sr_dev_inst *sdi);
0549416e
JC
104SR_PRIV int rdtech_dps_receive_data(int fd, int revents, void *cb_data);
105
106#endif