-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathEEPROM.cpp
More file actions
375 lines (300 loc) · 11.2 KB
/
EEPROM.cpp
File metadata and controls
375 lines (300 loc) · 11.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
#include <avr/eeprom.h>
#include "Arduino.h"
#include "EEPROM.h"
#include "types.h"
#include "KV_Team_OSD.h"
uint8_t EEPROMClass::read(int address)
{
return eeprom_read_byte((unsigned char *) address);
}
void EEPROMClass::write(int address, uint8_t value)
{
eeprom_write_byte((unsigned char *) address, value);
}
EEPROMClass EEPROM;
// For Settings Defaults
static const uint8_t EEPROM_DEFAULT[EEPROM_SETTINGS] = {
1, // used for check 0
0, // S_RSSIMIN 1
255, // S_RSSIMAX 2
60, // S_RSSI_ALARM 3
1, // S_MWRSSI 4
0, // S_PWMRSSI 5
8, // S_PWMRSSIDIVIDER 6 // PWM Freq 500Hz=8, 1KHz=4 (Divider to avoid value >255)
105, // S_VOLTAGEMIN 7
3, // S_BATCELLS 8
100, // S_DIVIDERRATIO 9
1, // S_MAINVOLTAGE_VBAT 10
100, // S_VIDDIVIDERRATIO 11
0, // S_VIDVOLTAGE_VBAT 12
//90, // S_TEMPERATUREMAX 13 // Do not remove yet
1, // S_BOARDTYPE 14
1, // S_DISPLAYGPS 15
1, // S_COORDINATES 16
0, // S_HEADING360 17
0, // S_UNITSYSTEM 18
1, // S_VIDEOSIGNALTYPE 19
0, // S_RESETSTATISTICS 20
1, // S_ENABLEADC 21
5, // S_BLINKINGHZ 22 // 10=1Hz, 9=1.1Hz, 8=1,25Hz, 7=1.4Hz, 6=1.6Hz, 5=2Hz, 4=2,5Hz, 3=3,3Hz, 2=5Hz, 1=10Hz
0, // S_MWAMPERAGE 23
40, // S_CURRSENSSENSITIVITY 24 // May vary from 17 to 40mV/A (Sensor type)
2, // S_CURRSENSOFFSET_H 25 // offset(H/L) =0 for unidir sensors or =512 for bidirectional sensors, may be changed only of few units.
0, // S_CURRSENSOFFSET_L 26 // 2H+0L=512
2, // S_CLIMB_RATE_ALARM 27
5, // S_VOLUME_DIST_MAX 28 // Flying Volume Warning (Distance value in meters x100) by default is 500m
25, // S_VOLUME_ALT_MAX 29 // " " " (Altitude Max " " " x2 ) " " " 50m
0, // S_VOLUE_ALT_MIN 30 // " " " (Altitude Min " " " ___ " " " 0m
105, // S_VIDVOLTAGEMIN 31
30, // S_PITCH_WARNING 32 // Warning message at given angle in degrees positive and negative (default 30°)
0, //S_CALLSIGN 32 // TEXT CONFIGURATION ONLY (On by default using L_CALLSIGNPOSITIONDSPL)
0, // S_CS0, 33 // 10 callsign char locations
0, // S_CS1,
0, // S_CS2,
0, // S_CS3,
0, // S_CS4,
0, // S_CS5,
0, // S_CS6,
0, // S_CS7,
0, // S_CS8,
0, // S_CS9, 42
};
// PAL item position Defaults
static const uint8_t EEPROM_PAL_DEFAULT[EEPROM_ITEM_LOCATION-EEPROM_SETTINGS] = {
// ROW= Row position on screen (255= no action)
// COL= Column position on screen (255= no action)
// DSPL= Display item on screen
2, // L_GPS_NUMSATPOSITIONROW LINE02+6
18, // L_GPS_NUMSATPOSITIONCOL
1, // L_GPS_NUMSATPOSITIONDSPL
6, // L_GPS_DIRECTIONTOHOMEPOSROW LINE03+14
2, // L_GPS_DIRECTIONTOHOMEPOSCOL
1, // L_GPS_DIRECTIONTOHOMEPOSDSPL
10, // L_GPS_DISTANCETOHOMEPOSROW LINE02+24
2, // L_GPS_DISTANCETOHOMEPOSCOL
1, // L_GPS_DISTANCETOHOMEPOSDSPL
10, // L_SPEEDPOSITIONROW LINE03+24
23, // L_SPEEDPOSITIONCOL
1, // L_SPEEDPOSITIONDSPL
9, // L_GPS_ANGLETOHOMEPOSROW LINE04+12
2, // L_GPS_ANGLETOHOMEPOSCOL
0, // L_GPS_ANGLETOHOMEPOSDSPL
/*13, // L_MW_GPS_ALTPOSITIONROW LINE04+24 Do not remove yet
2, // L_MW_GPS_ALTPOSITIONCOL
0, // L_MW_GPS_ALTPOSITIONDSPL*/
2, // L_SENSORPOSITIONROW LINE03+2
24, // L_SENSORPOSITIONCOL
1, // L_SENSORPOSITIONDSPL
2, // L_MODEPOSITIONROW LINE05+2
8, // L_MODEPOSITIONCOL
1, // L_MODEPOSITIONDSPL
3, // L_MW_HEADINGPOSITIONROW LINE02+19
2, // L_MW_HEADINGPOSITIONCOL
1, // L_MW_HEADINGPOSITIONDSPL
2, // L_MW_HEADINGGRAPHPOSROW LINE02+10
2, // L_MW_HEADINGGRAPHPOSCOL
1, // L_MW_HEADINGGRAPHPOSDSPL
/*12, // L_TEMPERATUREPOSROW LINE11+2 // Do not remove yet
2, // L_TEMPERATUREPOSCOL
0, // L_TEMPERATUREPOSDSPL*/
6, // L_MW_ALTITUDEPOSITIONROW LINE08+2
23, // L_MW_ALTITUDEPOSITIONCOL
1, // L_MW_ALTITUDEPOSITIONDSPL
8, // L_CLIMBRATEPOSITIONROW LINE08+24
5, // L_CLIMBRATEPOSITIONCOL
1, // L_CLIMBRATEPOSITIONDSPL
6, // L_HORIZONPOSITIONROW LINE06+8
8, // L_HORIZONPOSITIONCOL
1, // L_HORIZONPOSITIONDSPL
255, // L_HORIZONSIDEREFROW
255, // L_HORIZONSIDEREFCOL
1, // L_HORIZONSIDEREFDSPL
255, // L_HORIZONCENTERREFROW
255, // L_HORIZONCENTERREFCOL
1, // L_HORIZONCENTERREFDSPL
7, // L_CURRENTTHROTTLEPOSITIONROW LINE14+22
20, // L_CURRENTTHROTTLEPOSITIONCOL
1, // L_CURRENTTHROTTLEPOSITIONDSPL
15, // L_FLYTIMEPOSITIONROW LINE15+22
14, // L_FLYTIMEPOSITIONCOL
1, // L_FLYTIMEPOSITIONDSPL
15, // L_ONTIMEPOSITIONROW LINE15+22
14, // L_ONTIMEPOSITIONCOL
1, // L_ONTIMEPOSITIONDSPL
3, // L_MOTORARMEDPOSITIONROW LINE14+11
24, // L_MOTORARMEDPOSITIONCOL
1, // L_MOTORARMEDPOSITIONDSPL
14, // L_MW_GPS_LATPOSITIONROW LINE12+2
2, // L_MW_GPS_LATPOSITIONCOL
1, // L_MW_GPS_LATPOSITIONDSPL
15, // L_MW_GPS_LONPOSITIONROW LINE12+15
2, // L_MW_GPS_LONPOSITIONCOL
1, // L_MW_GPS_LONPOSITIONDSPL
2, // L_RSSIPOSITIONROW LINE14+2
12, // L_RSSIPOSITIONCOL
1, // L_RSSIPOSITIONDSPL
15, // L_VOLTAGEPOSITIONROW LINE15+3
23, // L_VOLTAGEPOSITIONCOL
1, // L_VOLTAGEPOSITIONDSPL
255, // L_MAINBATLEVEVOLUTIONROW,
255, // L_MAINBATLEVEVOLUTIONCOL,
1, // L_MAINBATLEVEVOLUTIONDSPL,
13, // L_VIDVOLTAGEPOSITIONROW LINE13+3
23, // L_VIDVOLTAGEPOSITIONCOL
0, // L_VIDVOLTAGEPOSITIONDSPL
14, // L_AMPERAGEPOSITIONROW LINE15+10
23, // L_AMPERAGEPOSITIONCOL
1, // L_AMPERAGEPOSITIONDSPL
14, // L_PMETERSUMPOSITIONROW LINE15+16
14, // L_PMETERSUMPOSITIONCOL
1, // L_PMETERSUMPOSITIONDSPL
13, // L_CALLSIGNPOSITIONROW LINE14+10
10, // L_CALLSIGNPOSITIONCOL
1, // L_CALLSIGNPOSITIONDSPL
};
// NTSC item position Defaults
uint8_t EEPROM_NTSC_DEFAULT[EEPROM_ITEM_LOCATION-EEPROM_SETTINGS] = {
// ROW= Row position on screen (255= no action)
// COL= Column position on screen (255= no action)
// DSPL= Display item on screen
2, // L_GPS_NUMSATPOSITIONROW LINE02+6
18, // L_GPS_NUMSATPOSITIONCOL
1, // L_GPS_NUMSATPOSITIONDSPL
6, // L_GPS_DIRECTIONTOHOMEPOSROW LINE03+14
2, // L_GPS_DIRECTIONTOHOMEPOSCOL
1, // L_GPS_DIRECTIONTOHOMEPOSDSPL
10, // L_GPS_DISTANCETOHOMEPOSROW LINE02+24
2, // L_GPS_DISTANCETOHOMEPOSCOL
1, // L_GPS_DISTANCETOHOMEPOSDSPL
10, // L_SPEEDPOSITIONROW LINE03+24
23, // L_SPEEDPOSITIONCOL
1, // L_SPEEDPOSITIONDSPL
9, // L_GPS_ANGLETOHOMEPOSROW LINE04+12
2, // L_GPS_ANGLETOHOMEPOSCOL
0, // L_GPS_ANGLETOHOMEPOSDSPL
/*11, // L_MW_GPS_ALTPOSITIONROW LINE04+24 Do not remove yet
2, // L_MW_GPS_ALTPOSITIONCOL
0, // L_MW_GPS_ALTPOSITIONDSPL*/
2, // L_SENSORPOSITIONROW LINE03+2
24, // L_SENSORPOSITIONCOL
1, // L_SENSORPOSITIONDSPL
2, // L_MODEPOSITIONROW LINE05+2
8, // L_MODEPOSITIONCOL
1, // L_MODEPOSITIONDSPL
3, // L_MW_HEADINGPOSITIONROW LINE02+19
2, // L_MW_HEADINGPOSITIONCOL
1, // L_MW_HEADINGPOSITIONDSPL
2, // L_MW_HEADINGGRAPHPOSROW LINE02+10
2, // L_MW_HEADINGGRAPHPOSCOL
1, // L_MW_HEADINGGRAPHPOSDSPL
/*12, // L_TEMPERATUREPOSROW LINE11+2 // Do not remove yet
2, // L_TEMPERATUREPOSCOL
0, // L_TEMPERATUREPOSDSPL*/
6, // L_MW_ALTITUDEPOSITIONROW LINE08+2
23, // L_MW_ALTITUDEPOSITIONCOL
1, // L_MW_ALTITUDEPOSITIONDSPL
8, // L_CLIMBRATEPOSITIONROW LINE08+24
5, // L_CLIMBRATEPOSITIONCOL
1, // L_CLIMBRATEPOSITIONDSPL
6, // L_HORIZONPOSITIONROW LINE06+8
8, // L_HORIZONPOSITIONCOL
1, // L_HORIZONPOSITIONDSPL
255, // L_HORIZONSIDEREFROW
255, // L_HORIZONSIDEREFCOL
1, // L_HORIZONSIDEREFDSPL
255, // L_HORIZONCENTERREFROW
255, // L_HORIZONCENTERREFCOL
1, // L_HORIZONCENTERREFDSPL
7, // L_CURRENTTHROTTLEPOSITIONROW LINE14+22
20, // L_CURRENTTHROTTLEPOSITIONCOL
1, // L_CURRENTTHROTTLEPOSITIONDSPL
13, // L_FLYTIMEPOSITIONROW LINE15+22
14, // L_FLYTIMEPOSITIONCOL
1, // L_FLYTIMEPOSITIONDSPL
13, // L_ONTIMEPOSITIONROW LINE15+22
14, // L_ONTIMEPOSITIONCOL
1, // L_ONTIMEPOSITIONDSPL
3, // L_MOTORARMEDPOSITIONROW LINE14+11
24, // L_MOTORARMEDPOSITIONCOL
1, // L_MOTORARMEDPOSITIONDSPL
12, // L_MW_GPS_LATPOSITIONROW LINE12+2
2, // L_MW_GPS_LATPOSITIONCOL
1, // L_MW_GPS_LATPOSITIONDSPL
13, // L_MW_GPS_LONPOSITIONROW LINE12+15
2, // L_MW_GPS_LONPOSITIONCOL
1, // L_MW_GPS_LONPOSITIONDSPL
2, // L_RSSIPOSITIONROW LINE14+2
12, // L_RSSIPOSITIONCOL
1, // L_RSSIPOSITIONDSPL
13, // L_VOLTAGEPOSITIONROW LINE15+3
23, // L_VOLTAGEPOSITIONCOL
1, // L_VOLTAGEPOSITIONDSPL
255, // L_MAINBATLEVEVOLUTIONROW
255, // L_MAINBATLEVEVOLUTIONCOL
1, // L_MAINBATLEVEVOLUTIONDSPL
11, // L_VIDVOLTAGEPOSITIONROW LINE13+3
23, // L_VIDVOLTAGEPOSITIONCOL
0, // L_VIDVOLTAGEPOSITIONDSPL
12, // L_AMPERAGEPOSITIONROW LINE15+10
23, // L_AMPERAGEPOSITIONCOL
1, // L_AMPERAGEPOSITIONDSPL
12, // L_PMETERSUMPOSITIONROW LINE15+16
14, // L_PMETERSUMPOSITIONCOL
1, // L_PMETERSUMPOSITIONDSPL
11, // L_CALLSIGNPOSITIONROW LINE14+10
10, // L_CALLSIGNPOSITIONCOL
1, // L_CALLSIGNPOSITIONDSPL
};
void checkEEPROM(void)
{
// For H/W Settings
uint8_t EEPROM_Loaded = EEPROM.read(0);
if (!EEPROM_Loaded){
for(uint8_t en=0;en<EEPROM_SETTINGS;en++){
if (EEPROM.read(en) != EEPROM_DEFAULT[en]) EEPROM.write(en,EEPROM_DEFAULT[en]);
}
// For items on screen.
// First run, the default will be NTSC (show all data lines with NTSC systems that has only 13 lines)
// In OSD menu' it's possible a quick default setup for PAL or NTSC
for(uint16_t en=0;en<EEPROM_ITEM_LOCATION-EEPROM_SETTINGS;en++) {
if (EEPROM.read(en+EEPROM_SETTINGS+1) != EEPROM_NTSC_DEFAULT[en]) EEPROM.write(en+EEPROM_SETTINGS+1,EEPROM_NTSC_DEFAULT[en]);
}
}
}
void writeEEPROM(void)
{
// For Settings
for(uint16_t en=0;en<EEPROM_SETTINGS;en++){
if (EEPROM.read(en) != Settings[en]) EEPROM.write(en,Settings[en]);
}
// For Position of items on screen
for(uint16_t en=0;en<EEPROM_ITEM_LOCATION-EEPROM_SETTINGS;en++){
if (EEPROM.read(en+EEPROM_SETTINGS+1) != Settings[en+EEPROM_SETTINGS+1]) EEPROM.write(en+EEPROM_SETTINGS+1,Settings[en+EEPROM_SETTINGS+1]);
}
}
void readEEPROM(void)
{
// For Settings
for(uint16_t en=0;en<EEPROM_SETTINGS;en++){
Settings[en] = EEPROM.read(en);
}
// For Position of items on screen
for(uint16_t en=0;en<EEPROM_ITEM_LOCATION-EEPROM_SETTINGS;en++){
Settings[en+EEPROM_SETTINGS+1] = EEPROM.read(en+EEPROM_SETTINGS+1);
}
}
// back to default setting & position for PAL/NTSC
void WriteScreenLayoutDefault(void)
{
if (Settings[S_VIDEOSIGNALTYPE]){ // PAL
for(uint16_t en=0;en<EEPROM_ITEM_LOCATION-EEPROM_SETTINGS;en++) {
if (EEPROM.read(en+EEPROM_SETTINGS+1) != EEPROM_PAL_DEFAULT[en]) EEPROM.write(en+EEPROM_SETTINGS+1,EEPROM_PAL_DEFAULT[en]);
}
}
else {
for(uint16_t en=0;en<EEPROM_ITEM_LOCATION-EEPROM_SETTINGS;en++) {
if (EEPROM.read(en+EEPROM_SETTINGS+1) != EEPROM_NTSC_DEFAULT[en]) EEPROM.write(en+EEPROM_SETTINGS+1,EEPROM_NTSC_DEFAULT[en]);
}
}
readEEPROM(); // Refresh with default data
}