Companion: Russian UI (#7180)
[opentx.git] / companion / src / firmwares / rawsource.h
blobe9273d3991dc8b73581da2fd1db3729974cc8aa3
1 /*
2 * Copyright (C) OpenTX
4 * Based on code named
5 * th9x - http://code.google.com/p/th9x
6 * er9x - http://code.google.com/p/er9x
7 * gruvin9x - http://code.google.com/p/gruvin9x
9 * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
21 #ifndef RAWSOURCE_H
22 #define RAWSOURCE_H
24 #include "boards.h"
25 #include "constants.h"
27 #include <QtCore>
29 class Firmware;
30 class ModelData;
31 class GeneralSettings;
32 class RadioDataConversionState;
34 enum Switches {
35 SWITCH_NONE,
37 SWITCH_THR = SWITCH_NONE+1,
38 SWITCH_RUD,
39 SWITCH_ELE,
40 SWITCH_ID0,
41 SWITCH_ID1,
42 SWITCH_ID2,
43 SWITCH_AIL,
44 SWITCH_GEA,
45 SWITCH_TRN,
47 SWITCH_SA0 = SWITCH_NONE+1,
48 SWITCH_SA1,
49 SWITCH_SA2,
50 SWITCH_SB0,
51 SWITCH_SB1,
52 SWITCH_SB2,
53 SWITCH_SC0,
54 SWITCH_SC1,
55 SWITCH_SC2,
56 SWITCH_SD0,
57 SWITCH_SD1,
58 SWITCH_SD2,
59 SWITCH_SE0,
60 SWITCH_SE1,
61 SWITCH_SE2,
62 SWITCH_SF0,
63 SWITCH_SF1,
64 SWITCH_SG0,
65 SWITCH_SG1,
66 SWITCH_SG2,
67 SWITCH_SH0,
68 SWITCH_SH2,
69 SWITCH_SI0,
70 SWITCH_SI2,
71 SWITCH_SJ0,
72 SWITCH_SJ2,
73 SWITCH_SK0,
74 SWITCH_SK2,
77 enum TimerModes {
78 TMRMODE_NONE,
79 TMRMODE_ABS,
80 TMRMODE_THR,
81 TMRMODE_THR_REL,
82 TMRMODE_THR_TRG,
83 TMRMODE_FIRST_SWITCH
86 enum FailsafeModes {
87 FAILSAFE_NOT_SET,
88 FAILSAFE_HOLD,
89 FAILSAFE_CUSTOM,
90 FAILSAFE_NOPULSES,
91 FAILSAFE_RECEIVER,
92 FAILSAFE_LAST = FAILSAFE_RECEIVER
95 enum HeliSwashTypes {
96 HELI_SWASH_TYPE_NONE=0,
97 HELI_SWASH_TYPE_120,
98 HELI_SWASH_TYPE_120X,
99 HELI_SWASH_TYPE_140,
100 HELI_SWASH_TYPE_90
103 enum TelemetrySource {
104 TELEMETRY_SOURCE_TX_BATT,
105 TELEMETRY_SOURCE_TX_TIME,
106 TELEMETRY_SOURCE_TIMER1,
107 TELEMETRY_SOURCE_TIMER2,
108 TELEMETRY_SOURCE_TIMER3,
109 TELEMETRY_SOURCE_RAS,
110 TELEMETRY_SOURCE_RSSI_TX,
111 TELEMETRY_SOURCE_RSSI_RX,
112 TELEMETRY_SOURCE_A1,
113 TELEMETRY_SOURCE_A2,
114 TELEMETRY_SOURCE_A3,
115 TELEMETRY_SOURCE_A4,
116 TELEMETRY_SOURCE_ALT,
117 TELEMETRY_SOURCE_RPM,
118 TELEMETRY_SOURCE_FUEL,
119 TELEMETRY_SOURCE_T1,
120 TELEMETRY_SOURCE_T2,
121 TELEMETRY_SOURCE_SPEED,
122 TELEMETRY_SOURCE_DIST,
123 TELEMETRY_SOURCE_GPS_ALT,
124 TELEMETRY_SOURCE_CELL,
125 TELEMETRY_SOURCE_CELLS_SUM,
126 TELEMETRY_SOURCE_VFAS,
127 TELEMETRY_SOURCE_CURRENT,
128 TELEMETRY_SOURCE_CONSUMPTION,
129 TELEMETRY_SOURCE_POWER,
130 TELEMETRY_SOURCE_ACCX,
131 TELEMETRY_SOURCE_ACCY,
132 TELEMETRY_SOURCE_ACCZ,
133 TELEMETRY_SOURCE_HDG,
134 TELEMETRY_SOURCE_VERTICAL_SPEED,
135 TELEMETRY_SOURCE_ASPEED,
136 TELEMETRY_SOURCE_DTE,
137 TELEMETRY_SOURCE_A1_MIN,
138 TELEMETRY_SOURCE_A2_MIN,
139 TELEMETRY_SOURCE_A3_MIN,
140 TELEMETRY_SOURCE_A4_MIN,
141 TELEMETRY_SOURCE_ALT_MIN,
142 TELEMETRY_SOURCE_ALT_MAX,
143 TELEMETRY_SOURCE_RPM_MAX,
144 TELEMETRY_SOURCE_T1_MAX,
145 TELEMETRY_SOURCE_T2_MAX,
146 TELEMETRY_SOURCE_SPEED_MAX,
147 TELEMETRY_SOURCE_DIST_MAX,
148 TELEMETRY_SOURCE_ASPEED_MAX,
149 TELEMETRY_SOURCE_CELL_MIN,
150 TELEMETRY_SOURCE_CELLS_MIN,
151 TELEMETRY_SOURCE_VFAS_MIN,
152 TELEMETRY_SOURCE_CURRENT_MAX,
153 TELEMETRY_SOURCE_POWER_MAX,
154 TELEMETRY_SOURCE_ACC,
155 TELEMETRY_SOURCE_GPS_TIME,
156 TELEMETRY_SOURCES_STATUS_COUNT = TELEMETRY_SOURCE_GPS_TIME+1,
157 TELEMETRY_SOURCES_DISPLAY_COUNT = TELEMETRY_SOURCE_POWER_MAX+1,
158 TELEMETRY_SOURCES_COUNT = TELEMETRY_SOURCE_POWER_MAX+1,
159 TELEMETRY_SOURCE_RESERVE = -1
162 #define TM_HASTELEMETRY 0x01
163 #define TM_HASOFFSET 0x02
164 #define TM_HASWSHH 0x04
166 enum RawSourceType {
167 SOURCE_TYPE_NONE,
168 SOURCE_TYPE_VIRTUAL_INPUT,
169 SOURCE_TYPE_LUA_OUTPUT,
170 SOURCE_TYPE_STICK, // and POTS
171 SOURCE_TYPE_ROTARY_ENCODER,
172 SOURCE_TYPE_TRIM,
173 SOURCE_TYPE_MAX,
174 SOURCE_TYPE_SWITCH,
175 SOURCE_TYPE_CUSTOM_SWITCH,
176 SOURCE_TYPE_CYC,
177 SOURCE_TYPE_PPM,
178 SOURCE_TYPE_CH,
179 SOURCE_TYPE_GVAR,
180 SOURCE_TYPE_SPECIAL,
181 SOURCE_TYPE_TELEMETRY,
182 MAX_SOURCE_TYPE
185 class RawSourceRange
187 Q_DECLARE_TR_FUNCTIONS(RawSourceRange)
189 public:
190 RawSourceRange():
191 decimals(0),
192 min(0.0),
193 max(0.0),
194 step(1.0),
195 offset(0.0)
199 float getValue(int value);
201 int decimals;
202 double min;
203 double max;
204 double step;
205 double offset;
206 QString unit;
209 #define RANGE_DELTA_FUNCTION 1
210 #define RANGE_ABS_FUNCTION 2
212 class RawSource {
213 Q_DECLARE_TR_FUNCTIONS(RawSource)
215 public:
216 enum SourceGroups {
217 NoneGroup = 0x001,
218 SourcesGroup = 0x002,
219 TrimsGroup = 0x004,
220 SwitchesGroup = 0x008,
221 GVarsGroup = 0x010,
222 TelemGroup = 0x020,
223 InputsGroup = 0x040,
224 ScriptsGroup = 0x080,
226 InputSourceGroups = NoneGroup | SourcesGroup | TrimsGroup | SwitchesGroup | InputsGroup,
227 AllSourceGroups = InputSourceGroups | GVarsGroup | TelemGroup | ScriptsGroup
230 RawSource():
231 type(SOURCE_TYPE_NONE),
232 index(0)
236 explicit RawSource(int value):
237 type(RawSourceType(abs(value)/65536)),
238 index(value >= 0 ? abs(value)%65536 : -(abs(value)%65536))
242 RawSource(RawSourceType type, int index=0):
243 type(type),
244 index(index)
248 inline const int toValue() const
250 return index >= 0 ? (type * 65536 + index) : -(type * 65536 - index);
253 RawSource convert(RadioDataConversionState & cstate);
254 QString toString(const ModelData * model = NULL, const GeneralSettings * const generalSettings = NULL, Board::Type board = Board::BOARD_UNKNOWN) const;
255 RawSourceRange getRange(const ModelData * model, const GeneralSettings & settings, unsigned int flags=0) const;
256 bool isStick(int * potsIndex = NULL, Board::Type board = Board::BOARD_UNKNOWN) const;
257 bool isPot(int * potsIndex = NULL, Board::Type board = Board::BOARD_UNKNOWN) const;
258 bool isSlider(int * sliderIndex = NULL, Board::Type board = Board::BOARD_UNKNOWN) const;
259 bool isTimeBased(Board::Type board = Board::BOARD_UNKNOWN) const;
260 bool isAvailable(const ModelData * const model = NULL, const GeneralSettings * const gs = NULL, Board::Type board = Board::BOARD_UNKNOWN) const;
262 bool operator == ( const RawSource & other) const {
263 return (this->type == other.type) && (this->index == other.index);
266 bool operator != ( const RawSource & other) const {
267 return (this->type != other.type) || (this->index != other.index);
270 RawSourceType type;
271 int index;
274 #endif // RAWSOURCE_H