@@ -22,6 +22,7 @@ local armedPrev = false
22
22
local headingHoldPrev = false
23
23
local headFreePrev = false
24
24
local altHoldPrev = false
25
+ local homeResetPrev = false
25
26
local gpsFixPrev = false
26
27
local altNextPlay = 0
27
28
local battNextPlay = 0
@@ -91,18 +92,9 @@ local data = {
91
92
altitude_unit = getTelemetryUnit (" Alt" ),
92
93
distance_unit = getTelemetryUnit (" Dist" ),
93
94
speed_unit = getTelemetryUnit (" GSpd" ),
94
- timerStart = 0 ,
95
- timer = 0 ,
96
- distLastPositive = 0 ,
97
- gpsHome = false ,
98
- gpsLatLon = false ,
99
- gpsFix = false ,
100
- headingRef = - 1 ,
101
95
showMax = false ,
102
96
showDir = true ,
103
- battlow = false ,
104
- showCurr = true ,
105
- fuel = 100
97
+ showCurr = true
106
98
}
107
99
108
100
if data .current_id == - 1 then
@@ -115,11 +107,24 @@ data.battPos2 = data.showCurr and 49 or 41
115
107
data .distRef = data .distance_unit == 10 and 20 or 6
116
108
data .altAlert = data .altitude_unit == 10 and 400 or 123
117
109
110
+ local function reset ()
111
+ data .timerStart = 0
112
+ data .timer = 0
113
+ data .distLastPositive = 0
114
+ data .gpsHome = false
115
+ data .gpsLatLon = false
116
+ data .gpsFix = false
117
+ data .headingRef = - 1
118
+ data .battlow = false
119
+ data .fuel = 100
120
+ end
121
+
118
122
local function flightModes ()
119
123
armed = false
120
124
headFree = false
121
125
headingHold = false
122
126
altHold = false
127
+ homeReset = false
123
128
if data .telemetry then
124
129
local modeA = data .mode / 10000
125
130
local modeB = data .mode / 1000 % 10
@@ -138,6 +143,7 @@ local function flightModes()
138
143
headFree = bit32.band (modeB , 4 ) == 4 and true or false
139
144
headingHold = bit32.band (modeC , 1 ) == 1 and true or false
140
145
altHold = bit32.band (modeC , 2 ) == 2 and true or false
146
+ homeReset = bit32.band (modeA , 2 ) == 2 and true or false
141
147
if bit32.band (modeC , 4 ) == 4 then
142
148
data .modeId = altHold and 8 or 7 -- If also alt hold 3D hold else pos hold
143
149
end
@@ -202,6 +208,9 @@ local function flightModes()
202
208
if headFree ~= headFreePrev then -- Head free status change
203
209
playFile (WAVPATH .. (headFree and " hfact.wav" or " hfoff.wav" ))
204
210
end
211
+ if homeReset and not homeResetPrev then -- Home reset
212
+ playFile (WAVPATH .. " homrst.wav" )
213
+ end
205
214
if data .altitude + 0.5 >= data .altAlert then -- Altitude alert
206
215
if getTime () > altNextPlay then
207
216
playNumber (data .altitude + 0.5 , data .altitude_unit )
@@ -262,15 +271,19 @@ local function flightModes()
262
271
battPercentPlayed = 100
263
272
end
264
273
modeIdPrev = data .modeId
265
- headingHoldPrev = headingHold
274
+ armedPrev = armed
266
275
headFreePrev = headFree
276
+ headingHoldPrev = headingHold
267
277
altHoldPrev = altHold
268
- armedPrev = armed
278
+ homeResetPrev = homeReset
269
279
gpsFixPrev = data .gpsFix
270
280
end
271
281
272
282
local function background ()
273
283
data .rssi = getValue (data .rssi_id )
284
+ if telemFlags == - 1 then
285
+ reset ()
286
+ end
274
287
if data .rssi > 0 or telemFlags < 0 then
275
288
data .telemetry = true
276
289
data .mode = getValue (data .mode_id )
@@ -440,15 +453,7 @@ local function run(event)
440
453
end
441
454
-- Initalize variables on long <Enter>
442
455
if not armed and event == EVT_ENTER_LONG then
443
- data .timerStart = 0
444
- data .timer = 0
445
- data .distLastPositive = 0
446
- data .gpsHome = false
447
- data .gpsLatLon = false
448
- data .gpsFix = false
449
- data .headingRef = - 1
450
- data .battlow = false
451
- data .fuel = 100
456
+ reset ()
452
457
end
453
458
end
454
459
@@ -506,8 +511,8 @@ local function run(event)
506
511
lcd .drawNumber (RXBATT_POS , 1 , data .rxBatt * 10.05 , SMLSIZE + PREC1 + INVERS )
507
512
lcd .drawText (lcd .getLastPos (), 1 , " V" , SMLSIZE + INVERS )
508
513
end
509
-
514
+
510
515
return 1
511
516
end
512
517
513
- return {run = run , background = background }
518
+ return {run = run , background = background }
0 commit comments