diff --git a/src/SCRIPTS/TELEMETRY/iNav.lua b/src/SCRIPTS/TELEMETRY/iNav.lua index 3b6a925..b20cc4b 100644 --- a/src/SCRIPTS/TELEMETRY/iNav.lua +++ b/src/SCRIPTS/TELEMETRY/iNav.lua @@ -210,39 +210,55 @@ function inav.background() data.headFree = false data.headingHold = false data.altHold = false - local modeA = data.mode * 0.0001 - local modeB = data.mode * 0.001 % 10 - local modeC = data.mode * 0.01 % 10 - local modeD = data.mode * 0.1 % 10 - local modeE = data.mode % 10 - if bit32.band(modeD, 2) == 2 then + local modeA = data.mode * 0.000001 % 10 + local modeB = data.mode * 0.00001 % 10 + local modeC = data.mode * 0.0001 % 10 + local modeD = data.mode * 0.001 % 10 + local modeE = data.mode * 0.01 % 10 + local modeF = data.mode * 0.1 % 10 + local modeG = data.mode % 10 + if bit32.band(modeF, 2) == 2 then data.modeId = 2 -- Horizon - elseif bit32.band(modeD, 1) == 1 then + elseif bit32.band(modeF, 1) == 1 then data.modeId = 3 -- Angle else data.modeId = 4 -- Acro end - data.headFree = bit32.band(modeB, 4) == 4 - data.headingHold = bit32.band(modeC, 1) == 1 - if bit32.band(modeE, 4) == 4 then + data.headFree = bit32.band(modeD, 4) == 4 + data.headingHold = bit32.band(modeE, 1) == 1 + if bit32.band(modeG, 4) == 4 then data.armed = true - data.altHold = (bit32.band(modeC, 2) == 2 or bit32.band(modeC, 4) == 4) + data.altHold = (bit32.band(modeE, 2) == 2 or bit32.band(modeE, 4) == 4) homeReset = data.satellites >= 4000 - data.modeId = bit32.band(modeC, 4) == 4 and 7 or data.modeId -- Pos hold + data.modeId = bit32.band(modeE, 4) == 4 and 7 or data.modeId -- Pos hold else preArmMode = data.modeId - 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) + 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) end - if bit32.band(modeA, 4) == 4 then + if bit32.band(modeC, 4) == 4 then data.modeId = 11 -- Failsafe - elseif bit32.band(modeB, 1) == 1 then + elseif bit32.band(modeD, 1) == 1 then data.modeId = 10 -- RTH - elseif bit32.band(modeD, 4) == 4 then + elseif bit32.band(modeF, 4) == 4 then data.modeId = 9 -- Manual - elseif bit32.band(modeB, 2) == 2 then + elseif bit32.band(modeD, 2) == 2 then data.modeId = 8 -- Waypoint - elseif bit32.band(modeB, 8) == 8 then + elseif bit32.band(modeD, 8) == 8 and bit32.band(modeE, 2) == 2 then data.modeId = 13 -- Cruise + elseif bit32.band(modeD, 8) == 8 then + data.modeId = 20 -- Course Hold + elseif bit32.band(modeA, 1) == 1 then + data.modeId = 19 -- WRTH + elseif bit32.band(modeA, 2) == 2 then + data.modeId = 14 -- Angle Hold + elseif bit32.band(modeB, 1) == 1 then + data.modeId = 15 -- Auto land + elseif bit32.band(modeB, 2) == 2 then + data.modeId = 17 -- Turtle mode + elseif bit32.band(modeB, 4) == 4 then + data.modeId = 16 -- Geofence navigation + elseif bit32.band(modeB, 8) == 8 then + data.modeId = 18 -- Loiter end end diff --git a/src/SCRIPTS/TELEMETRY/iNav/crsf.lua b/src/SCRIPTS/TELEMETRY/iNav/crsf.lua index 7243fbc..2e971d6 100644 --- a/src/SCRIPTS/TELEMETRY/iNav/crsf.lua +++ b/src/SCRIPTS/TELEMETRY/iNav/crsf.lua @@ -113,7 +113,19 @@ local function crsf(data) elseif data.fm == "WP" then data.mode = 2015 elseif data.fm == "RTH" then - data.mode = 1615 + data.mode = 1215 + elseif data.fm == "LAND" then + data.mode = 100015 + elseif data.fm == "GEO" then + data.mode = 400015 + elseif data.fm == "TURT" then + data.mode = 200005 + elseif data.fm == "WRTH" then + data.mode = 1000215 + elseif data.fm == "LOTR" then + data.mode = 800215 + elseif data.fm == "ANGH" then + data.mode = 2000005 elseif data.fm == "!FS!" then data.mode = 40004 end diff --git a/src/SCRIPTS/TELEMETRY/iNav/modes.lua b/src/SCRIPTS/TELEMETRY/iNav/modes.lua index 9a02f1c..ed9150d 100644 --- a/src/SCRIPTS/TELEMETRY/iNav/modes.lua +++ b/src/SCRIPTS/TELEMETRY/iNav/modes.lua @@ -3,18 +3,25 @@ local HORUS = ... -- Modes: t=text / f=flags for text / w=wave file local modes = { { t = "! TELEM !", f = 3 }, - { t = "HORIZON", f = 0, w = "hrznmd" }, - { t = " ANGLE", f = 0, w = "anglmd" }, - { t = " ACRO", f = 0, w = "acromd" }, - { t = " NOT OK ", f = 3 }, - { t = " READY", f = 0, w = "ready" }, - { t = "POS HOLD", f = 0, w = "poshld" }, - { t = "WAYPONT", f = 0, w = "waypt" }, - { t = " MANUAL", f = 0, w = "manmd" }, - { t = " RTH ", f = 3, w = "rtl" }, - { t = "! FAIL !", f = 3, w = "fson" }, + { t = " HORIZON ", f = 0, w = "hrznmd" }, + { t = " ANGLE ", f = 0, w = "anglmd" }, + { t = " ACRO ", f = 0, w = "acromd" }, + { t = " NOT OK ", f = 3 }, -- 5 + { t = " READY ", f = 0, w = "ready" }, + { t = "POS HOLD ", f = 0, w = "poshld" }, + { t = " WAYPONT ", f = 0, w = "waypt" }, + { t = " MANUAL ", f = 0, w = "manmd" }, + { t = " RTH ", f = 3, w = "rtl" }, -- 10 + { t = "! FAIL !", f = 3, w = "fson" }, { t = "! THROT !", f = 3 }, - { t = " CRUISE", f = 0, w = "cruzmd" } + { t = " CRUISE ", f = 0, w = "cruzmd" }, + { t = "ANGL HOLD", f = 0, w = "aglhld" }, + { t = " LAND ", f = 0, w = "landin" }, -- 15 + { t = " GEO NAV ", f = 0, w = "geonav" }, + { t = " TURTLE ", f = 0, w = "turtle" }, + { t = " LOITER ", f = 0, w = "loiter" }, + { t = " WP RTH ", f = 0, w = "wrth" }, + { t = "CORSE HLD", f = 0, w = "crsh" } -- 20 } local units = { [0] = "", "V", "A", "mA", "kts", "m/s", "f/s", "kmh", "MPH", "m", HORUS and "ft" or "'" }