Cosmetics
[opentx.git] / radio / src / myeeprom.h
blob952e94770cec96be1f25c03e4cba3f3b39cc6376
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 _MYEEPROM_H_
22 #define _MYEEPROM_H_
24 #include "datastructs.h"
25 #include "bitfield.h"
27 #define EEPROM_VER 219
28 #define FIRST_CONV_EEPROM_VER 216
30 #define GET_MODULE_PPM_POLARITY(idx) g_model.moduleData[idx].ppm.pulsePol
31 #define GET_TRAINER_PPM_POLARITY() g_model.trainerData.pulsePol
32 #define GET_SBUS_POLARITY(idx) g_model.moduleData[idx].sbus.noninverted
33 #define GET_MODULE_PPM_DELAY(idx) (g_model.moduleData[idx].ppm.delay * 50 + 300)
34 #define GET_TRAINER_PPM_DELAY() (g_model.trainerData.delay * 50 + 300)
36 #if defined(PCBHORUS)
37 #define IS_TRAINER_EXTERNAL_MODULE() false
38 #define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.auxSerialMode==UART_MODE_SBUS_TRAINER)
39 #elif defined(PCBTARANIS)
40 #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerData.mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerData.mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
41 #define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER)
42 #else
43 #define IS_TRAINER_EXTERNAL_MODULE() false
44 #endif
46 #define IS_PLAY_FUNC(func) ((func) >= FUNC_PLAY_SOUND && func <= FUNC_PLAY_VALUE)
48 #if defined(GVARS)
49 #define IS_ADJUST_GV_FUNC(func) ((func) == FUNC_ADJUST_GVAR)
50 #else
51 #define IS_ADJUST_GV_FUNC(func) (0)
52 #endif
54 #if defined(HAPTIC)
55 #define IS_HAPTIC_FUNC(func) ((func) == FUNC_HAPTIC)
56 #else
57 #define IS_HAPTIC_FUNC(func) (0)
58 #endif
60 #define HAS_ENABLE_PARAM(func) ((func) < FUNC_FIRST_WITHOUT_ENABLE)
61 #define HAS_REPEAT_PARAM(func) (IS_PLAY_FUNC(func) || IS_HAPTIC_FUNC(func))
63 #define CFN_EMPTY(p) (!(p)->swtch)
64 #define CFN_SWITCH(p) ((p)->swtch)
65 #define CFN_FUNC(p) ((p)->func)
66 #define CFN_ACTIVE(p) ((p)->active)
67 #define CFN_CH_INDEX(p) ((p)->all.param)
68 #define CFN_GVAR_INDEX(p) ((p)->all.param)
69 #define CFN_TIMER_INDEX(p) ((p)->all.param)
70 #define CFN_PLAY_REPEAT(p) ((p)->active)
71 #define CFN_PLAY_REPEAT_MUL 1
72 #define CFN_PLAY_REPEAT_NOSTART 0xFF
73 #define CFN_GVAR_MODE(p) ((p)->all.mode)
74 #define CFN_PARAM(p) ((p)->all.val)
75 #define CFN_RESET(p) ((p)->active=0, (p)->clear.val1=0, (p)->clear.val2=0)
76 #define CFN_GVAR_CST_MIN -GVAR_MAX
77 #define CFN_GVAR_CST_MAX GVAR_MAX
78 #define MODEL_GVAR_MIN(idx) (CFN_GVAR_CST_MIN + g_model.gvars[idx].min)
79 #define MODEL_GVAR_MAX(idx) (CFN_GVAR_CST_MAX - g_model.gvars[idx].max)
81 #if defined(PCBTARANIS) || defined(PCBHORUS)
82 #define SWITCH_CONFIG(x) (bfGet<swconfig_t>(g_eeGeneral.switchConfig, 2*(x), 2))
83 #define SWITCH_EXISTS(x) (SWITCH_CONFIG(x) != SWITCH_NONE)
84 #define IS_CONFIG_3POS(x) (SWITCH_CONFIG(x) == SWITCH_3POS)
85 #define IS_CONFIG_TOGGLE(x) (SWITCH_CONFIG(x) == SWITCH_TOGGLE)
86 #define SWITCH_WARNING_ALLOWED(x) (SWITCH_EXISTS(x) && !IS_CONFIG_TOGGLE(x))
87 #else
88 #define IS_CONFIG_3POS(x) IS_3POS(x)
89 #define IS_CONFIG_TOGGLE(x) IS_TOGGLE(x)
90 #define switchInfo(x) ((x) >= 3 ? (x)-2 : 0)
91 #define SWITCH_EXISTS(x) true
92 #endif
94 #define ALTERNATE_VIEW 0x10
96 #if defined(PCBHORUS)
97 #include "layout.h"
98 #include "theme.h"
99 #include "topbar.h"
100 #endif
102 #define SWITCHES_DELAY() uint8_t(15+g_eeGeneral.switchesDelay)
103 #define SWITCHES_DELAY_NONE (-15)
104 #define HAPTIC_STRENGTH() (3+g_eeGeneral.hapticStrength)
106 enum CurveRefType {
107 CURVE_REF_DIFF,
108 CURVE_REF_EXPO,
109 CURVE_REF_FUNC,
110 CURVE_REF_CUSTOM
113 #define MIN_EXPO_WEIGHT -100
114 #define EXPO_VALID(ed) ((ed)->mode)
115 #define EXPO_MODE_ENABLE(ed, v) (((v)<0 && ((ed)->mode&1)) || ((v)>=0 && ((ed)->mode&2)))
117 #define limit_min_max_t int16_t
118 #define LIMIT_EXT_PERCENT 150
119 #define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
120 #define PPM_CENTER_MAX 500
121 #define LIMIT_MAX(lim) (GV_IS_GV_VALUE(lim->max, -GV_RANGELARGE, GV_RANGELARGE) ? GET_GVAR_PREC1(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode) : lim->max+1000)
122 #define LIMIT_MIN(lim) (GV_IS_GV_VALUE(lim->min, -GV_RANGELARGE, GV_RANGELARGE) ? GET_GVAR_PREC1(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode) : lim->min-1000)
123 #define LIMIT_OFS(lim) (GV_IS_GV_VALUE(lim->offset, -1000, 1000) ? GET_GVAR_PREC1(lim->offset, -1000, 1000, mixerCurrentFlightMode) : lim->offset)
124 #define LIMIT_MAX_RESX(lim) calc1000toRESX(LIMIT_MAX(lim))
125 #define LIMIT_MIN_RESX(lim) calc1000toRESX(LIMIT_MIN(lim))
126 #define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
128 #define TRIM_OFF (1)
129 #define TRIM_ON (0)
130 #define TRIM_RUD (-1)
131 #define TRIM_ELE (-2)
132 #define TRIM_THR (-3)
133 #define TRIM_AIL (-4)
134 #if defined(PCBHORUS)
135 #define TRIM_T5 (-5)
136 #define TRIM_T6 (-6)
137 #define TRIM_LAST TRIM_T6
138 #else
139 #define TRIM_LAST TRIM_AIL
140 #endif
142 #define MLTPX_ADD 0
143 #define MLTPX_MUL 1
144 #define MLTPX_REP 2
146 #define GV1_SMALL 128
147 #define GV1_LARGE 1024
148 #define GV_RANGE_WEIGHT 500
149 #define GV_RANGE_OFFSET 500
150 #define DELAY_MAX 250 /* 25 seconds */
151 #define SLOW_MAX 250 /* 25 seconds */
153 #define MD_WEIGHT(md) (md->weight)
154 #define MD_WEIGHT_TO_UNION(md, var) var.word = md->weight
155 #define MD_UNION_TO_WEIGHT(var, md) md->weight = var.word
157 #define MD_OFFSET(md) (md->offset)
158 #define MD_OFFSET_TO_UNION(md, var) var.word = md->offset
159 #define MD_UNION_TO_OFFSET(var, md) md->offset = var.word
161 enum LogicalSwitchesFunctions {
162 LS_FUNC_NONE,
163 LS_FUNC_VEQUAL, // v==offset
164 LS_FUNC_VALMOSTEQUAL, // v~=offset
165 LS_FUNC_VPOS, // v>offset
166 LS_FUNC_VNEG, // v<offset
167 LS_FUNC_RANGE,
168 LS_FUNC_APOS, // |v|>offset
169 LS_FUNC_ANEG, // |v|<offset
170 LS_FUNC_AND,
171 LS_FUNC_OR,
172 LS_FUNC_XOR,
173 LS_FUNC_EDGE,
174 LS_FUNC_EQUAL,
175 LS_FUNC_GREATER,
176 LS_FUNC_LESS,
177 LS_FUNC_DIFFEGREATER,
178 LS_FUNC_ADIFFEGREATER,
179 LS_FUNC_TIMER,
180 LS_FUNC_STICKY,
181 LS_FUNC_COUNT,
182 LS_FUNC_MAX = LS_FUNC_COUNT-1
185 #define MAX_LS_DURATION 250 /*25s*/
186 #define MAX_LS_DELAY 250 /*25s*/
187 #define MAX_LS_ANDSW SWSRC_LAST
189 enum TelemetrySensorType
191 TELEM_TYPE_CUSTOM,
192 TELEM_TYPE_CALCULATED
195 enum TelemetrySensorFormula
197 TELEM_FORMULA_ADD,
198 TELEM_FORMULA_AVERAGE,
199 TELEM_FORMULA_MIN,
200 TELEM_FORMULA_MAX,
201 TELEM_FORMULA_MULTIPLY,
202 TELEM_FORMULA_TOTALIZE,
203 TELEM_FORMULA_CELL,
204 TELEM_FORMULA_CONSUMPTION,
205 TELEM_FORMULA_DIST,
206 TELEM_FORMULA_LAST = TELEM_FORMULA_DIST
209 enum SwashType {
210 SWASH_TYPE_NONE,
211 SWASH_TYPE_120,
212 SWASH_TYPE_120X,
213 SWASH_TYPE_140,
214 SWASH_TYPE_90,
215 SWASH_TYPE_MAX = SWASH_TYPE_90
218 #define TRIM_EXTENDED_MAX 500
219 #define TRIM_EXTENDED_MIN (-TRIM_EXTENDED_MAX)
220 #define TRIM_MAX 125
221 #define TRIM_MIN (-TRIM_MAX)
223 #define TRIMS_ARRAY_SIZE 8
224 #define TRIM_MODE_NONE 0x1F // 0b11111
226 #define IS_MANUAL_RESET_TIMER(idx) (g_model.timers[idx].persistent == 2)
228 #if !defined(PCBSKY9X)
229 #define TIMER_COUNTDOWN_START(x) (g_model.timers[x].countdownStart > 0 ? 5 : 10 - g_model.timers[x].countdownStart * 10)
230 #else
231 #define TIMER_COUNTDOWN_START(x) 10
232 #endif
234 #include "pulses/modules_constants.h"
236 enum ThrottleSources {
237 THROTTLE_SOURCE_THR,
238 THROTTLE_SOURCE_FIRST_POT,
239 #if defined(PCBX9E)
240 THROTTLE_SOURCE_F1 = THROTTLE_SOURCE_FIRST_POT,
241 THROTTLE_SOURCE_F2,
242 THROTTLE_SOURCE_F3,
243 THROTTLE_SOURCE_F4,
244 THROTTLE_SOURCE_S1,
245 THROTTLE_SOURCE_S2,
246 THROTTLE_SOURCE_LS,
247 THROTTLE_SOURCE_RS,
248 #elif defined(PCBTARANIS)
249 THROTTLE_SOURCE_S1 = THROTTLE_SOURCE_FIRST_POT,
250 THROTTLE_SOURCE_S2,
251 THROTTLE_SOURCE_S3,
252 THROTTLE_SOURCE_LS,
253 THROTTLE_SOURCE_RS,
254 #else
255 THROTTLE_SOURCE_P1 = THROTTLE_SOURCE_FIRST_POT,
256 THROTTLE_SOURCE_P2,
257 THROTTLE_SOURCE_P3,
258 #endif
259 THROTTLE_SOURCE_CH1,
262 enum DisplayTrims
264 DISPLAY_TRIMS_NEVER,
265 DISPLAY_TRIMS_CHANGE,
266 DISPLAY_TRIMS_ALWAYS
269 extern RadioData g_eeGeneral;
270 extern ModelData g_model;
272 PACK(union u_int8int16_t {
273 struct {
274 int8_t lo;
275 uint8_t hi;
276 } bytes_t;
277 int16_t word;
280 constexpr uint8_t EE_GENERAL = 0x01;
281 constexpr uint8_t EE_MODEL = 0x02;
283 #endif // _MYEEPROM_H_