Skip to content

Commit 56e2c97

Browse files
committed
Update flight modes to reflect the latest changes in INAV
Updated to bring the flight modes in line with the latest changes. There were some older modes missing, missing modes from INAV 8.0, plus there have been extra modes added to the telemetry in INAV 9. In INAV 9 the 470 sensor is changed to a uint32_t. That is expected in the telemetry anyway. -Added Course Hold, which has been missing for countless versions - Corrected RTH mode magic number when using CRSF - Added Land, Turtle, Loiter, WRTH, and Angle Hold - Modes are in both SmartPort and CRSF telemetry **Completed so far** Tested using the FrSky system (SmartPort). All modes tested except for `Turtle`. **To do** - [ ] Test using CRSF - [ ] Create sound files for the new modes - [ ] Test sound files
1 parent f8d010b commit 56e2c97

File tree

3 files changed

+65
-30
lines changed

3 files changed

+65
-30
lines changed

src/SCRIPTS/TELEMETRY/iNav.lua

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -210,39 +210,55 @@ function inav.background()
210210
data.headFree = false
211211
data.headingHold = false
212212
data.altHold = false
213-
local modeA = data.mode * 0.0001
214-
local modeB = data.mode * 0.001 % 10
215-
local modeC = data.mode * 0.01 % 10
216-
local modeD = data.mode * 0.1 % 10
217-
local modeE = data.mode % 10
218-
if bit32.band(modeD, 2) == 2 then
213+
local modeA = data.mode * 0.000001
214+
local modeB = data.mode * 0.00001
215+
local modeC = data.mode * 0.0001
216+
local modeD = data.mode * 0.001 % 10
217+
local modeE = data.mode * 0.01 % 10
218+
local modeF = data.mode * 0.1 % 10
219+
local modeG = data.mode % 10
220+
if bit32.band(modeF, 2) == 2 then
219221
data.modeId = 2 -- Horizon
220-
elseif bit32.band(modeD, 1) == 1 then
222+
elseif bit32.band(modeF, 1) == 1 then
221223
data.modeId = 3 -- Angle
222224
else
223225
data.modeId = 4 -- Acro
224226
end
225-
data.headFree = bit32.band(modeB, 4) == 4
226-
data.headingHold = bit32.band(modeC, 1) == 1
227-
if bit32.band(modeE, 4) == 4 then
227+
data.headFree = bit32.band(modeD, 4) == 4
228+
data.headingHold = bit32.band(modeE, 1) == 1
229+
if bit32.band(modeG, 4) == 4 then
228230
data.armed = true
229-
data.altHold = (bit32.band(modeC, 2) == 2 or bit32.band(modeC, 4) == 4)
231+
data.altHold = (bit32.band(modeE, 2) == 2 or bit32.band(modeE, 4) == 4)
230232
homeReset = data.satellites >= 4000
231-
data.modeId = bit32.band(modeC, 4) == 4 and 7 or data.modeId -- Pos hold
233+
data.modeId = bit32.band(modeE, 4) == 4 and 7 or data.modeId -- Pos hold
232234
else
233235
preArmMode = data.modeId
234-
data.modeId = (bit32.band(modeE, 2) == 2 or modeE == 0) and (data.throttle > -920 and 12 or 5) or 6 -- Not OK to arm(5) / Throttle warning(12) / Ready to fly(6)
236+
data.modeId = (bit32.band(modeG, 2) == 2 or modeG == 0) and (data.throttle > -920 and 12 or 5) or 6 -- Not OK to arm(5) / Throttle warning(12) / Ready to fly(6)
235237
end
236-
if bit32.band(modeA, 4) == 4 then
238+
if bit32.band(modeC, 4) == 4 then
237239
data.modeId = 11 -- Failsafe
238-
elseif bit32.band(modeB, 1) == 1 then
240+
elseif bit32.band(modeD, 1) == 1 then
239241
data.modeId = 10 -- RTH
240-
elseif bit32.band(modeD, 4) == 4 then
242+
elseif bit32.band(modeF, 4) == 4 then
241243
data.modeId = 9 -- Manual
242-
elseif bit32.band(modeB, 2) == 2 then
244+
elseif bit32.band(modeD, 2) == 2 then
243245
data.modeId = 8 -- Waypoint
244-
elseif bit32.band(modeB, 8) == 8 then
246+
elseif bit32.band(modeD, 8) == 8 and bit32.band(modeE, 2) == 2 then
245247
data.modeId = 13 -- Cruise
248+
elseif bit32.band(modeD, 8) == 8 then
249+
data.modeId = 20 -- Course Hold
250+
elseif bit32.band(modeA, 1) == 1 then
251+
data.modeId = 19 -- WRTH
252+
elseif bit32.band(modeA, 2) == 2 then
253+
data.modeId = 14 -- Angle Hold
254+
elseif bit32.band(modeB, 1) == 1 then
255+
data.modeId = 15 -- Auto land
256+
elseif bit32.band(modeB, 2) == 2 then
257+
data.modeId = 17 -- Turtle mode
258+
elseif bit32.band(modeB, 4) == 4 then
259+
data.modeId = 16 -- Geofence navigation
260+
elseif bit32.band(modeB, 8) == 8 then
261+
data.modeId = 18 -- Loiter
246262
end
247263
end
248264

src/SCRIPTS/TELEMETRY/iNav/crsf.lua

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,19 @@ local function crsf(data)
113113
elseif data.fm == "WP" then
114114
data.mode = 2015
115115
elseif data.fm == "RTH" then
116-
data.mode = 1615
116+
data.mode = 1215
117+
elseif data.fm == "LAND" then
118+
data.mode = 100015
119+
elseif data.fm == "GEO" then
120+
data.mode = 400015
121+
elseif data.fm == "TURT" then
122+
data.mode = 200005
123+
elseif data.fm == "WRTH" then
124+
data.mode = 10000215
125+
elseif data.fm == "LOTR" then
126+
data.mode = 800215
127+
elseif data.fm == "ANGH" then
128+
data.mode = 2000005
117129
elseif data.fm == "!FS!" then
118130
data.mode = 40004
119131
end

src/SCRIPTS/TELEMETRY/iNav/modes.lua

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,25 @@ local HORUS = ...
33
-- Modes: t=text / f=flags for text / w=wave file
44
local modes = {
55
{ t = "! TELEM !", f = 3 },
6-
{ t = "HORIZON", f = 0, w = "hrznmd" },
7-
{ t = " ANGLE", f = 0, w = "anglmd" },
8-
{ t = " ACRO", f = 0, w = "acromd" },
9-
{ t = " NOT OK ", f = 3 },
10-
{ t = " READY", f = 0, w = "ready" },
11-
{ t = "POS HOLD", f = 0, w = "poshld" },
12-
{ t = "WAYPONT", f = 0, w = "waypt" },
13-
{ t = " MANUAL", f = 0, w = "manmd" },
14-
{ t = " RTH ", f = 3, w = "rtl" },
15-
{ t = "! FAIL !", f = 3, w = "fson" },
6+
{ t = " HORIZON ", f = 0, w = "hrznmd" },
7+
{ t = " ANGLE ", f = 0, w = "anglmd" },
8+
{ t = " ACRO ", f = 0, w = "acromd" },
9+
{ t = " NOT OK ", f = 3 }, -- 5
10+
{ t = " READY ", f = 0, w = "ready" },
11+
{ t = "POS HOLD ", f = 0, w = "poshld" },
12+
{ t = " WAYPONT ", f = 0, w = "waypt" },
13+
{ t = " MANUAL ", f = 0, w = "manmd" },
14+
{ t = " RTH ", f = 3, w = "rtl" }, -- 10
15+
{ t = "! FAIL !", f = 3, w = "fson" },
1616
{ t = "! THROT !", f = 3 },
17-
{ t = " CRUISE", f = 0, w = "cruzmd" }
17+
{ t = " CRUISE ", f = 0, w = "cruzmd" },
18+
{ t = "ANGL HOLD", f = 0, w = "aglhld" },
19+
{ t = " LAND ", f = 0, w = "landin" }, -- 15
20+
{ t = " GEO NAV ", f = 0, w = "geonav" },
21+
{ t = " TURTLE ", f = 0, w = "turtle" },
22+
{ t = " LOITER ", f = 0, w = "loiter" },
23+
{ t = " WP RTH ", f = 0, w = "wrth" },
24+
{ t = "CORSE HLD", f = 0, w = "crsh" } -- 20
1825
}
1926

2027
local units = { [0] = "", "V", "A", "mA", "kts", "m/s", "f/s", "kmh", "MPH", "m", HORUS and "ft" or "'" }

0 commit comments

Comments
 (0)