From bdd9a0eee15b87e0641abcfb46759113968158c8 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 25 Aug 2019 18:04:30 -0400 Subject: [PATCH 01/34] Version bump to v1.7.3 --- README.md | 2 +- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11203 -> 11203 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11203 -> 11203 bytes src/iNav.lua | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0af1a17a..4e301536 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## INAV Lua Telemetry Flight Status for Taranis/Horus/Jumper T16 - v1.7.2 +## INAV Lua Telemetry Flight Status for Taranis/Horus/Jumper T16 - v1.7.3 ### FrSky SmartPort(S.Port), D-series, F.Port & TBS Crossfire telemetry on Taranis, Horus & Jumper T16 transmitters diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index e003aa0f284f0d7cad55fa33dcd61a3380cae33b..4ccb262d92e1dccc4021af4c2033f753b74f6024 100644 GIT binary patch delta 14 WcmX>cemH!?Jtjuu&G(s}XaE2->;{cemH!?Jtjt@&G(s}XaE2-<_4Gm diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index e003aa0f284f0d7cad55fa33dcd61a3380cae33b..4ccb262d92e1dccc4021af4c2033f753b74f6024 100644 GIT binary patch delta 14 WcmX>cemH!?Jtjuu&G(s}XaE2->;{cemH!?Jtjt@&G(s}XaE2-<_4Gm diff --git a/src/iNav.lua b/src/iNav.lua index ef5a07c6..bba7930b 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -3,7 +3,7 @@ -- Docs: https://github.com/iNavFlight/LuaTelemetry local buildMode = ... -local VERSION = "1.7.2" +local VERSION = "1.7.3" local FILE_PATH = "/SCRIPTS/TELEMETRY/iNav/" local SMLCD = LCD_W < 212 local HORUS = LCD_W >= 480 From af0a1faa2c34005ebdea68b6358e23e3399243a9 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 25 Aug 2019 18:58:15 -0400 Subject: [PATCH 02/34] Initial Nirvana testing --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11203 -> 1500 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11203 -> 1500 bytes src/iNav.lua | 37 +++++++++++++++++++++++++++++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 4ccb262d92e1dccc4021af4c2033f753b74f6024..5eaef419b151180642640b16bfc74277dd08862b 100644 GIT binary patch literal 1500 zcmbVM-*4Mg6#lN`+@_s2cv|Dv9a5bYoYT*Pjn6hd0bir#X1m(j{<72F?9>{yom!{0zv(sYr<*yj zQMC^DP$V2(^IMTG@RP_`RPYP%TNK+fTFvd|)?szGvD=#CQ4+jBvEFgcwc$s$1Ac>C z12=r=24inD1YaV190uNS08VGeIO;73-c7jLaqN8`A)^Y9!Ey$FWcS-n;2niIc`x$( zeop3$hF^O`_70^wBj0zOa9{^Ld*J391QG43PSLZS?*_pr8up=)`995iGy#oj4E13D zHr6TlF-?Z0F@5R~*b)g&NKd=9 zqdKk1H+&{85;Nzc+%25ZoMK;02}jyl_~aC83Hg#+c`jzzUW)frSnM}xu?xb!#uRWls&@b;B3yzc~i}|&Cl_kBEsu8`*B`#IC>}@r=4GyWAs_aSynHGJA zG__3D*bS>Ae-wb$u0%6$*VkkK)4| z{d{46B={=D>yhtQ#!le6!%E;jiM+t23zsO;-f6VA4{8g%Ddw%;SS&2TD}-x$!Bcx^ qSDFv+KlrqAzq04`sktkb8&caTGWG9p1+<_fKMmDs*N5_6kNg8JG%Pm& literal 11203 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 literal 11203 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 480 +local HORUS = LCD_W >= 480 or LCD_H >= 480 local FLASH = HORUS and WARNING_COLOR or 3 local tmp, view, lang, playLog local env = "bx" @@ -24,6 +24,34 @@ end local config = loadScript(FILE_PATH .. "config" .. ext, env)(SMLCD) collectgarbage() + +local function background() +end + +local function run(event) + lcd.setColor(CUSTOM_COLOR, 264) --lcd.RGB(0, 32, 65) + lcd.clear(CUSTOM_COLOR) + + if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then + lcd.setColor(WARNING_COLOR, YELLOW) + --if iNavZone.zone.w < 450 or iNavZone.zone.h < 250 then + if iNavZone.zone.w < 280 or iNavZone.zone.h < 450 then + lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 16, "Full screen required", SMLSIZE + WARNING_COLOR) + lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 36, iNavZone.zone.x .. "x" .. iNavZone.zone.y, SMLSIZE + WARNING_COLOR) + lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 56, iNavZone.zone.w .. "x" .. iNavZone.zone.h, SMLSIZE + WARNING_COLOR) + else + lcd.drawText(40, 40, "Nirvana NV-14 - Widget Detected", SMLSIZE + WARNING_COLOR) + end + else + lcd.drawText(40, 40, "Nirvana NV-14", WARNING_COLOR) + end + + return 0 +end + +return { run = run, background = background } + +--[[ local modes, units, labels = loadScript(FILE_PATH .. "modes" .. ext, env)() collectgarbage() @@ -37,6 +65,7 @@ collectgarbage() data.lang = "es" data.voice = "es" ]] +--[[ if data.lang ~= "en" or data.voice ~= "en" then lang = loadScript(FILE_PATH .. "lang" .. ext, env)(modes, labels, data, FILE_PATH, env) @@ -64,6 +93,7 @@ local function calcBearing(gps1, gps2) local y = math.sin(a2 - a1) * math.cos(o2) return math.deg(math.atan2(y, x)) ]] + --[[ -- Flat-Earth math local x = (gps2.lon - gps1.lon) * math.cos(math.rad(gps1.lat)) return math.deg(1.5708 - math.atan2(gps2.lat - gps1.lat, x)) @@ -440,6 +470,7 @@ local function run(event) --[[ Show FPS data.start = getTime() ]] + --[[ -- Insure background() has run before rendering screen if not data.bkgd then @@ -476,6 +507,7 @@ local function run(event) return 0 end ]] + --[[ -- Config menu or views if data.configStatus > 0 then @@ -533,4 +565,5 @@ local function run(event) return 0 end -return { run = run, background = background } \ No newline at end of file +return { run = run, background = background } +]] \ No newline at end of file From ed7a1f2b8723ca0fdf8b914b6ef0681ced30d40b Mon Sep 17 00:00:00 2001 From: teckel12 Date: Mon, 26 Aug 2019 13:05:23 -0400 Subject: [PATCH 03/34] Nice progress, glass cockpit seems 100% --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 1500 -> 11291 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 1500 -> 11291 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 6213 -> 6533 bytes dist/SCRIPTS/TELEMETRY/iNav/horus.luac | Bin 15693 -> 15693 bytes dist/SCRIPTS/TELEMETRY/iNav/modes.luac | Bin 899 -> 879 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 0 -> 8838 bytes dist/SCRIPTS/TELEMETRY/iNav/pics/bgnv.png | Bin 0 -> 982 bytes src/iNav.lua | 42 +- src/iNav/build.lua | 3 +- src/iNav/func_h.lua | 38 +- src/iNav/horus.lua | 2 +- src/iNav/modes.lua | 4 +- src/iNav/nirvana.lua | 615 ++++++++++++++++++++++ 13 files changed, 648 insertions(+), 56 deletions(-) create mode 100644 dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac create mode 100644 dist/SCRIPTS/TELEMETRY/iNav/pics/bgnv.png create mode 100644 src/iNav/nirvana.lua diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 5eaef419b151180642640b16bfc74277dd08862b..9c8cb191782f56b850b355d29e1f9b6793bdb8a0 100644 GIT binary patch literal 11291 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 literal 1500 zcmbVM-*4Mg6#lN`+@_s2cv|Dv9a5bYoYT*Pjn6hd0bir#X1m(j{<72F?9>{yom!{0zv(sYr<*yj zQMC^DP$V2(^IMTG@RP_`RPYP%TNK+fTFvd|)?szGvD=#CQ4+jBvEFgcwc$s$1Ac>C z12=r=24inD1YaV190uNS08VGeIO;73-c7jLaqN8`A)^Y9!Ey$FWcS-n;2niIc`x$( zeop3$hF^O`_70^wBj0zOa9{^Ld*J391QG43PSLZS?*_pr8up=)`995iGy#oj4E13D zHr6TlF-?Z0F@5R~*b)g&NKd=9 zqdKk1H+&{85;Nzc+%25ZoMK;02}jyl_~aC83Hg#+c`jzzUW)frSnM}xu?xb!#uRWls&@b;B3yzc~i}|&Cl_kBEsu8`*B`#IC>}@r=4GyWAs_aSynHGJA zG__3D*bS>Ae-wb$u0%6$*VkkK)4| z{d{46B={=D>yhtQ#!le6!%E;jiM+t23zsO;-f6VA4{8g%Ddw%;SS&2TD}-x$!Bcx^ qSDFv+KlrqAzq04`sktkb8&caTGWG9p1+<_fKMmDs*N5_6kNg8JG%Pm& diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index 5eaef419b151180642640b16bfc74277dd08862b..9c8cb191782f56b850b355d29e1f9b6793bdb8a0 100644 GIT binary patch literal 11291 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 literal 1500 zcmbVM-*4Mg6#lN`+@_s2cv|Dv9a5bYoYT*Pjn6hd0bir#X1m(j{<72F?9>{yom!{0zv(sYr<*yj zQMC^DP$V2(^IMTG@RP_`RPYP%TNK+fTFvd|)?szGvD=#CQ4+jBvEFgcwc$s$1Ac>C z12=r=24inD1YaV190uNS08VGeIO;73-c7jLaqN8`A)^Y9!Ey$FWcS-n;2niIc`x$( zeop3$hF^O`_70^wBj0zOa9{^Ld*J391QG43PSLZS?*_pr8up=)`995iGy#oj4E13D zHr6TlF-?Z0F@5R~*b)g&NKd=9 zqdKk1H+&{85;Nzc+%25ZoMK;02}jyl_~aC83Hg#+c`jzzUW)frSnM}xu?xb!#uRWls&@b;B3yzc~i}|&Cl_kBEsu8`*B`#IC>}@r=4GyWAs_aSynHGJA zG__3D*bS>Ae-wb$u0%6$*VkkK)4| z{d{46B={=D>yhtQ#!le6!%E;jiM+t23zsO;-f6VA4{8g%Ddw%;SS&2TD}-x$!Bcx^ qSDFv+KlrqAzq04`sktkb8&caTGWG9p1+<_fKMmDs*N5_6kNg8JG%Pm& diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index 067aa345f57af39535e7d2cb3901a2751b74b173..b7a80c5073a96c4b316de66491c03df12ba45b89 100644 GIT binary patch delta 2032 zcmah~O>Yxd6g}^~nK4d7Vm=xhMG;WcE?Be(y6J8{f+sjhA%qragenzP&@K=a1qrFr zycq|ZfwQlD+x~!7praliMxB@Srfpy>?sa^l z-7JIg925hIm555jmQq_hVEZn$*<1S0-A-797ambtG?~mmuMfOXcB=XjQBFbcRAAq& z$ftMP%_Br{B@I+ES4Gjx6E?Huf=W7yQxVytoUEABKcq=0M$zQ5%_>OzRgw5>;&ik| zSWS98BU=}z&2>?PkSRzNAjKdk^;5CkK!n*P6-L=+Nf&<*1OC0uCUB$4mNyxr)nDGU z)XIL0m}I0IPPNb*;x8t{0@wF^KpHayeOnf&x5blTDDYct%%e=Cg8_Tm?3 zFTMBKxeHg`y?CMVj9YAn{K_ z9Z|4YgUcVowI6G{OkOR@AxX+r)oD$dJ8S8%gn^n<#u*zz`Ih3t#?gRdd3eR{|&w14;xb$Ph5yqcncpg8|S!)Yc0?C^67@eVYmIvBWa9E4D z)R@TQr+`UG4_YLo!6x&t9vSc#^Jp*HSaBd8#D9C;;!j0SwITssd$OZ=PK`*m#4A)R zgGWpV%NaslOktubS-D!FjwE;ERlM##CtW_BJwBAxwWsM$SksgyRIoY)U+%Ez$8TV{ z!=lfJp_1gBX_SSX##P0Xxk<6tHNtuS4Xn;6da0NhWMiP@yqy+SQk}`Hn;Li0M7?HO zGreYJTfU(hDn>eCXR{`tr-j$JmjQFmEJ{(?P?rO%ZpFBxRL*3sWnr8YnA%$%JLrrU zf#r-~jK-!I>n3r753@qCLnYv~z(zA3QJpiT5uey-@=-8n6t19RyiRbdmB)fgO2I7> z&{0R+pA~JRR#mh?q?Ej$G>)wu!mH zjud6-JdKpHG>E+oth%iiq!)wixz-#?(lXTLl@rH1OcG)=((#CDH?fH~8H<-_6W@@q=&(mYMp}F>kHW#O@nD1Ok`_1r9enLd&%BFJl3y&Ax=jL0D>xEa$s^bZkO(h8?Yo>!lCRmYRnGJH0Kou!()y)JY u(@OuLE3$cOH^5Ybd&A|igN=>tHJ0x-hwwn@&Cndy^oIogy>WHty7&hLq5d-f delta 1714 zcma)6OK%%h6#nj=SFqze8d@g`5fP{$frOwfTQoC{?bu17t)mbYm5QLy3PEV0tUz<; zy0xoTw2=k`U6hB!g1sdKi%K(-;%SmnphyT5Ay#3D)E|JvnQJ@PupyCkkI#2r_dDP9 zg@fNdxi;gy2jCHa@6fs50Z#hBWd^hz8;Kuk;9yP+>~p#Pn-6v=Vqz--OxK1bZQUl^ zmki5N>N65-lSw&%ao&&B2QbOKe(*dMmjjKt*4Nm-Fo4MctTBLby+5xxfJq(Acn(co zG$PkCurKc2%)i)!c8p?CU$*nOPjK{I=*ND z3A>#R`q2)py(x*rxPmJ&HxgcjwO+v;UN_e0`&G9}>(Ai0 z6iUA{bmnAT<=%ryuH)(NJ&tkejHWg=uA&hGEPjZE_S*oXc zfTpw{pCh{eXTG;vpr->88turBN2&Q3>3}I}75(m*@+a~LevE$@yiv+n$_C8ts;CAZ zCoPTtw+8tWc@&c(GQ3p5Nqn?RB~ixrbnFl!4Z0J{FTR&|jql>S0}T~x+(m=e6l<1S z>%JUan6gGMqNZDXNgsFTb)|t&X@Hn6qd|Bxt{F{t=^>*-IjtZq)&t~{@~6+a7KCHd z!7ukkj~euD>F=@5gMJ65Mc-atU0i+jEto0z_UYG8(%Zk8eRxkd_MqJ{K09Rx>zM=m z4LkTVbB3J`p3go$IeXSNO-kGU#8a;y^Gr_sBd&B3*`jkE#Mi87GKg7e?)|cb=*l@!xAQ1_!3$WnE!~<+L*v=nl4d36O YAF$xfslCC8oNjzhsb96e*?U|28v)L#a{vGU diff --git a/dist/SCRIPTS/TELEMETRY/iNav/horus.luac b/dist/SCRIPTS/TELEMETRY/iNav/horus.luac index 1138dc4552599875a866227a94919990e446f01a..76650a64aedc6b725b0227d46626fb850d6ace27 100644 GIT binary patch delta 3883 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 Gyy-uO`%jYq diff --git a/dist/SCRIPTS/TELEMETRY/iNav/modes.luac b/dist/SCRIPTS/TELEMETRY/iNav/modes.luac index f71305dc8453086a74c222010fe5fbd78ec9881b..7c082957bf900982dc3c07862826311bdacd8dda 100644 GIT binary patch delta 352 zcmWNMJx;_h5QX1l#U|?%loX4!9UXV@Pm&^O5NDu3Tw=$W&S{XS>9_$GSSJON_ZswE zfsv)rd-LXdlBNFJzu%v4p8-4oG=cXE1Ib!W7aOk^pulmlE|!avHUow{8|R{NUMBTp z^gOB`vzH|*OMz2XRSR(s`i@6`R(S4Y(M4K2PI{24Uasnk z@42itmbsU9(}JyMv)O2NgG{0YVc=2yqFIuGQ&4sr$`Np#tHXX^j} delta 372 zcmWlVJx;_h5Jo=-ZIZPm8VV$YL_^ON{F6k&p+Gd0G&FDsb{u!!25D6^Gk#C9f9u%1o^Out04PvB65zEaKkKlafdoTIn~-J`56lIY3Ukpmstm|r zNg5Mmws8#X3P(P(%e!P8CElgr;(@tjM}@hFE~FPMa={Jn&0Lo(I0_GQ11CbjT(IS`@ zIkXT<3sbET>>8i9(>2cKX?IGXTuFRe;1qne5|13(f~riCBa$PEBZ?ym@0u$96hIKP hfcOEb3lOe8p2eFusd;nbx`%tL{x1P9dRHGk{Q>!nZYcl& diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac new file mode 100644 index 0000000000000000000000000000000000000000..dbb8412cdeb1b22319ce40ae3ea9a2e1b378f990 GIT binary patch literal 8838 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 literal 0 HcmV?d00001 diff --git a/src/iNav.lua b/src/iNav.lua index 581dfb6d..6fd8d0cb 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -24,35 +24,7 @@ end local config = loadScript(FILE_PATH .. "config" .. ext, env)(SMLCD) collectgarbage() - -local function background() -end - -local function run(event) - lcd.setColor(CUSTOM_COLOR, 264) --lcd.RGB(0, 32, 65) - lcd.clear(CUSTOM_COLOR) - - if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then - lcd.setColor(WARNING_COLOR, YELLOW) - --if iNavZone.zone.w < 450 or iNavZone.zone.h < 250 then - if iNavZone.zone.w < 280 or iNavZone.zone.h < 450 then - lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 16, "Full screen required", SMLSIZE + WARNING_COLOR) - lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 36, iNavZone.zone.x .. "x" .. iNavZone.zone.y, SMLSIZE + WARNING_COLOR) - lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 56, iNavZone.zone.w .. "x" .. iNavZone.zone.h, SMLSIZE + WARNING_COLOR) - else - lcd.drawText(40, 40, "Nirvana NV-14 - Widget Detected", SMLSIZE + WARNING_COLOR) - end - else - lcd.drawText(40, 40, "Nirvana NV-14", WARNING_COLOR) - end - - return 0 -end - -return { run = run, background = background } - ---[[ -local modes, units, labels = loadScript(FILE_PATH .. "modes" .. ext, env)() +local modes, units, labels = loadScript(FILE_PATH .. "modes" .. ext, env)(HORUS) collectgarbage() local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU = loadScript(FILE_PATH .. "data" .. ext, env)(r, m, i, HORUS) @@ -65,7 +37,6 @@ collectgarbage() data.lang = "es" data.voice = "es" ]] ---[[ if data.lang ~= "en" or data.voice ~= "en" then lang = loadScript(FILE_PATH .. "lang" .. ext, env)(modes, labels, data, FILE_PATH, env) @@ -93,7 +64,6 @@ local function calcBearing(gps1, gps2) local y = math.sin(a2 - a1) * math.cos(o2) return math.deg(math.atan2(y, x)) ]] - --[[ -- Flat-Earth math local x = (gps2.lon - gps1.lon) * math.cos(math.rad(gps1.lat)) return math.deg(1.5708 - math.atan2(gps2.lat - gps1.lat, x)) @@ -470,7 +440,6 @@ local function run(event) --[[ Show FPS data.start = getTime() ]] - --[[ -- Insure background() has run before rendering screen if not data.bkgd then @@ -496,6 +465,9 @@ local function run(event) end -- On Horus use sticks to control the menu event = icons.clear(event, data) + if data.nv then + event = 0 + end else lcd.clear() end @@ -507,7 +479,6 @@ local function run(event) return 0 end ]] - --[[ -- Config menu or views if data.configStatus > 0 then @@ -552,7 +523,7 @@ local function run(event) if data.v ~= config[25].v then view = nil collectgarbage() - view = loadScript(FILE_PATH .. (HORUS and "horus" or (config[25].v == 0 and "view" or (config[25].v == 1 and "pilot" or (config[25].v == 2 and "radar" or "alt")))) .. ext, env)() + view = loadScript(FILE_PATH .. (HORUS and (data.nv and "nirvana" or "horus") or (config[25].v == 0 and "view" or (config[25].v == 1 and "pilot" or (config[25].v == 2 and "radar" or "alt")))) .. ext, env)() data.v = config[25].v end view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) @@ -565,5 +536,4 @@ local function run(event) return 0 end -return { run = run, background = background } -]] \ No newline at end of file +return { run = run, background = background } \ No newline at end of file diff --git a/src/iNav/build.lua b/src/iNav/build.lua index 26776179..7f3529c2 100644 --- a/src/iNav/build.lua +++ b/src/iNav/build.lua @@ -11,7 +11,7 @@ print("--------------------- COMPILE SCRIPTS ---------------------") print("") local config = loadScript(FILE_PATH .. "config", env)(SMLCD) -local modes, units, labels = loadScript(FILE_PATH .. "modes", env)() +local modes, units, labels = loadScript(FILE_PATH .. "modes", env)(HORUS) local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU = loadScript(FILE_PATH .. "data", env)(r, m, i, HORUS) loadScript(FILE_PATH .. "load", env)(config, data, FILE_PATH) if HORUS then @@ -40,6 +40,7 @@ loadScript(FILE_PATH .. "pilot", env)() loadScript(FILE_PATH .. "radar", env)() loadScript(FILE_PATH .. "alt", env)() loadScript(FILE_PATH .. "horus", env)() +loadScript(FILE_PATH .. "nirvana", env)() loadScript(FILE_PATH .. "menu", env)() loadScript(FILE_PATH .. "log", env)() loadScript(FILE_PATH .. "log_c", env)() diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index cb9fad3c..1b1aad91 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -1,4 +1,5 @@ local config, data, FILE_PATH = ... +data.nv = LCD_W == 320 local function title(data, config, SMLCD) local text = lcd.drawText @@ -15,23 +16,26 @@ local function title(data, config, SMLCD) color(CUSTOM_COLOR, BLACK) fill(0, 0, LCD_W, 20, CUSTOM_COLOR) text(0, 0, model.getInfo().name) - if config[13].v > 0 then - if data.doLogs and data.time ~= nil then - text(340, 0, data.time, WARNING_COLOR) - else - lcd.drawTimer(340, 0, data.timer) - end - end + + local bat = data.nv and 110 or 197 if config[19].v > 0 then - fill(197, 3, 43, 14, TEXT_COLOR) - fill(240, 6, 2, 8, TEXT_COLOR) - local tmp = math.max(math.min((data.txBatt - data.txBattMin) / (data.txBattMax - data.txBattMin) * 42, 42), 0) + 197 - for i = 200, tmp, 4 do + fill(bat, 3, 43, 14, TEXT_COLOR) + fill(bat + 43, 6, 2, 8, TEXT_COLOR) + local tmp = math.max(math.min((data.txBatt - data.txBattMin) / (data.txBattMax - data.txBattMin) * 42, 42), 0) + bat + for i = bat + 3, tmp, 4 do fill(i, 5, 2, 10, CUSTOM_COLOR) end end - if config[19].v ~= 1 then - text(290, 0, fmt("%.1fV", data.txBatt), RIGHT) + if config[19].v ~= 1 and not data.nv then + text(bat + 93, 0, fmt("%.1fV", data.txBatt), RIGHT) + end + + if config[13].v > 0 then + if data.doLogs and data.time ~= nil then + text(data.nv and 190 or 340, 0, data.time, WARNING_COLOR) + else + lcd.drawTimer(data.nv and 190 or 340, 0, data.timer) + end end if data.rxBatt > 0 and config[14].v == 1 then @@ -93,20 +97,20 @@ icons.home = { [2] = Bitmap.open(FILE_PATH .. "pics/homel.png"), } icons.fpv = Bitmap.open(FILE_PATH .. "pics/fpv.png") -icons.bg = Bitmap.open(FILE_PATH .. "pics/bg.png") +icons.bg = Bitmap.open(FILE_PATH .. (data.nv and "pics/bgnv.png" or "pics/bg.png")) icons.roll = Bitmap.open(FILE_PATH .. "pics/roll.png") icons.fg = Bitmap.open(FILE_PATH .. "pics/fg" .. config[30].v .. ".png") data.hcurx_id = getFieldInfo("ail").id data.hcury_id = getFieldInfo("ele").id data.hctrl_id = getFieldInfo("rud").id -data.t6_id = getFieldInfo("trim-t6").id +data.t6_id = not data.nv and getFieldInfo("trim-t6").id or nil data.lastevt = 0 data.lastt6 = nil if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then data.widget = true - if iNavZone.zone.w < 450 or iNavZone.zone.h < 250 then + if (data.nv and (iNavZone.zone.w < 280 or iNavZone.zone.h < 450)) or (not data.nv and (iNavZone.zone.w < 450 or iNavZone.zone.h < 250)) then data.startupTime = math.huge function icons.nfs() lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 16, "Full screen required", SMLSIZE + WARNING_COLOR) @@ -150,7 +154,7 @@ function icons.clear(event, data) if event == 0 and data.doLogs and getValue(data.hcurx_id) < -940 then event = EVT_EXIT_BREAK -- Left (exit) end - data.lastt6 = getValue(data.t6_id) + data.lastt6 = not data.nv and getValue(data.t6_id) or nil if data.lastt6 == 0 then data.lastt6 = nil end diff --git a/src/iNav/horus.lua b/src/iNav/horus.lua index cc72ce75..648df8dd 100644 --- a/src/iNav/horus.lua +++ b/src/iNav/horus.lua @@ -1,5 +1,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) + local rgb = lcd.RGB local SKY = 982 --rgb(0, 121, 180) local GROUND = 25121 --rgb(98, 68, 8) --local SKY2 = 8943 --rgb(32, 92, 122) @@ -22,7 +23,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local line = lcd.drawLine local fill = lcd.drawFilledRectangle local bmap = lcd.drawBitmap - local rgb = lcd.RGB local color = lcd.setColor local max = math.max local min = math.min diff --git a/src/iNav/modes.lua b/src/iNav/modes.lua index ef38585a..03bbdefe 100644 --- a/src/iNav/modes.lua +++ b/src/iNav/modes.lua @@ -1,3 +1,5 @@ +local HORUS = ... + -- Modes: t=text / f=flags for text / w=wave file local modes = { { t = "! TELEM !", f = 3 }, @@ -15,7 +17,7 @@ local modes = { { t = " CRUISE", f = 0, w = "cruzmd" } } -local units = { [0] = "", "V", "A", "mA", "kts", "m/s", "f/s", "kmh", "MPH", "m", LCD_W >= 480 and "ft" or "'" } +local units = { [0] = "", "V", "A", "mA", "kts", "m/s", "f/s", "kmh", "MPH", "m", HORUS and "ft" or "'" } local labels = { "Fuel", "Battery", "Current", "Altitude", "Distance" } diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua new file mode 100644 index 00000000..8007c1fb --- /dev/null +++ b/src/iNav/nirvana.lua @@ -0,0 +1,615 @@ +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) + + local rgb = lcd.RGB + local SKY = rgb(50, 171, 230) + local GROUND = rgb(148, 118, 58) + --local SKY2 = 8943 --rgb(32, 92, 122) + --local GROUND2 = 20996 --rgb(81, 65, 36) + local MAP = rgb(50, 150, 50) + --local DKMAP = 544 --rgb(0, 70, 0) + local LIGHTMAP = rgb(50, 200, 50) + --local DATA = rgb(50, 82, 115) + local DKGREY = rgb(98, 106, 115) + local RIGHT_POS = 270 + local X_CNTR = 134 --(RIGHT_POS + LEFT_POS [0]) / 2 - 1 + local HEADING_DEG = 190 + local PIXEL_DEG = RIGHT_POS / HEADING_DEG --(RIGHT_POS - LEFT_POS [0]) / HEADING_DEG + local TOP = 20 + local BOTTOM = 146 + local Y_CNTR = 83 --(TOP + BOTTOM) / 2 + local DEGV = 160 + local tmp, tmp2, top2, bot2, pitch, roll, roll1, upsideDown + local text = lcd.drawText + local line = lcd.drawLine + local fill = lcd.drawFilledRectangle + local bmap = lcd.drawBitmap + local color = lcd.setColor + local max = math.max + local min = math.min + local floor = math.floor + local abs = math.abs + local rad = math.rad + local deg = math.deg + local sin = math.sin + local cos = math.cos + local fmt = string.format + + function intersect(s1, e1, s2, e2) + local d = (s1.x - e1.x) * (s2.y - e2.y) - (s1.y - e1.y) * (s2.x - e2.x) + local a = s1.x * e1.y - s1.y * e1.x + local b = s2.x * e2.y - s2.y * e2.x + local x = (a * (s2.x - e2.x) - (s1.x - e1.x) * b) / d + local y = (a * (s2.y - e2.y) - (s1.y - e1.y) * b) / d + if x < min(s2.x, e2.x) - 1 or x > max(s2.x, e2.x) + 1 or y < min(s2.y, e2.y) - 1 or y > max(s2.y, e2.y) + 1 then + return nil, nil + end + return floor(x + 0.5), floor(y + 0.5) + end + + local function pitchLadder(r, adj) + --[[ Caged mode + local x = sin(roll1) * r + local y = cos(roll1) * r + local p = cos(rad(pitch - adj)) * DEGV + local x1, y1, x2, y2 = X_CNTR - x, Y_CNTR + y - p, X_CNTR + x, Y_CNTR - y - p + ]] + -- Uncaged mode + local p = sin(rad(adj)) * DEGV + local y = (Y_CNTR - cos(rad(pitch)) * DEGV) - sin(roll1) * p + if y > top2 and y < bot2 then + local x = X_CNTR - cos(roll1) * p + local xd = sin(roll1) * r + local yd = cos(roll1) * r + local x1, y1, x2, y2 = x - xd, y + yd, x + xd, y - yd + if (y1 > top2 or y2 > top2) and (y1 < bot2 or y2 < bot2) and x1 >= 0 and x2 >= 0 then + color(CUSTOM_COLOR, r == 20 and WHITE or LIGHTGREY) + line(x1, y1, x2, y2, SOLID, CUSTOM_COLOR) + if r == 20 and y1 > top2 and y1 < bot2 then + text(x1, y1 - 8, upsideDown and -adj or adj, SMLSIZE + RIGHT) + end + end + end + end + + local function tics(v, p) + tmp = floor((v + 25) * 0.1) * 10 + for i = tmp - 40, tmp, 5 do + local tmp2 = Y_CNTR + ((v - i) * 3) - 9 + if tmp2 > 10 and tmp2 < BOTTOM - 8 then + line(p, tmp2 + 8, p + 2, tmp2 + 8, SOLID, TEXT_COLOR) + if config[28].v == 0 and i % 10 == 0 and (i >= 0 or p > X_CNTR) and tmp2 < BOTTOM - 23 then + text(p + (p > X_CNTR and -1 or 4), tmp2, i, SMLSIZE + (p > X_CNTR and RIGHT or 0) + TEXT_COLOR) + end + end + end + end + + -- Setup + bmap(icons.bg, 0, TOP) + color(TEXT_COLOR, WHITE) + --color(WARNING_COLOR, data.telem and YELLOW or RED) + color(WARNING_COLOR, data.telem and rgb(255, 255, 100) or rgb(255, 100, 100)) + + -- Calculate orientation + if data.pitchRoll then + pitch = (abs(data.roll) > 900 and -1 or 1) * (270 - data.pitch * 0.1) % 180 + roll = (270 - data.roll * 0.1) % 180 + upsideDown = abs(data.roll) > 900 + else + pitch = 90 - deg(math.atan2(data.accx * (data.accz >= 0 and -1 or 1), math.sqrt(data.accy * data.accy + data.accz * data.accz))) + roll = 90 - deg(math.atan2(data.accy * (data.accz >= 0 and 1 or -1), math.sqrt(data.accx * data.accx + data.accz * data.accz))) + upsideDown = data.accz < 0 + end + roll1 = rad(roll) + top2 = config[33].v == 0 and TOP or TOP + 20 + bot2 = BOTTOM - 16 + local i = { {}, {} } + local tl = { x = 1, y = TOP } + local tr = { x = RIGHT_POS - 2, y = TOP } + local bl = { x = 1, y = BOTTOM - 1 } + local br = { x = RIGHT_POS - 2, y = BOTTOM - 1 } + local skip = false + + -- Calculate horizon (uses simple "caged" mode for less math) + local x = sin(roll1) * 200 + local y = cos(roll1) * 200 + local p = cos(rad(pitch)) * DEGV + local h1 = { x = X_CNTR + x, y = Y_CNTR - y - p } + local h2 = { x = X_CNTR - x, y = Y_CNTR + y - p } + + -- Find intersections between horizon and edges of attitude indicator + local x1, y1 = intersect(h1, h2, tl, bl) + local x2, y2 = intersect(h1, h2, tr, br) + if x1 and x2 then + i[1].x, i[1].y = x1, y1 + i[2].x, i[2].y = x2, y2 + else + local x3, y3 = intersect(h1, h2, bl, br) + local x4, y4 = intersect(h1, h2, tl, tr) + if x3 and x4 then + i[1].x, i[1].y = x3, y3 + i[2].x, i[2].y = x4, y4 + elseif (x1 or x2) and (x3 or x4) then + i[1].x, i[1].y = x1 and x1 or x2, y1 and y1 or y2 + i[2].x, i[2].y = x3 and x3 or x4, y3 and y3 or y4 + else + skip = true + end + end + + -- Draw ground + color(CUSTOM_COLOR, GROUND) + if skip then + -- Must be going down hard! + if (pitch - 90) * (upsideDown and -1 or 1) < 0 then + fill(tl.x, tl.y, br.x - tl.x + 1, br.y - tl.y + 1, CUSTOM_COLOR) + end + else + local trix, triy + + -- Find right angle coordinates of triangle + if upsideDown then + trix = roll > 90 and max(i[1].x, i[2].x) or min(i[1].x, i[2].x) + triy = min(i[1].y, i[2].y) + else + trix = roll > 90 and min(i[1].x, i[2].x) or max(i[1].x, i[2].x) + triy = max(i[1].y, i[2].y) + end + + -- Find rectangle(s) and fill + if upsideDown then + if triy > tl.y then + fill(tl.x, tl.y, br.x - tl.x + 1, triy - tl.y, CUSTOM_COLOR) + end + if roll > 90 and trix < br.x then + fill(trix, triy, br.x - trix + 1, br.y - triy + 1, CUSTOM_COLOR) + elseif roll <= 90 and trix > tl.x then + fill(tl.x, triy, trix - tl.x, br.y - triy + 1, CUSTOM_COLOR) + end + else + if triy < br.y then + fill(tl.x, triy + 1, br.x - tl.x + 1, br.y - triy, CUSTOM_COLOR) + end + if roll > 90 and trix > tl.x then + fill(tl.x, tl.y, trix - tl.x, triy - tl.y + 1, CUSTOM_COLOR) + elseif roll <= 90 and trix < br.x then + fill(trix, tl.y, br.x - trix + 1, triy - tl.y + 1, CUSTOM_COLOR) + end + end + + -- Fill remaining triangle + local height = i[1].y - triy + local top = i[1].y + if height == 0 then + height = i[2].y - triy + top = i[2].y + end + local inc = 1 + if height ~= 0 then + local width = abs(i[1].x - trix) + local tx1 = i[1].x + local tx2 = trix + if width == 0 then + width = abs(i[2].x - trix) + tx1 = i[2].x + tx2 = trix + end + inc = abs(height) < 10 and 1 or (abs(height) < 20 and 2 or ((abs(height) < width and abs(roll - 90) < 55) and 3 or 5)) + local steps = height > 0 and inc or -inc + local slope = width / height * inc + local s = slope > 0 and 0 or inc - 1 + slope = abs(slope) * (tx1 < tx2 and 1 or -1) + for y = triy, top, steps do + if abs(steps) == 1 then + line(tx1, y, tx2, y, SOLID, CUSTOM_COLOR) + else + if tx1 < tx2 then + --if tx1 < tx2 and tx2 - tx1 + 1 > 0 then + fill(tx1, y - s, tx2 - tx1 + 1, inc, CUSTOM_COLOR) + else + --elseif tx1 > tx2 and tx1 - tx2 + 1 > 0 then + fill(tx2, y - s, tx1 - tx2 + 1, inc, CUSTOM_COLOR) + end + end + tx1 = tx1 + slope + end + end + + -- Smooth horizon + if not upsideDown and inc <= 3 then + if inc > 1 then + if inc > 2 then + line(i[1].x, i[1].y + 2, i[2].x, i[2].y + 2, SOLID, CUSTOM_COLOR) + end + line(i[1].x, i[1].y + 1, i[2].x, i[2].y + 1, SOLID, CUSTOM_COLOR) + color(CUSTOM_COLOR, SKY) + line(i[1].x, i[1].y - 1, i[2].x, i[2].y - 1, SOLID, CUSTOM_COLOR) + if inc > 2 then + line(i[1].x, i[1].y - 2, i[2].x, i[2].y - 2, SOLID, CUSTOM_COLOR) + end + if 90 - roll > 25 then + line(i[1].x, i[1].y - 3, i[2].x, i[2].y - 3, SOLID, CUSTOM_COLOR) + end + end + color(CUSTOM_COLOR, LIGHTGREY) + line(i[1].x, i[1].y, i[2].x, i[2].y, SOLID, CUSTOM_COLOR) + end + end + + -- Pitch ladder + if data.telem then + tmp = pitch - 90 + local tmp2 = max(min((tmp >= 0 and floor(tmp * 0.2) or math.ceil(tmp * 0.2)) * 5, 30), -30) + for x = tmp2 - 20, tmp2 + 20, 5 do + if x ~= 0 and (x % 10 == 0 or (x > -30 and x < 30)) then + pitchLadder(x % 10 == 0 and 20 or 15, x) + end + end + if not data.showMax then + text(X_CNTR - 64, Y_CNTR - 9, fmt("%.0f", upsideDown and -tmp or tmp) .. "\64", SMLSIZE + RIGHT) + end + end + + -- Speed & altitude tics + tics(data.speed, 1) + tics(data.altitude, RIGHT_POS - 4) + if config[28].v == 0 and config[33].v == 0 then + text(42, TOP - 1, units[data.speed_unit], SMLSIZE) + text(RIGHT_POS - 43, TOP - 1, "Alt " .. units[data.alt_unit], SMLSIZE + RIGHT) + elseif config[28].v > 0 then + text(42, Y_CNTR - 25, units[data.speed_unit], SMLSIZE + RIGHT) + text(RIGHT_POS - 4, Y_CNTR - 25, "Alt " .. units[data.alt_unit], SMLSIZE + RIGHT) + end + + -- Compass + if data.showHead then + for i = 0, 348.75, 11.25 do + tmp = floor(((i - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 2.5) + if tmp >= 9 and tmp <= RIGHT_POS - 12 then + if i % 90 == 0 then + text(tmp - (i < 270 and 3 or 5), bot2, i == 0 and "N" or (i == 90 and "E" or (i == 180 and "S" or "W")), SMLSIZE) + elseif i % 45 == 0 then + text(tmp - (i < 225 and 9 or 11), bot2, i == 45 and "NE" or (i == 135 and "SE" or (i == 225 and "SW" or "NW")), SMLSIZE) + else + line(tmp, BOTTOM - 4, tmp, BOTTOM - 1, SOLID, 0) + end + end + end + end + + -- Calculate the maximum distance for scaling home location and map + local maxDist = max(min(data.distanceMax, data.distanceLast * 6), data.distRef * 10) + + -- Home direction + if data.showHead and data.armed and data.telem and data.gpsHome ~= false then + if data.distanceLast >= data.distRef then + local bearing = calcBearing(data.gpsHome, data.gpsLatLon) + 540 % 360 + if config[15].v == 1 then + -- HUD method + local d = 1 - data.distanceLast / maxDist + local w = HEADING_DEG / (d + 1) + local h = floor((((upsideDown and data.heading - bearing or bearing - data.heading) + (361 + w * 0.5)) % 360) * (RIGHT_POS / w) - 0.5) + --local p = sin(math.atan(data.altitude / data.distanceLast) - math.atan(data.altitude / max(maxDist, data.altitude * 0.25))) * (upsideDown and DEGV or -DEGV) + --local p = sin(rad(d * max(15 + (pitch - 90) * 0.5, 0))) * (upsideDown and DEGV or -DEGV) + local p = sin(math.atan(data.altitude / data.distanceLast * 0.5)) * (upsideDown and DEGV or -DEGV) + local x = (X_CNTR - cos(roll1) * p) + (sin(roll1) * (h - X_CNTR)) - 9 + local y = ((Y_CNTR - cos(rad(pitch)) * DEGV) - sin(roll1) * p) - (cos(roll1) * (h - X_CNTR)) - 9 + if x >= 0 and x < RIGHT_POS - 17 then + local s = floor(d * 2 + 0.5) + bmap(icons.home[s], x, min(max(y, s == 2 and TOP or 15), BOTTOM - (s == 2 and 35 or 30))) + end + --[[ + if x >= 0 and y >= TOP and x < RIGHT_POS - 17 and y < BOTTOM - 17 then + bmap(icons.home[floor(d * 2 + 0.5)], x, y) + end + ]] + else + -- Bottom-fixed method + local home = floor(((bearing - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 2.5) + if home >= 3 and home <= RIGHT_POS - 6 then + bmap(icons.home[1], home - 7, BOTTOM - 31) + end + end + end + -- Flight path vector + if data.fpv_id > -1 and data.speed >= 8 then + tmp = (data.fpv - data.heading + 360) % 360 + if tmp >= 302 or tmp <= 57 then + local fpv = floor(((data.fpv - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 0.5) + --local p = sin(rad(data.vspeed_id == -1 and pitch - 90 or math.log(1 + min(abs(0.6 * (data.vspeed_unit == 6 and data.vspeed * 0.3048 or data.vspeed)), 10)) * (data.vspeed < 0 and -5 or 5))) * DEGV + local p = sin(data.vspeed_id == -1 and rad(pitch - 90) or (math.tan(data.vspeed / (data.speed * (data.speed_unit == 8 and 1.4667 or 0.2778))))) * DEGV + local x = (X_CNTR - cos(roll1) * p) + (sin(roll1) * (fpv - X_CNTR)) - 9 + local y = ((Y_CNTR - cos(rad(pitch)) * DEGV) - sin(roll1) * p) - (cos(roll1) * (fpv - X_CNTR)) - 6 + if y > TOP and y < bot2 and x >= 0 then + bmap(icons.fpv, x, y) + end + end + end + end + + -- View overlay + bmap(icons.fg, 1, 20) + color(CUSTOM_COLOR, MAP) + line(1, BOTTOM + 1, RIGHT_POS, BOTTOM + 1, SOLID, CUSTOM_COLOR) + + -- Speed & altitude + tmp = data.showMax and data.speedMax or data.speed + text(41, Y_CNTR - 9, tmp >= 99.5 and floor(tmp + 0.5) or fmt("%.1f", tmp), SMLSIZE + RIGHT + data.telemFlags) + tmp = data.showMax and data.altitudeMax or data.altitude + text(RIGHT_POS, Y_CNTR - 9, floor(tmp + 0.5), SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + if data.altHold then + bmap(icons.lock, RIGHT_POS - 55, Y_CNTR - 5) + end + + -- Heading + if data.showHead then + text(X_CNTR + 20, bot2, floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) + end + + -- Roll scale + if config[33].v == 1 then + bmap(icons.roll, 43, 20) + if roll > 30 and roll < 150 and not upsideDown then + local x1, y1, x2, y2, x3, y3 = calcDir(rad(roll - 90), rad(roll + 55), rad(roll - 235), X_CNTR - (cos(roll1) * 75), 79 - (sin(roll1) * 40), 7) + color(CUSTOM_COLOR, YELLOW) + line(x1, y1, x2, y2, SOLID, CUSTOM_COLOR) + line(x1, y1, x3, y3, SOLID, CUSTOM_COLOR) + line(x2, y2, x3, y3, SOLID, CUSTOM_COLOR) + end + end + +--[[ + -- Variometer + if config[7].v % 2 == 1 then + color(CUSTOM_COLOR, DKGREY) + fill(RIGHT_POS, TOP, 10, BOTTOM - 20, CUSTOM_COLOR) + color(CUSTOM_COLOR, LIGHTGREY) + line(RIGHT_POS + 10, TOP, RIGHT_POS + 10, BOTTOM - 1, SOLID, CUSTOM_COLOR) + color(CUSTOM_COLOR, GREY) + line(RIGHT_POS, Y_CNTR - 1, RIGHT_POS + 9, Y_CNTR - 1, SOLID, CUSTOM_COLOR) + if data.telem then + color(CUSTOM_COLOR, YELLOW) + tmp = math.log(1 + min(abs(0.6 * (data.vspeed_unit == 6 and data.vspeed * 0.3048 or data.vspeed)), 10)) * (data.vspeed < 0 and -1 or 1) + local y1 = Y_CNTR - (tmp * 0.416667 * (Y_CNTR - 21)) + local y2 = Y_CNTR - (tmp * 0.384615 * (Y_CNTR - 21)) + line(RIGHT_POS, y1 - 1, RIGHT_POS + 9, y2 - 1, SOLID, CUSTOM_COLOR) + line(RIGHT_POS, y1, RIGHT_POS + 9, y2, SOLID, CUSTOM_COLOR) + end + if data.startup == 0 then + text(RIGHT_POS + 13, TOP - 1, fmt(abs(data.vspeed) >= 9.95 and "%.0f" or "%.1f", data.vspeed) .. units[data.vspeed_unit], SMLSIZE + data.telemFlags) + end + end +]] + + -- Calc orientation + tmp = data.headingRef + if data.showDir or data.headingRef == -1 then + tmp = 0 + end + local r1 = rad(data.heading - tmp) + local r2 = rad(data.heading - tmp + 145) + local r3 = rad(data.heading - tmp - 145) +--[[ + -- Radar + local LEFT_POS = RIGHT_POS + (config[7].v % 2 == 1 and 11 or 0) + RIGHT_POS = 479 + X_CNTR = (RIGHT_POS + LEFT_POS) * 0.5 - 1 + if data.startup == 0 then + -- Launch/north-based orientation + if data.showDir or data.headingRef == -1 then + text(LEFT_POS + 2, Y_CNTR - 9, "W", SMLSIZE) + text(RIGHT_POS, Y_CNTR - 9, "E", SMLSIZE + RIGHT) + end + local cx, cy, d + + -- Altitude graph + if config[28].v > 0 then + local factor = 30 / (data.altMax - data.altMin) + color(CUSTOM_COLOR, LIGHTMAP) + for i = 1, 60 do + cx = RIGHT_POS - 60 + i + cy = floor(BOTTOM - (data.alt[((data.altCur - 2 + i) % 60) + 1] - data.altMin) * factor + 0.5) + if cy < BOTTOM then + line(cx, cy, cx, BOTTOM - 1, SOLID, CUSTOM_COLOR) + end + if (i - 1) % (60 / config[28].v) == 0 then + color(CUSTOM_COLOR, DKGREY) + line(cx, BOTTOM - 30, cx, BOTTOM - 1, DOTTED, CUSTOM_COLOR) + color(CUSTOM_COLOR, LIGHTMAP) + end + end + if data.altMin < -1 then + cy = BOTTOM - (-data.altMin * factor) + color(CUSTOM_COLOR, LIGHTGREY) + line(RIGHT_POS - 58, cy, RIGHT_POS - 1, cy, DOTTED, CUSTOM_COLOR) + if cy < 142 then + text(RIGHT_POS - 59, cy - 8, "0", SMLSIZE + RIGHT) + end + end + text(RIGHT_POS + 2, BOTTOM - 46, floor(data.altMax + 0.5) .. units[data.alt_unit], SMLSIZE + RIGHT) + end + + if data.gpsHome ~= false then + -- Craft location + tmp2 = config[31].v == 1 and 50 or 100 + d = data.distanceLast >= data.distRef and min(max(data.distanceLast / maxDist * tmp2, 7), tmp2) or 1 + local bearing = calcBearing(data.gpsHome, data.gpsLatLon) - tmp + local rad1 = rad(bearing) + cx = floor(sin(rad1) * d + 0.5) + cy = floor(cos(rad1) * d + 0.5) + -- Home position + local hx = X_CNTR + 2 + local hy = Y_CNTR + if config[31].v ~= 1 then + hx = hx - (d > 9 and cx * 0.5 or 0) + hy = hy + (d > 9 and cy * 0.5 or 0) + end + if d >= 12 then + --bmap(icons.home, hx - 4, hy - 5) + bmap(icons.home[1], hx - 8, hy - 10) + elseif d > 1 then + fill(hx - 1, hy - 1, 3, 3, SOLID) + end + -- Shift craft location + cx = d == 1 and X_CNTR + 2 or cx + hx + cy = d == 1 and Y_CNTR or hy - cy + else + cx = X_CNTR + 2 + cy = Y_CNTR + d = 1 + end + -- Orientation + local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, cx, cy, 8) + color(CUSTOM_COLOR, LIGHTGREY) + line(x2, y2, x3, y3, SOLID, CUSTOM_COLOR) + line(x1, y1, x2, y2, SOLID, TEXT_COLOR) + line(x1, y1, x3, y3, SOLID, TEXT_COLOR) + tmp = data.distanceLast < 1000 and floor(data.distanceLast + 0.5) .. units[data.dist_unit] or (fmt("%.1f", data.distanceLast / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) + text(LEFT_POS + 2, BOTTOM - 16, tmp, SMLSIZE + data.telemFlags) + end + + -- Startup message + if data.startup == 2 then + color(CUSTOM_COLOR, BLACK) + text(X_CNTR - 78, 55, "Lua Telemetry", MIDSIZE + CUSTOM_COLOR) + text(X_CNTR - 38, 85, "v" .. VERSION, MIDSIZE + CUSTOM_COLOR) + text(X_CNTR - 79, 54, "Lua Telemetry", MIDSIZE) + text(X_CNTR - 39, 84, "v" .. VERSION, MIDSIZE) + end + + -- Data + local X1 = 140 + local X2 = 234 + local X3 = 346 + TOP = BOTTOM + 1 + BOTTOM = 271 + + -- Box 1 (fuel, battery, rssi) + tmp = (not data.telem or data.cell < config[3].v or (data.showFuel and config[23].v == 0 and data.fuel <= config[17].v)) and FLASH or 0 + if data.showFuel then + if config[23].v > 0 or (data.crsf and data.showMax) then + text(X1, TOP + 1, (data.crsf and data.fuelRaw or data.fuel) .. data.fUnit[data.crsf and 1 or config[23].v], MIDSIZE + RIGHT + tmp) + else + text(X1 - 3, TOP, data.fuel .. "%", MIDSIZE + RIGHT + tmp) + if data.fl ~= data.fuel then + local red = data.fuel >= config[18].v and max(floor((100 - data.fuel) / (100 - config[18].v) * 255), 0) or 255 + local green = data.fuel < config[18].v and max(floor((data.fuel - config[17].v) / (config[18].v - config[17].v) * 255), 0) or 255 + data.fc = rgb(red, green, 60) + data.fl = data.fuel + end + color(CUSTOM_COLOR, data.fc) + lcd.drawGauge(0, TOP + 26, X1 - 3, 15, min(data.fuel, 99), 100, CUSTOM_COLOR) + end + text(0, TOP + ((config[23].v > 0 or (data.crsf and data.showMax)) and 23 or 9), labels[1], SMLSIZE) + end + + local val = math.floor((data.showMax and data.cellMin or data.cell) * 100 + 0.5) * 0.01 + text(X1 - 3, TOP + 42, fmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) + text(0, TOP + 51, labels[2], SMLSIZE) + if data.bl ~= val then + local red = val >= config[2].v and max(floor((4.2 - val) / (4.2 - config[2].v) * 255), 0) or 255 + local green = val < config[2].v and max(floor((val - config[3].v) / (config[2].v - config[3].v) * 255), 0) or 255 + data.bc = rgb(red, green, 60) + data.bl = val + end + color(CUSTOM_COLOR, data.bc) + lcd.drawGauge(0, TOP + 68, X1 - 3, 15, min(max(val - config[3].v + 0.1, 0) * (100 / (4.2 - config[3].v + 0.1)), 99), 100, CUSTOM_COLOR) + + tmp = (not data.telem or data.rssi < data.rssiLow) and FLASH or 0 + val = data.showMax and data.rssiMin or data.rssiLast + text(X1 - 3, TOP + 84, val .. (data.crsf and "%" or "dB"), MIDSIZE + RIGHT + tmp) + text(0, TOP + 93, data.crsf and "LQ" or "RSSI", SMLSIZE) + if data.rl ~= val then + local red = val >= data.rssiLow and max(floor((100 - val) / (100 - data.rssiLow) * 255), 0) or 255 + local green = val < data.rssiLow and max(floor((val - data.rssiCrit) / (data.rssiLow - data.rssiCrit) * 255), 0) or 255 + data.rc = rgb(red, green, 60) + data.rl = val + end + color(CUSTOM_COLOR, data.rc) + lcd.drawGauge(0, TOP + 110, X1 - 3, 15, min(val, 99), 100, CUSTOM_COLOR) + + -- Box 2 (altitude, distance, current) + tmp = data.showMax and data.altitudeMax or data.altitude + text(X1 + 9, TOP + 1, labels[4], SMLSIZE) + text(X2, TOP + 12, floor(tmp + 0.5) .. units[data.alt_unit], MIDSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + tmp2 = data.showMax and data.distanceMax or data.distanceLast + tmp = tmp2 < 1000 and floor(tmp2 + 0.5) .. units[data.dist_unit] or (fmt("%.1f", tmp2 / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) + text(X1 + 9, TOP + 44, labels[5], SMLSIZE) + text(X2, TOP + 55, tmp, MIDSIZE + RIGHT + data.telemFlags) + if data.showCurr then + tmp = data.showMax and data.currentMax or data.current + text(X1 + 9, TOP + 87, labels[3], SMLSIZE) + text(X2, TOP + 98, (tmp >= 99.5 and floor(tmp + 0.5) or fmt("%.1fA", tmp)), MIDSIZE + RIGHT + data.telemFlags) + end + + -- Box 3 (flight modes, orientation) + text(X2 + 20, TOP, modes[data.modeId].t, modes[data.modeId].f == 3 and WARNING_COLOR or 0) + if data.altHold then + bmap(icons.lock, X1 + 63, TOP + 4) + end + if data.headFree then + text(X2 + 7, TOP + 19, "HF", FLASH) + end + + if data.showHead then + if data.showDir or data.headingRef == -1 then + text((X2 + X3) * 0.5, TOP + 18, "N", SMLSIZE) + text(X3 - 4, 211, "E", SMLSIZE + RIGHT) + text(X2 + 10, 211, "W", SMLSIZE) + text(X2 + 78, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) + end + local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, (X2 + X3) * 0.5 + 4, 219, 25) + if data.headingHold then + fill((x2 + x3) * 0.5 - 2, (y2 + y3) * 0.5 - 2, 5, 5, SOLID) + else + color(CUSTOM_COLOR, GREY) + line(x2, y2, x3, y3, SOLID, CUSTOM_COLOR) + end + line(x1, y1, x2, y2, SOLID, TEXT_COLOR) + line(x1, y1, x3, y3, SOLID, TEXT_COLOR) + end + + -- Box 4 (GPS info, speed) + if data.crsf then + if data.tpwr then + text(RIGHT_POS, TOP, data.tpwr .. "mW", RIGHT + MIDSIZE + data.telemFlags) + end + text(RIGHT_POS + 1, TOP + 28, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) + else + tmp = ((data.armed or data.modeId == 6) and data.hdop < 11 - config[21].v * 2) or not data.telem + text(X3 + 48, TOP, (data.hdop == 0 and not data.gpsFix) and "-- --" or (9 - data.hdop) * 0.5 + 0.8, MIDSIZE + RIGHT + (tmp and FLASH or 0)) + text(X3 + 11, TOP + 24, "HDOP", SMLSIZE) + text(RIGHT_POS + 1, TOP, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) + end + hdopGraph(X3 + 65, TOP + (data.crsf and 51 or 23)) + tmp = RIGHT + ((not data.telem or not data.gpsFix) and FLASH or 0) + if not data.crsf then + text(RIGHT_POS, TOP + 28, floor(data.gpsAlt + 0.5) .. (data.gpsAlt_unit == 10 and "'" or units[data.gpsAlt_unit]), MIDSIZE + tmp) + end + text(RIGHT_POS, TOP + 54, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), tmp) + text(RIGHT_POS, TOP + 74, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), tmp) + tmp = data.showMax and data.speedMax or data.speed + text(RIGHT_POS + 1, TOP + 98, tmp >= 99.5 and floor(tmp + 0.5) .. units[data.speed_unit] or fmt("%.1f", tmp) .. units[data.speed_unit], MIDSIZE + RIGHT + data.telemFlags) + + -- Dividers + color(CUSTOM_COLOR, DKGREY) + line(X1 + 3, TOP, X1 + 3, BOTTOM, SOLID, CUSTOM_COLOR) + line(X2 + 3, TOP, X2 + 3, BOTTOM, SOLID, CUSTOM_COLOR) + line(X3 + 3, TOP, X3 + 3, BOTTOM, SOLID, CUSTOM_COLOR) + line(X3 + 3, TOP + 95, RIGHT_POS, TOP + 95, SOLID, CUSTOM_COLOR) + if data.crsf then + line(X3 + 3, TOP + 28, RIGHT_POS, TOP + 28, SOLID, CUSTOM_COLOR) + end + color(CUSTOM_COLOR, LIGHTGREY) + line(0, TOP - 1, LCD_W - 1, TOP - 1, SOLID, CUSTOM_COLOR) + + if data.showMax then + color(CUSTOM_COLOR, YELLOW) + fill(190, TOP - 20, 80, 20, CUSTOM_COLOR) + color(CUSTOM_COLOR, BLACK) + text(265, TOP - 20, "Min/Max", CUSTOM_COLOR + RIGHT) + end + ]] +end + +return view \ No newline at end of file From 1952d183f0e050fbc2acba25b080b1004bfa9f13 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Wed, 28 Aug 2019 08:10:44 -0400 Subject: [PATCH 04/34] Some cleanup, show FPS for testing --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11291 -> 11314 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11291 -> 11314 bytes dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3092 -> 3130 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 6533 -> 6730 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 8838 -> 8806 bytes dist/SCRIPTS/TELEMETRY/iNav/reset.luac | Bin 880 -> 922 bytes src/iNav.lua | 4 ++-- src/iNav/data.lua | 1 + src/iNav/func_h.lua | 25 ++++++++++++----------- src/iNav/nirvana.lua | 7 ++++--- src/iNav/reset.lua | 4 ++-- 11 files changed, 22 insertions(+), 19 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 9c8cb191782f56b850b355d29e1f9b6793bdb8a0..2ff085acc0c61626017be6a3eb948508e9f76268 100644 GIT binary patch delta 893 zcmZ`%J#Q015PiG$8goQ6fDXF=fn-}I75suZ+jnOus1UM)U|E}(n{aCD)anHD(#}72YQ}%5N-p7E}rMI6#%^uhvRnF>7?8yH_ z?8D%m4Z{+#c*(&T`c|2^_vV z$@YOqg`-yV)7B3CecCHhYE!4o<+=)xj$+?pUcS~At;-?F6%=nfEsMPP(z$<4b37w+ zuI9M--Dynx_N~V;qVv(-5ges0AvyYo?ttGR24*Eg_X`U{=q4yO_XcNW9&N3oNp*vN zN<~jf8qjU+ktF7cVir_PfoQVkN!k67p!6{I+&8r-{oyt!bh#o4_oGp{7OrC3aHLAj zb}r?=B#AQwU9GOT?$QpRj=zn#76O&C0 zL6wMS(b&n@n>P{EpB1mW$-~Y4P>Jh25b!`852QX8*zMik<+gSitJU~>Q+&F2qxjQ( S^yAKh&!)<=ZWZ(07k>f4eA^@d delta 910 zcmZ`%%Zd|G5IxmNkDV|oh|rnY2tpDjZd~{QH|g|Ebm2;*aR{!&A8>6~)Jawu7Y!oJ z)~(><2X1C2@fU>o8PDxbjDjvM6jgPr&N+3yWoOx!({_GK01Ja-1H=ZJLNPIl$QZS1 z&~gqjM6Kz|M13A_BJEFO6I69wBGz4fhCUv%@6hPm7|;lVDQC(tI3IP+83dW0BX;m{ z9{6Q_1b7aJb%Q|JxZ>k7LQ{fEP<<9A0xt6(6B)Vl5~$S#2L|tA+*a!nWVj@enhrVR zAvCaND1L|4p_~A{*jtM=fkPGHVZR5xX|~Y^5^V{|AR_C}!Pu;B4`^ zdp9>DJfQ}W(Nl`pC|8ny3N*@)U|E}(n{aCD)anHD(#}72YQ}%5N-p7E}rMI6#%^uhvRnF>7?8yH_ z?8D%m4Z{+#c*(&T`c|2^_vV z$@YOqg`-yV)7B3CecCHhYE!4o<+=)xj$+?pUcS~At;-?F6%=nfEsMPP(z$<4b37w+ zuI9M--Dynx_N~V;qVv(-5ges0AvyYo?ttGR24*Eg_X`U{=q4yO_XcNW9&N3oNp*vN zN<~jf8qjU+ktF7cVir_PfoQVkN!k67p!6{I+&8r-{oyt!bh#o4_oGp{7OrC3aHLAj zb}r?=B#AQwU9GOT?$QpRj=zn#76O&C0 zL6wMS(b&n@n>P{EpB1mW$-~Y4P>Jh25b!`852QX8*zMik<+gSitJU~>Q+&F2qxjQ( S^yAKh&!)<=ZWZ(07k>f4eA^@d delta 910 zcmZ`%%Zd|G5IxmNkDV|oh|rnY2tpDjZd~{QH|g|Ebm2;*aR{!&A8>6~)Jawu7Y!oJ z)~(><2X1C2@fU>o8PDxbjDjvM6jgPr&N+3yWoOx!({_GK01Ja-1H=ZJLNPIl$QZS1 z&~gqjM6Kz|M13A_BJEFO6I69wBGz4fhCUv%@6hPm7|;lVDQC(tI3IP+83dW0BX;m{ z9{6Q_1b7aJb%Q|JxZ>k7LQ{fEP<<9A0xt6(6B)Vl5~$S#2L|tA+*a!nWVj@enhrVR zAvCaND1L|4p_~A{*jtM=fkPGHVZR5xX|~Y^5^V{|AR_C}!Pu;B4`^ zdp9>DJfQ}W(Nl`pC|8ny3N*@L|h=w=@aR!ElW@iS5X66P4ujb}G-OUUPUCj>rx|$E{1M>HF zGczzAJS@+^$fCfo#F>H7tC@NKUO7SXkKvnHd-u^2!+4Sb?-(n4t;7=5<_Y Fi~v)09M%8; delta 65 zcmV-H0KWga7?c>09RVV-9!CTui-Q0Fii1GCii5ztN`r&Eivs`w!9yPa0fZj_q(cA! XN`nKwlbr-00e`c;1O*1O)e2<+&wmwD diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index b7a80c5073a96c4b316de66491c03df12ba45b89..b485b726aa06d5f0e554359957bd5f06ffb7ae17 100644 GIT binary patch delta 2133 zcmb7E-D@0G6#w0O=Oam*FI%%IA^21ug`(2enb~Bg*={s#TB*iDOG#8}{b*tze3?6U z(v4rWEsLNn5eucz=LJE0nVo57%?E8kDncnf5ZRIu1Y2+!C0wpc!a3GEt7%SGmozJ8fU* zwxr8;y&0x>O3W4ljZHhOYO^P-4Y$4fVvO!246Xcaiv3EcR zEHVwUbqO$rd@4|-?s#9KDbg}6hE^4dS9lWz`;uGRr5#ynK2qI0hK%tRpnva zYr(rDJ1xB|@xX*Ysi=Jv$tBzMc||l;YCcmE%_KF+&uu<|v9@xUXJD+Y97gK!lLzqm znsLbCQ9<@eC!jv42czMcV37$oHBl8MoTWq#`L3x+@>%4w$Y<^PO5BID;w3F$yPU2ntN9_QDwKA=`^%-M}^p= z*h;Gjn0etlakiMos4Q9f1!2X0j1}qrNG9#n#Te-@w+B(%0XmfS!xaMP=+>cyN+O4u&x=k;Rr{dBr!RY}NN zUz)MNSC5SU4X`Uv$-<{B*nxSl3$rTd z%0|AO;|3adxdr?Kiv|XW5|+s8oqjB_{kIF zgvyLuz;P~MUgafZONl*(;{?s0R>Bs`C90{xe#o49v zmzUb7opX+5k$Ew<)&AQ5v00(dnfk^43(P!8+qwF$1FOtjqV1L1CqsXlpVIDb{o?SH PVcw(d&-I_4-xB`-w{j_b delta 1911 zcmb7FO>Y}j6g}^~`KZ&xNlF!`iXzGa)+e^VuRT5A+cfJ zj8mHiMU+}Xpb!;=@(auYv0*$;$23W47ui)6tNZ|d0224jIIb-uBy2fz=bpLe-h1wy zm&2EDzI1ywxC`I~fTxaw4HdHzpgIoFfkGvQIwkyh7kDoOzGOhkTy)*G00(m;hAGL7 zCn4B&I}DH7fW=+d(ls2yL&@=G6dAJ-*dgOvLs*hw!5MgS2$W(luukN)p~Q(8NX#08 zn9pNua-gK3Txnoal1)vykuezaMIICMI^pI37~UErbR!duWF8G(Hrvv|RMPKwJ8hT2 zxDBm9*X@c*%yu$gGUWRz^T~6A&)x2_7>@&zw&XCC2R(h@vG!Bd2P8R>eqDjQQ&IQt zr0qqLxRMb~JBOm=6eu?L*-<4M#YRm2*j5#1>6~==AXFBl3s7P>D8s4PGa`z)q;!n-RcS9CkOJX%r)^-n&2~>2qieW(>gp@| zK4yy1-f*ggz7T&h)l}TP{3`93CFswGpTe@}y6nxp^A=39=<~7Dyv2WMEsCGns6qFO z^b@%FT(e-l7%&B*Dszdtl$e!@rHlryeG&PR+y_dkmo=nc$~`bopj^`!F>#eGa)w17 zx=F`;5-D`~fk`;Gu`^0F6W_tU?5(9p~@4=V%j7tu$mDGrGD3RhY+O#vQW5N{{ z>RuT)D3Qi?l6k@`!YsnDowqv&$D?dkgr3*G#*%0H5rlC#*+w|1kO8 zWSw)^ixdmm)X@zxsys4wqIo0c%3z{^A0ws|^%e_dvAF`=0}J6+0qK^+o(J(m@^|3( zirh?t z`f`cRlOsd#lO}5r`EF0fFgcIio{S+Mg-&97ODGGO5$j^g+#&8`zQhME!0$%l&SuozT)9m12`(t9cVJv%=5fY_E#xxNPZjh1JF| zybn|De7*S-iweFX!CJe%yIaF z3ZSxZ0bbB?b6Pyc;aqVq*k4lSMQWoDe#kr#{VYhFQsB3FHrIcN){+opSc4rmS%C+=iXN$F5J}sqpA-7{F z{Y+7a{qfG4H73@F5@xD#iBzswb{CSewy+4{npjd zS6K76u@B58dS<0{rT8v0SIK<4_3ii`Ge08pljhaQzs%3b`l)s0!lGgBllg1w^QmL; E55Lpri~s-t diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index dbb8412cdeb1b22319ce40ae3ea9a2e1b378f990..662042b6d681b2b450524e0f5b3e0a9a93b44944 100644 GIT binary patch delta 102 zcmZp3edaR3k|T|Yfq{=9GGn8oC!-KUL*rR4hS|Oh4B`wxHZM2B<~@v!f=m-RH`@!( zV&Q4{``&?-0SFpW-*0{@Uckbt2ILrQj*?ly$Z7;+dTwTyb7Erk1~S7o`zcs30RWO> B8T$YL delta 134 zcmaFn(&jqBk|ULgfq{=9vS6d5C!-N#Ljx}Z`@yqZ427QJd1^g;X%FwD+3rrZaykrz{08uwNh~U1U}FdIiV|~Ei-8QFN+ 0 then fill(bat, 3, 43, 14, TEXT_COLOR) fill(bat + 43, 6, 2, 8, TEXT_COLOR) - local tmp = math.max(math.min((data.txBatt - data.txBattMin) / (data.txBattMax - data.txBattMin) * 42, 42), 0) + bat - for i = bat + 3, tmp, 4 do + local lev = math.max(math.min((data.txBatt - data.txBattMin) / (data.txBattMax - data.txBattMin) * 42, 42), 0) + bat + for i = bat + 3, lev, 4 do fill(i, 5, 2, 10, CUSTOM_COLOR) end end @@ -32,9 +30,9 @@ local function title(data, config, SMLCD) if config[13].v > 0 then if data.doLogs and data.time ~= nil then - text(data.nv and 190 or 340, 0, data.time, WARNING_COLOR) + text(data.nv and 195 or 340, 0, data.time, WARNING_COLOR) else - lcd.drawTimer(data.nv and 190 or 340, 0, data.timer) + lcd.drawTimer(data.nv and 195 or 340, 0, data.timer) end end @@ -56,11 +54,11 @@ local function title(data, config, SMLCD) end end - --[[ Show FPS + --[[ Show FPS ]] data.frames = data.frames + 1 - text(180, 0, fmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) - --text(130, 0, fmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) - ]] + text(data.nv and 115 or 180, 0, fmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) + text(data.nv and 75 or 130, 0, fmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) + -- Reset colors color(WARNING_COLOR, YELLOW) @@ -70,6 +68,9 @@ local function title(data, config, SMLCD) color(WARNING_COLOR, iNavZone.options.Warning) end end + + --text(40,20,lcd.RGB(255, 100, 100),0) + --text(40,40,lcd.RGB(255, 255, 100),0) end local function gpsDegMin(c, lat) @@ -110,7 +111,7 @@ data.lastt6 = nil if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then data.widget = true - if (data.nv and (iNavZone.zone.w < 280 or iNavZone.zone.h < 450)) or (not data.nv and (iNavZone.zone.w < 450 or iNavZone.zone.h < 250)) then + if iNavZone.zone.w < data.nv and 280 or 450 or iNavZone.zone.h < data.nv and 450 or 250 then data.startupTime = math.huge function icons.nfs() lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 16, "Full screen required", SMLSIZE + WARNING_COLOR) diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 8007c1fb..aa3e5bd7 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -9,6 +9,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic --local DKMAP = 544 --rgb(0, 70, 0) local LIGHTMAP = rgb(50, 200, 50) --local DATA = rgb(50, 82, 115) + --local GREY = rgb(180, 182, 180) local DKGREY = rgb(98, 106, 115) local RIGHT_POS = 270 local X_CNTR = 134 --(RIGHT_POS + LEFT_POS [0]) / 2 - 1 @@ -87,8 +88,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Setup bmap(icons.bg, 0, TOP) color(TEXT_COLOR, WHITE) - --color(WARNING_COLOR, data.telem and YELLOW or RED) - color(WARNING_COLOR, data.telem and rgb(255, 255, 100) or rgb(255, 100, 100)) + color(WARNING_COLOR, data.telem and 65516 --[[rgb(255, 255, 100)]] or 64300 --[[rgb(255, 100, 100)]]) -- Calculate orientation if data.pitchRoll then @@ -329,8 +329,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- View overlay bmap(icons.fg, 1, 20) + --line(0, BOTTOM, RIGHT_POS, BOTTOM, SOLID, DKGREY) color(CUSTOM_COLOR, MAP) - line(1, BOTTOM + 1, RIGHT_POS, BOTTOM + 1, SOLID, CUSTOM_COLOR) + line(0, BOTTOM + 1, RIGHT_POS, BOTTOM + 1, SOLID, CUSTOM_COLOR) -- Speed & altitude tmp = data.showMax and data.speedMax or data.speed diff --git a/src/iNav/reset.lua b/src/iNav/reset.lua index 2e3f353b..57bcfcc0 100644 --- a/src/iNav/reset.lua +++ b/src/iNav/reset.lua @@ -37,9 +37,9 @@ for i = 1, 60 do data.alt[i] = 0 end ---[[ FPS stuff +--[[ Show FPS ]] data.fpsStart = getTime() data.frames = 0 -]] + return 0 \ No newline at end of file From d8762bd17bba89ba2a93b8badf8b2fca1e1a3b96 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Wed, 28 Aug 2019 19:07:30 -0400 Subject: [PATCH 05/34] Map starting to work --- dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3130 -> 3106 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 6730 -> 6722 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 8806 -> 10551 bytes src/iNav/data.lua | 3 ++- src/iNav/func_h.lua | 2 +- src/iNav/nirvana.lua | 27 ++++++++++++----------- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index def1fee48385e8839901eeab5402351c59786125..5d30859c7d540c45534d0613f573dd8913f2ad11 100644 GIT binary patch delta 29 lcmdlbu}ETqETi&9Id>LjujYH3D_DZqm>3y1U*Sq)1OSL=2&n)7 delta 53 zcmZ1^u}fltETj5HId>M}h=w=@aR!ElW@iS5X66P4ujb~>87x6;Tx_fi3=Do@h9(S~ J_i&{#0swGu4DA2_ diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index b485b726aa06d5f0e554359957bd5f06ffb7ae17..874331029de693e92328acd7dbd73a2ec10373cf 100644 GIT binary patch delta 167 zcmX?Qa>!(YEaUWza!VNN4{$UbbM$0jYw~1ZXYyjX+sMEe;c$vs+=0Ep>wwqPV~w5+ z#~DvCA7?zx%-(dEL7ItyLA-&XfzgSZLD~t(W&pCAxEUfDnwZ58Fg3u{A4F3RR0CJf l#KRy7QqREHu-TI-gh_yv0R$9k9N2)yGh{GqUdu996ab4|DMtVR delta 171 zcmX?Pa>`_aEaS|La!VNN9XK0~IeId%HF+|yGkLMxZDe4Ka5%**et^Bf>wwqP&A`8eZg=17Or%;F9#2(d<>*a4sz19Jmdk0Ve|12aM%qz5d| nh!6wnVU}b#v)P6zl1YG#iGhJ3gMk%DGB7CAIBZ_ZGFKD;qvkhF diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index 662042b6d681b2b450524e0f5b3e0a9a93b44944..30f5a4b91adca581d5ed82b5a14b22553ba6e695 100644 GIT binary patch delta 1794 zcmZuy&ube;6n-l?t5`@1nOS9JCn9Mq?XI1q%@^Tl@xV%+&U#nYnr%H9EalA z(4Ka5u}*dp?HUUGK`w<}iwiyUvbtCo*H$gX1d3Zy60&*$U400eq@}xDgN?5c}9|pP2AZhV{ST_lTyX&O4o}p6^wW%iX0RmE! z>_U@lr-yvvxT-nKn^qY@ZW*?Sn{MsYzXA$M#x4S@fAD5W1Vt1 zxoJ#L)>c6-aS~r+ge^Q=5^@+FP(ZRfHtt!5G`rv&t@Hm2IQQydO_8#lY+ss*hPv zFi?hpDtr*R(t)ql&Q9deSLKDTLp};a{yB&K>j>pTkkeFC=E9~Fv=eQj6^I)-$iy6 zUO?b^S`0g@?(Y$w@_2}qA?i&VdoD;J_6~#;PuiuP{{M|lato%-pVO+D;7zjMJ;#K( znHKfYr~};0^0W%T$D3n_mGD?gFzgde)rx^ZIN0U9h^dLI*Ebe80VC$K4$C-oIiAlzT!^nCA5KX zt%pP6DBMImPn{N~5~59tO6ayeZEotKx`#OVS}59fr&B-KSpBG|;SNHf?P`bEvzM@y zHr0nYSy#EleadNw{SpkZoKf)hwNEp>MRXBpl(fQF)zMzo_yC^oc~pNM#f_l) zl&F(&?;PyyRD&iKt*Dm`#R8{bn!Ie8sZw_ zdKZ5>c@%!QzmI2?5*GL$hER{b;x(MFc+;aL4;-n+=Ah0<@Ghbi%tnkTWVc)y@U@jP*EG)vU zw&y`Kr-P2x!~a7365=NSQ-5q18`+V(o#){ydG&>#q|tAg1?%r{wJv~{9f+2B7C3yr z{yd(Oons)Le;$}UWB-G`@o1rM_;aRw94QYLXBHNhJ_0#}lbL&q`I(Oo?aF=V?T3OX z5A+Bx(5p)eJ$vFhW7j77On*jvz(Fq0n=<}E;PQcwtU$zbqi>iGO*xG7+m#24?=9W0 zEcTgCzBT0_uFuUwcbu<)EaUu2Zv5(-eGa$#PW)L@jv<&^nmNbr+`BV>XK~?^H=rvn iKRIDfzI&~|1+MnD@VkBE$?U<(0rdXe^~+~olm7$iR=g(w delta 36 scmdlU^vq>~C1)BF0|OsJWCrU-r+K2R@(c|Ob2isX`><_hQZ{7+0LD5A*Z=?k diff --git a/src/iNav/data.lua b/src/iNav/data.lua index 77eecfe0..a6df3f0c 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -88,7 +88,8 @@ local data = { alt = {}, v = -1, simu = string.sub(r, -4) == "simu", - nv = r == "NV14", + --nv = r == "NV14", + nv = true, --msg = m + i * 0.1 < 2.2 and "OpenTX v2.2+ Required" or false, lastLock = { lat = 0, lon = 0 }, fUnit = {"mAh", "mWh"}, diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index 95db350f..a1fa5334 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -111,7 +111,7 @@ data.lastt6 = nil if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then data.widget = true - if iNavZone.zone.w < data.nv and 280 or 450 or iNavZone.zone.h < data.nv and 450 or 250 then + if iNavZone.zone.w < (data.nv and 280 or 450) or iNavZone.zone.h < (data.nv and 450 or 250) then data.startupTime = math.huge function icons.nfs() lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 16, "Full screen required", SMLSIZE + WARNING_COLOR) diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index aa3e5bd7..7a0b9ffa 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -359,8 +359,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end end ---[[ - -- Variometer + --[[ Variometer - Currently not supported in the Nirvana OpenTX firmware if config[7].v % 2 == 1 then color(CUSTOM_COLOR, DKGREY) fill(RIGHT_POS, TOP, 10, BOTTOM - 20, CUSTOM_COLOR) @@ -380,7 +379,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(RIGHT_POS + 13, TOP - 1, fmt(abs(data.vspeed) >= 9.95 and "%.0f" or "%.1f", data.vspeed) .. units[data.vspeed_unit], SMLSIZE + data.telemFlags) end end -]] + ]] -- Calc orientation tmp = data.headingRef @@ -390,11 +389,13 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local r1 = rad(data.heading - tmp) local r2 = rad(data.heading - tmp + 145) local r3 = rad(data.heading - tmp - 145) ---[[ + -- Radar - local LEFT_POS = RIGHT_POS + (config[7].v % 2 == 1 and 11 or 0) - RIGHT_POS = 479 - X_CNTR = (RIGHT_POS + LEFT_POS) * 0.5 - 1 + local LEFT_POS = 0 + RIGHT_POS = 319 + X_CNTR = 159 --(RIGHT_POS + LEFT_POS) * 0.5 - 1 + BOTTOM = 297 --BOTTOM + 150 + Y_CNTR = 222 --BOTTOM - 75 if data.startup == 0 then -- Launch/north-based orientation if data.showDir or data.headingRef == -1 then @@ -472,12 +473,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Startup message if data.startup == 2 then color(CUSTOM_COLOR, BLACK) - text(X_CNTR - 78, 55, "Lua Telemetry", MIDSIZE + CUSTOM_COLOR) - text(X_CNTR - 38, 85, "v" .. VERSION, MIDSIZE + CUSTOM_COLOR) - text(X_CNTR - 79, 54, "Lua Telemetry", MIDSIZE) - text(X_CNTR - 39, 84, "v" .. VERSION, MIDSIZE) + text(X_CNTR - 78, 182, "Lua Telemetry", MIDSIZE + CUSTOM_COLOR) + text(X_CNTR - 38, 212, "v" .. VERSION, MIDSIZE + CUSTOM_COLOR) + text(X_CNTR - 79, 181, "Lua Telemetry", MIDSIZE) + text(X_CNTR - 39, 211, "v" .. VERSION, MIDSIZE) end - +--[[ -- Data local X1 = 140 local X2 = 234 @@ -610,7 +611,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic color(CUSTOM_COLOR, BLACK) text(265, TOP - 20, "Min/Max", CUSTOM_COLOR + RIGHT) end - ]] +]] end return view \ No newline at end of file From 23544abb1dfcc8283620251185f17770a121c155 Mon Sep 17 00:00:00 2001 From: Tim Eckel Date: Fri, 30 Aug 2019 16:35:10 -0400 Subject: [PATCH 06/34] Menu may work now? --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11314 -> 11298 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11314 -> 11298 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 6722 -> 7075 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6435 -> 6524 bytes src/iNav.lua | 3 --- src/iNav/func_h.lua | 14 +++++++------- src/iNav/menu.lua | 6 +++--- 7 files changed, 10 insertions(+), 13 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 2ff085acc0c61626017be6a3eb948508e9f76268..f75b8dfbc1ba3415af7eb2928e426a411d9f9402 100644 GIT binary patch delta 638 zcmZ`$y-EW?5dQYg)8w=f#M59UTw=7+2apYy+e@rP4#Zcm6l}~0>e)n#E$u8U1i_yd z*qG#e2rJ*jxjmx@S}Y7R-|Y7@&*^RYn1z)^2N0N_*Vo~(aCNo583hDVa)<;&97uwq z2+NYr0xXa+5mJm0NSE3Gx*$i%(HCxnbHE*#Dc!Hve2g-M*h|b%Kh^hortR?58}pVY z;KYKa_;=opu_Rv+ph=3xNF}&-nQ6>@uBpNO2usKjm^vvaFOfMbLO(De;}rJoPWZnf z%s^i>LdPim&{*xs1iK(qBwfXzs-kwXC2EOnC15K9uvL$wivLaa);+NhFAsrTqEHJ|6 zWBcIRbg&Q3M;5}#x0mAUO#VxWILEoaGFh-^8ncV{;sZF8qpLsGR=3&6Zv)lR0J)TZ u&jzJA_~ndsea&>Mxi!l$zIc&srcatJA+>4Vy&SHuh-sJE4v+NZ#{DPc6s~Ll delta 654 zcmZ`$O-ma=7=C8gsmZpNg0j_v2Vs+@J=q^nMv|S4y;e#<`WHM3EtI^4w#h|un4|Qd z2k|KFADGn5diLy}@!45}6!b9g@_x+obvF7lx}0RKjR;V9x$b7!7q#Nrot=-?^l<y#iZ!tqU}Q?9CYAwj_8^g!@_w(xPavK{yKkM%#0;j^ z&B0%9X6}cV6dsW&RPpC)O|cd(9*!QpG-N>9XHvT_N=yvBv5` zs+!Sp>ND;YI0!e{(~Qh2+)+1+P`KaS?XeWthoEIJ%OULmNzpmb4v?M(_~nkwQX~&_ zyyl*$22!&>)W7&97^un&^)*UGIjS~s?iFqWHP+I?rby_IztiQDpbfG-J~q4RgJ4=a zOCm|5y(TgwQJJJ(1%E=HNm+UyQZqGiNkURgXZhbqgg(A_%#*bc(}F5)QJWn}W%};s z_4a!T`CmZ05g;)gU(V)@I3&%CyzXair}yqT*O++i?bIFic9pox-ubhbK!-e)n#E$u8U1i_yd z*qG#e2rJ*jxjmx@S}Y7R-|Y7@&*^RYn1z)^2N0N_*Vo~(aCNo583hDVa)<;&97uwq z2+NYr0xXa+5mJm0NSE3Gx*$i%(HCxnbHE*#Dc!Hve2g-M*h|b%Kh^hortR?58}pVY z;KYKa_;=opu_Rv+ph=3xNF}&-nQ6>@uBpNO2usKjm^vvaFOfMbLO(De;}rJoPWZnf z%s^i>LdPim&{*xs1iK(qBwfXzs-kwXC2EOnC15K9uvL$wivLaa);+NhFAsrTqEHJ|6 zWBcIRbg&Q3M;5}#x0mAUO#VxWILEoaGFh-^8ncV{;sZF8qpLsGR=3&6Zv)lR0J)TZ u&jzJA_~ndsea&>Mxi!l$zIc&srcatJA+>4Vy&SHuh-sJE4v+NZ#{DPc6s~Ll delta 654 zcmZ`$O-ma=7=C8gsmZpNg0j_v2Vs+@J=q^nMv|S4y;e#<`WHM3EtI^4w#h|un4|Qd z2k|KFADGn5diLy}@!45}6!b9g@_x+obvF7lx}0RKjR;V9x$b7!7q#Nrot=-?^l<y#iZ!tqU}Q?9CYAwj_8^g!@_w(xPavK{yKkM%#0;j^ z&B0%9X6}cV6dsW&RPpC)O|cd(9*!QpG-N>9XHvT_N=yvBv5` zs+!Sp>ND;YI0!e{(~Qh2+)+1+P`KaS?XeWthoEIJ%OULmNzpmb4v?M(_~nkwQX~&_ zyyl*$22!&>)W7&97^un&^)*UGIjS~s?iFqWHP+I?rby_IztiQDpbfG-J~q4RgJ4=a zOCm|5y(TgwQJJJ(1%E=HNm+UyQZqGiNkURgXZhbqgg(A_%#*bc(}F5)QJWn}W%};s z_4a!T`CmZ05g;)gU(V)@I3&%CyzXair}yqT*O++i?bIFic9pox-ubhbK!-+G|ASKnD((?ZSg zL}$E#HT$F99_8#F9;!J%F>{v_+0pQIcJT7~@X-G#2X?!)We-|+c~jbtt>$fc>}w9+$XHO# k)16-L(c{0um;6`U@WFK8gZ*Rst932e^2ZPRmS2{C0EwWhng9R* delta 404 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 literal 6435 zcmaJ`>u(!Zc0Z#Bhax3PRA@_H*9cqK`${%gZ`5LZm(KmefbSbVa(|SrZjhJod7emlo`e)A_|2ck z_zY4c)I+ogy%9m8iS;lBI--chE{BJ`!L%4-+cR+ue_ts`Ekeoy<>h9yhVpU(Ho=N<1sSciTUr}i;>m) zzTa~{M(V^^{{&X;_WS*}?~jq;86W6O2x?E<6N=GGUxD_kqCaU6>FRyc)C5(H`=V)i z=q_m8Flwf%P*t_es$tcuYHO!zw01k-wXK%fR`=>{@Y>+{D@4Bdo|%l3qQ~!va;1-& ztvu{d5t$ws))M-$HDA4@}=y zr2DDr~g(O9zU zg1=Gt8>RBYE^6+KQU-G0RK4aq_-r>B049OYO?~R~x*lll==IjFS%;tc=VtZb^W6^U zcHj%MT}PdEV1N1xGdT@xcfJtihu@$KXy5csEeV-EcxdW7=poS6=|j`nIV5ZP{`1v` zJGF}%1s58J%1DDmL=}oqDX?Ua((s6YeaG~Q2@P|p{yK15dzJ1RuhNnx6v?xG9jI#^ z^*~+ndg4noU3sJi;@+Ww%KT8OlJrf-E8bM)@zCu!pP}xPcAC}&X=m{Y&r6@<8fgUh zzUOmtPoH5=a<3bY-qX~jfT6ucqvAEk)-jfEBWB%D8=5vBSj0PVDt;nyBsb;*hV`1A z%gG#1>S)ox*W$o$QTOk$t)>xQ`uE#5p!2mDE2za|S&MUG=6C03ojBh>z1075&KTl% z=B!>1XzH`TXyY(2LOnvm-q5bwbv|KZ;iyJmgR6lvd`^9B(8l>XEpo5oJloTaWJ80F zy)M%t_Yl|8h}t}L*^yn5tBa#%&C9*iRj=AQmSaaIIHW|T^}Fo zM-ZRk=xLuF^VyE(*mq;plD0j=yvRDuO4LcKR*2a!VM1i3%V(cBsBWJ_{b$2ly6IzxQq-~rrvW_2B z`uRsyU=9pvFN!&pwcuP4L(1p`V6(+E&*vx5Ra;pa@b=2tJQq<1W!{7rLNQY zLC$uj)OQ^D$#}YerGvk$C&$k{&ONetj6ZVlHCFfW4)_^23%>W&cLtYmPw^ec_$as| z|INY-0;eB|$`Ic>=OPt}g%PiiQON{-)?)DI#{ax^TfIT=Y65p#1{mO8qZfn$>BuX^>L1IIXI;sg#GJ|{VyH+ zUpn@`wCz_qC+r7c-_iH7KHGQnE4Kc@DSbce&!g6i)yMJ;#Ctcy^;0U}qVvu>thBzx zzPp8&hL%t(U&Q;!-8U=WrhjUA5d-rp;NwC$(yM$h(&!PRjb+TO0-N}L=lu@xyZ(o9 zjCdkPzCNA^b4>=UjobBmMZN}w~QgKJ-e6q z6YmLbdwYTw`rfL16;u;EW8Pt&E6-Mrw7m=sB>INWC(zS`9Iu3aNuMK)v&ViS4dCR( z9(W|44&%;89Jtevy9peS+kjI2E@|zblIHtO$iQmoub+9mMP1dsEun91)wqwOexHE8 z=u)Ah`d$yke1aZt2}P;CKoOtla?k$KN3?`kf0d{{cQ=9W%4{QoJCO0_+!=4=z`ZSdPj|uWT$_?LP8MD#GZ-QL2+leKr?{zd)|=&6X1=vuYJz0A;-pbK7p(B2c6r#Jl%2XT;@7gt0Atl&%)h?98cC$(O)Dt z?w?y9zQuoL_;>tip%)(_aV=sKM;y`|j=18AzUdM_bcsK5iJU_;<{d&zxS~IGiBQDj zh55PED5*8bVFephr6(XKY-;*x>U**-wa>NW#6y`dD~wsn+L_# z=L@AYNDhga;mLxdxkkPJ`Y-&`8<8e+?*2bsmix4A@EUmn?%7x|SIVuxT<`t^{^^Ox zD6SQ9E7@=~pDmU)98a#I#3ahGZ~zn8Z034;<#jv3czPYyZ2C$zyPgFIoKz}(3&u*h z(q<-WpG)UU%bPcIC2~r7(XGI5U-tNM;##_xE39P!g`KljOs@lOPG81mV{)ayHDC|3 z^YQR;EW_Z$v+2x4F`GTX=B#Ju<`O4ZgJ8LkyXi8|jn>A%!9BOe;c&#!%~HVz^Rm7C zfMnRSx5C#7`BM4@(qwP(t7G9f@(3qZ3Qm(~Gjq0VVl$f$AK@SRkae3c% zaQS5`BAcI&A0L$ZbJLTFF<1YO?OW=WyMNK%|I7|!rMR)`O8(lGtlORVvkh+cgt@sBYbaU3h0Ur zQWR-)1+4@BH`2xH^4j77kZCL==G`n9Gi`1iNir3c6c5``A*64)!&T3fk!ikQH>a(2 z^0uFf$X5i9fc;h^rml_8;#y>Ea8^$D?05`!EBm|j(q+7roXn-m-+$?ctKmzRFJrO0 z88<>{vcM0Je5>8(HP6>AKd<31ITioDU9H)K76+az``-8P%l;3BBu@Qu|F?09N&g3< Cc65;d diff --git a/src/iNav.lua b/src/iNav.lua index ad4c4c22..a53ad0ec 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -465,9 +465,6 @@ local function run(event) end -- On Horus use sticks to control the menu event = icons.clear(event, data) - if data.nv then - event = 0 - end else lcd.clear() end diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index a1fa5334..ca87c621 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -170,19 +170,19 @@ function icons.menu(config, data, icons, prev) -- Aircraft symbol preview if data.configStatus == 27 and data.configSelect ~= 0 then lcd.setColor(CUSTOM_COLOR, 982) -- Sky - lcd.drawFilledRectangle(356, 111, 123, 31, CUSTOM_COLOR) + lcd.drawFilledRectangle(LCD_W - 124, (data.nv and 28 or 111), 123, 31, CUSTOM_COLOR) lcd.setColor(CUSTOM_COLOR, 25121) -- Ground - lcd.drawFilledRectangle(356, 142, 123, 31, CUSTOM_COLOR) - lcd.drawBitmap(icons.fg, 355, 110, 50) - lcd.drawRectangle(355, 110, 125, 64, TEXT_COLOR) + lcd.drawFilledRectangle(LCD_W - 124, (data.nv and 59 or 142), 123, 31, CUSTOM_COLOR) + lcd.drawBitmap(icons.fg, LCD_W - 125, (data.nv and 27 or 110), 50) + lcd.drawRectangle(LCD_W - 125, (data.nv and 27 or 110), 125, 64, TEXT_COLOR) end -- Return throttle stick to bottom center if data.stickMsg ~= nil and not data.armed then lcd.setColor(CUSTOM_COLOR, BLACK) - lcd.drawFilledRectangle(20, 128, 439, 30, CUSTOM_COLOR) + lcd.drawFilledRectangle(data.nv and 6 or 20, 128, data.nv and 308 or 439, 30, CUSTOM_COLOR) lcd.setColor(CUSTOM_COLOR, YELLOW) - lcd.drawRectangle(19, 127, 441, 32, CUSTOM_COLOR) - lcd.drawText(28, 128, data.stickMsg, MIDSIZE + CUSTOM_COLOR) + lcd.drawRectangle(data.nv and 5 or 19, 127, data.nv and 310 or 441, 32, CUSTOM_COLOR) + lcd.drawText(data.nv and 14 or 28, data.nv and 133 or 128, data.stickMsg, (not data.nv and MIDSIZE or 0) + CUSTOM_COLOR) end end diff --git a/src/iNav/menu.lua b/src/iNav/menu.lua index 39a75deb..02facc14 100644 --- a/src/iNav/menu.lua +++ b/src/iNav/menu.lua @@ -1,11 +1,11 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, FILE_PATH, SMLCD, FLASH, PREV, NEXT, HORUS, env) - local CONFIG_X = HORUS and 90 or (SMLCD and 0 or 46) - local TOP = HORUS and 37 or 11 + local CONFIG_X = HORUS and (data.nv and 10 or 90) or (SMLCD and 0 or 46) + local TOP = HORUS and (data.nv and 107 or 37) or 11 local LINE = HORUS and 22 or 9 local RSIDE = HORUS and 200 or 83 local GPS = HORUS and 45 or 21 - local ROWS = HORUS and 9 or 5 + local ROWS = HORUS and (data.nv and 12 or 9) or 5 local FONT = HORUS and 0 or SMLSIZE local text = lcd.drawText local min = math.min From 7b53618cb9b050bdc48baed2d02756160f24b2b3 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sat, 31 Aug 2019 01:19:59 -0400 Subject: [PATCH 07/34] Config menu and controls working --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11298 -> 11306 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11298 -> 11306 bytes dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3106 -> 3248 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7075 -> 7942 bytes dist/SCRIPTS/TELEMETRY/iNav/func_t.luac | Bin 3726 -> 3726 bytes dist/SCRIPTS/TELEMETRY/iNav/horus.luac | Bin 15693 -> 15613 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6524 -> 6590 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 10551 -> 10388 bytes src/iNav.lua | 4 +- src/iNav/data.lua | 30 +++++++++----- src/iNav/func_h.lua | 49 ++++++++++++++++++----- src/iNav/func_t.lua | 2 +- src/iNav/horus.lua | 2 - src/iNav/menu.lua | 18 +++++---- src/iNav/nirvana.lua | 18 ++++----- 15 files changed, 80 insertions(+), 43 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index f75b8dfbc1ba3415af7eb2928e426a411d9f9402..71ac84de814659742101c876837661130daac9b5 100644 GIT binary patch delta 72 zcmZ1!u_|IiuPT#}@Z^5gBa9A{L)0o2n2s_rFtaimjk_iAyBN06S diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index f75b8dfbc1ba3415af7eb2928e426a411d9f9402..71ac84de814659742101c876837661130daac9b5 100644 GIT binary patch delta 72 zcmZ1!u_|IiuPT#}@Z^5gBa9A{L)0o2n2s_rFtaimjk_iAyBN06S diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index 5d30859c7d540c45534d0613f573dd8913f2ad11..746c5903606711ec7acc0c5a99c4b54f25f14a0c 100644 GIT binary patch delta 1505 zcmZuw-ES0C6hHUQ2g3kv-*%fu%7Y)#7h>Y8$=%uPE~VHZ+p#IMb*a$@5~2yHuXFb< zX~Bea=6J=N1rh5L^Q{GOx@cHYTj@;7oqVBBvPSL~bv%oDVo_3U(9)=S)E#e<5&=j_Ut~=QI5ONiSrW_vk5z(*U5aDkairBvdyyT~Gbaj*y;oV*JmAKYWxSi^OEy1m%gVu2#8FYBlw_zcmTL3XchHu*t& z3f}r6dt&;Q7bnxVJu!2~OJ;ue#OrrAEuc!ox;yn>#@7Uz5=+iu!FhGSNnpadC92-r zNsG`YsqK^#_PAaf&h(0ej)kk~FjZ*X)?dwBaERjbI8|9NS&<+G$n+2}$u9UVPFqR- z&Wi7=XB;Htx-mw8%~@;)ItYZ0Sgw+{BjdMN3-4BC%3CUD zg}WoyT4B`QS8o*3`a{ug(^6}sxu?()Xajj$eJrZC+Ci&c9nDP#q;N}xIyn-xOB>Z) kQuJ2scY6Ds7oIOX#`lagqTHk3`f7dbHN!3cW;V|?i&bhs5oU3>JKm`1~vQ)AAIo4+?gtBn{U2*&iTG`m$@@pKOP@xOs``^>q#2T z$OjWdgG^8^A-Ds~vP6k_qOlAai-M@m;c@|bG2w7Bph3?VjJ`qd5d~i7uz&Te*5eLz zBAHC53Y@tz4z(N)YS&|&g1{`5L-$DyUioRtf5%!+2qSUB} z)e|4~Y8h~Y(DqTd6aH97nI(Vnw$Y9fLWz zvpN0|8Xu9Ew4hc{z-!FQd|WTF2x8K&3Aj;jF<6+-S-K8>=X~sjnCH{Fpgb_<=XF5| zU(k9*s9)5&#>*ylHMeYHzB25)CM_2p;t1@i3>SMQrM}r2FwN%k( zek!K>_%&Tu750s3pXv}_*Ln%x(0Wavr}<4?5EA^BE?5;BjBCAwZ)<&Zs82{Pje=D= zu{%Egy;F_dQvY2~cR1;dWdLPm(k$O!QS86ln` zBg8XggqTD|h$-YL+v@X+7 zrJ1!=>aBk{EfK@YiAC06v6A&T`(xhcsBqa7mtO5#TYY~wtcZq`m>W{g9Ju%JVFkAd zeQRmL@-8<2fKxExwb`JEG(-eX{GA9zZ*a+*@QG)L$c*7}?D)|m{fEemc;gcXD2nX= z^2PFj>Pie#ySw{3cXsz}OSR@VRcx%O`h)9iZ`+#RR}pUx$*$h6zSj26u5L1`gSzdh t9lQFHovB1eekr1+2cn0K>802YRvS!J#uwNvAc(VWi diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index ac70346e68331a8a88c065a2daa26ce9d3580afa..b05af13b6d122f3a8f651345aef8994e1c777639 100644 GIT binary patch delta 3713 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 delta 2879 zcmb7GOK;p%6#nk@EAKQ7WKyPS1uPH}8y0{N0{M~HNt!^LgsM=Xf}jf|Ks+iIYv(kWsM_z9e` zf6^P!6jqB|+^JoR;&JRK9*C$Mhvcxd6Y#arRlrh>&#BM+XZ=4HdTY{N60?SG8;HET zs)WtU%0#!Al=?nYOtRK5X1$6`Sx_U)4O+a`tpbKp-dkvC>zEh5spi0&MAMTq!Gu-O z@X^q!cv8nfvrpzDvZE-cXiBFMR3xSb zcal+@m81mj&;UK&UfiYl6?^P+ zo|VTAU-@IgH^MLJFy$~lrb`MNE!$>oVS^RGt}U2~!BMeY3ZJnZG;9d!5MA#f4u)1< zV8@oDHz!(liDw1gZRAX(xr-J&*0w!5oGaW0*scKX5~3ydLj)aRcOk?!30M`_mHW=*tL6S)LL z58Cu#PJ~KCFGs>;PEd}{E|tssx%X8LJ`qs$a$PTH`%G?3Q~2ao8}sCZT;D?2p@Yz2 z2khFf++I|Iq}38+72@K&YJ*O8(|SScMJ+~jR1qDDlVjaNq##iX+Mmx!L}uQ3=%u`a z9kRc#TJ$O+C!}g}qJ?X9kB5PV+b1qbK_pJCTNTBn<5cN!2;7~$bLRuc3}PX`*KO0J z>x-|Pf8kAZV=|uoIrr^-<`ms6o!&aP`OM}ye`RBH3+8kkS~|0`b%#fBFJx~tXR}`#_gW^Mpm^== zESzpmd_}k4(ND+N*V$e3i(x(^ET<%oUEaWqFbfwJ^SJMLh$0OOj$kTQP>e0&NoS9@ zqCM=;dr^&eLFbLrJ(VM7pm6Bb9~<*T|t| z-pFT#Ra`?;5zG#`m9mwg>H-pVwie|$^zN!fIngMhViaA`^vNe}EZEpUwKE3N^RE`B z(dvMNsu?0F#s(y89Fa3#lhhp1_<*ArCyojD@{_OMCueOKFq#+uQlDExeV-UOCaWQb ztaz{cc}NABe0|@iB3H#sx?Gp7klW=UnnAfSvIm=&v)`K!kJLkoZ2su|+3HbO9^lz0 bM^9&e9(^=>Y~eBO^7D3QD diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac index a1f4852c650273e4772e31c66233d282a8bf25c8..eca75941740f5d2275146ff2fea8cf4c214a2778 100644 GIT binary patch delta 907 zcmZuv%Z}4P5UieYJcc|tdeJHp{E5d2Hc7}m(u!~KOpxFfR{JabK-!=f0piGI1%I;A z_DnX(1~^zfqj7gtb=79P8DHNt37-7{kWv9-3uQgv<=b%qQiQ6s7+dK0?(L&@i;i0T z+dFi&)#j-htcr=sk-0IA@P zWEBC(>`B==lBz`EuvC$l@!e?<277g3d%W*qZ-hW5+k1W5o(Qo%gXat^mDCd<*aU{* zC#O?CgW;K~q}KFJeXw(MevS>3?syKfp5rI2^|jnT(n2%!@zy&Ec8#SDxfV!&L$;5~ z&LYrDQZ7|uZ97d0<+N`zY^9PG@XvzXOvK;P=@<5{IjCA;s`A2|dj{=l{~fj6sTIDc z;9<=RTm`S?9Fzq=^DSH@*@-(j0qSxN$qfaon@TO?TF=&Nmxvy@ zo-=;=5Ge6a2n7Ew0>N$cPwcZQ0EYaWgDj6A|HBBOG`wi`!yl6nHl8U`eTz^JTq>S|7x1=`Efn<$sv>w0 zBxcw7A;7`%+OsqB{jH{}>8HEOVDcS6iyU3v5D8%Qxpg@l5#qw)C5H)h)<65YMNNhI zB8=J=rjNOXK3vio@8zO zu+Y@3>F=gP&k(zsSUu}NUlSQB_#xtlw>S?3*kt)Y0kul9r8f;E%Z&$Bq2usN3RrMz{{2mO9en@DJcsW5rFUYO~r=_qaZ&gCP- zb{-b}M5Of8TDLZcVC+K**0+mv`J?WxX6mnH^CSON?N}|brYuj6J%iyyHc0Gww8UBD zJxtscPHE?7+AG(9W6h5DwpVc+RJ^s;3AyXLCuhyTHLH>`FgPMS;OnTlp1go}x5 lDRIALEt=we=xDMJqq7q{ZxwJd!DqG2v;7yy*U{kP>)#tW_Fw=2 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/horus.luac b/dist/SCRIPTS/TELEMETRY/iNav/horus.luac index 76650a64aedc6b725b0227d46626fb850d6ace27..9b736a47864fddbc9057ea823baa1d36c749f31b 100644 GIT binary patch literal 15613 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 literal 15693 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 AR{#J2 literal 6524 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 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index 30f5a4b91adca581d5ed82b5a14b22553ba6e695..0782e95c6f3a13140f7353a762af3938b17f8cd6 100644 GIT binary patch literal 10388 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 HK9Bi-c6zY_ literal 10551 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 diff --git a/src/iNav.lua b/src/iNav.lua index a53ad0ec..8c3fef5f 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -486,7 +486,7 @@ local function run(event) data.v = 9 end tmp = config[30].v - view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, FILE_PATH, SMLCD, FLASH, PREV, NEXT, HORUS, env) + view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, icons, FILE_PATH, SMLCD, FLASH, PREV, NEXT, HORUS, env) if HORUS then icons.menu(config, data, icons, tmp) end @@ -528,7 +528,7 @@ local function run(event) collectgarbage() -- Paint title - title(data, config, SMLCD) + title(data, config, icons, SMLCD) return 0 end diff --git a/src/iNav/data.lua b/src/iNav/data.lua index a6df3f0c..ba081432 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -10,15 +10,6 @@ local function getTelemetryUnit(n) return (field and field.unit <= 10) and field.unit or 0 end -local tx = string.sub(r, 0, 2) -if HORUS or string.sub(r, 0, 3) == "x9e" or string.sub(r, 0, 6) == "x9lite" then - tx = "x7" -end -local tmp = tx == "x9" and EVT_PLUS_FIRST or (tx == "xl" and EVT_UP_FIRST) -local PREV = tx == "x7" and EVT_ROT_LEFT or tmp -tmp = tx == "x9" and EVT_MINUS_FIRST or (tx == "xl" and EVT_DOWN_FIRST) -local NEXT = tx == "x7" and EVT_ROT_RIGHT or tmp -local MENU = tx == "xl" and EVT_SHIFT_BREAK or (HORUS and EVT_SYS_FIRST or EVT_MENU_BREAK) local general = getGeneralSettings() local distSensor = getTelemetryId("Dist") > -1 and "Dist" or (getTelemetryId("0420") > -1 and "0420" or "0007") local data = { @@ -88,11 +79,28 @@ local data = { alt = {}, v = -1, simu = string.sub(r, -4) == "simu", - --nv = r == "NV14", - nv = true, + nv = r == "NV14", --msg = m + i * 0.1 < 2.2 and "OpenTX v2.2+ Required" or false, lastLock = { lat = 0, lon = 0 }, fUnit = {"mAh", "mWh"}, } +if data.nv then + EVT_SYS_FIRST = 1542 + EVT_ROT_LEFT = 57088 + EVT_ROT_RIGHT = 56832 + EVT_ENTER_BREAK = 514 + EVT_EXIT_BREAK = 516 +end + +local tx = string.sub(r, 0, 2) +if HORUS or string.sub(r, 0, 3) == "x9e" or string.sub(r, 0, 6) == "x9lite" then + tx = "x7" +end +local tmp = tx == "x9" and EVT_PLUS_FIRST or (tx == "xl" and EVT_UP_FIRST) +local PREV = tx == "x7" and EVT_ROT_LEFT or tmp +tmp = tx == "x9" and EVT_MINUS_FIRST or (tx == "xl" and EVT_DOWN_FIRST) +local NEXT = tx == "x7" and EVT_ROT_RIGHT or tmp +local MENU = tx == "xl" and EVT_SHIFT_BREAK or (HORUS and EVT_SYS_FIRST or EVT_MENU_BREAK) + return data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU \ No newline at end of file diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index ca87c621..3fb6b5a1 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -1,6 +1,6 @@ local config, data, FILE_PATH = ... -local function title(data, config, SMLCD) +local function title(data, config, icons, SMLCD) local text = lcd.drawText local fill = lcd.drawFilledRectangle local color = lcd.setColor @@ -45,7 +45,7 @@ local function title(data, config, SMLCD) if data.configStatus > 0 then color(CUSTOM_COLOR, 12678) -- Dark grey fill(0, 30, 75, (22 * (data.crsf and 1 or 2)) + 14, CUSTOM_COLOR) - lcd.drawRectangle(0, 30, 75, (22 * (data.crsf and 1 or 2)) + 14, TEXT_COLOR) + icons.rectangle(0, 30, 75, (22 * (data.crsf and 1 or 2)) + 14, TEXT_COLOR) text(4, 37, "Sats:", 0) text(72, 37, data.satellites % 100, RIGHT + tmp) if not data.crsf then @@ -120,10 +120,20 @@ if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then end function icons.clear(event, data) - lcd.setColor(CUSTOM_COLOR, 264) --lcd.RGB(0, 32, 65) + lcd.setColor(CUSTOM_COLOR, data.nv and (data.configStatus > 0 and lcd.RGB(98, 106, 115) or 12942) or 264) --lcd.RGB(50, 82, 115) & lcd.RGB(0, 32, 65) lcd.clear(CUSTOM_COLOR) + lcd.setColor(TEXT_COLOR, WHITE) + lcd.setColor(WARNING_COLOR, data.telem and (data.nv and 65516 or YELLOW) or (data.nv and 64300 or RED)) --lcd.RGB(255, 255, 100) & lcd.RGB(255, 100, 100) + if event == 0 or event == nil then event = 0 + if data.nv then + EVT_SYS_FIRST = 1542 + EVT_ROT_LEFT = 57088 + EVT_ROT_RIGHT = 56832 + EVT_ENTER_BREAK = 514 + EVT_EXIT_BREAK = 516 + end if not data.armed then data.stickMsg = (data.throttle >= -940 or math.abs(getValue(data.hctrl_id)) >= 50) and "Return throttle stick to bottom center" or nil if data.throttle > 940 and getValue(data.hctrl_id) > 940 and math.abs(getValue(data.hcurx_id)) < 50 and math.abs(getValue(data.hcury_id)) < 50 then @@ -159,6 +169,13 @@ function icons.clear(event, data) if data.lastt6 == 0 then data.lastt6 = nil end + --[[ + lcd.setColor(CUSTOM_COLOR, WHITE) + lcd.drawText(0,400,"t " .. data.throttle,CUSTOM_COLOR) + lcd.drawText(0,420,"l " .. getValue(data.hctrl_id),CUSTOM_COLOR) + lcd.drawText(0,440,"x " .. getValue(data.hcurx_id),CUSTOM_COLOR) + lcd.drawText(0,460,"y " .. getValue(data.hcury_id),CUSTOM_COLOR) + ]] end return event end @@ -167,22 +184,36 @@ function icons.menu(config, data, icons, prev) if config[30].v ~= prev then icons.fg = Bitmap.open(FILE_PATH .. "pics/fg" .. config[30].v .. ".png") end + -- Aircraft symbol preview if data.configStatus == 27 and data.configSelect ~= 0 then - lcd.setColor(CUSTOM_COLOR, 982) -- Sky + lcd.setColor(CUSTOM_COLOR, data.nv and 13660 or 982) -- Sky lcd.drawFilledRectangle(LCD_W - 124, (data.nv and 28 or 111), 123, 31, CUSTOM_COLOR) - lcd.setColor(CUSTOM_COLOR, 25121) -- Ground + lcd.setColor(CUSTOM_COLOR, data.nv and 37799 or 25121) -- Ground lcd.drawFilledRectangle(LCD_W - 124, (data.nv and 59 or 142), 123, 31, CUSTOM_COLOR) lcd.drawBitmap(icons.fg, LCD_W - 125, (data.nv and 27 or 110), 50) - lcd.drawRectangle(LCD_W - 125, (data.nv and 27 or 110), 125, 64, TEXT_COLOR) + icons.rectangle(LCD_W - 125, (data.nv and 27 or 110), 125, 64, TEXT_COLOR) end -- Return throttle stick to bottom center if data.stickMsg ~= nil and not data.armed then lcd.setColor(CUSTOM_COLOR, BLACK) - lcd.drawFilledRectangle(data.nv and 6 or 20, 128, data.nv and 308 or 439, 30, CUSTOM_COLOR) + lcd.drawFilledRectangle(data.nv and 6 or 20, data.nv and 270 or 128, data.nv and 308 or 439, 30, CUSTOM_COLOR) lcd.setColor(CUSTOM_COLOR, YELLOW) - lcd.drawRectangle(data.nv and 5 or 19, 127, data.nv and 310 or 441, 32, CUSTOM_COLOR) - lcd.drawText(data.nv and 14 or 28, data.nv and 133 or 128, data.stickMsg, (not data.nv and MIDSIZE or 0) + CUSTOM_COLOR) + icons.rectangle(data.nv and 5 or 19, data.nv and 269 or 127, data.nv and 310 or 441, 32, CUSTOM_COLOR) + lcd.drawText(data.nv and 14 or 28, data.nv and 275 or 128, data.stickMsg, (data.nv and SMLSIZE or MIDSIZE) + CUSTOM_COLOR) + end +end + +function icons.rectangle(x, y, w, h, color) + if data.nv then + w = w - 1 + h = h - 1 + lcd.drawLine(x, y, x + w, y, SOLID, color) + lcd.drawLine(x + w, y, x + w, y + h, SOLID, color) + lcd.drawLine(x + w, y + h, x, y + h, SOLID, color) + lcd.drawLine(x, y + h, x, y, SOLID, color) + else + lcd.drawRectangle(x, y, w, h, color) end end diff --git a/src/iNav/func_t.lua b/src/iNav/func_t.lua index b22ba09b..3b059b06 100644 --- a/src/iNav/func_t.lua +++ b/src/iNav/func_t.lua @@ -1,6 +1,6 @@ local config, data, FILE_PATH = ... -local function title(data, config, SMLCD) +local function title(data, config, icons, SMLCD) lcd.drawFilledRectangle(0, 0, LCD_W, 8, FORCE) lcd.drawText(0, 0, model.getInfo().name, INVERS) if data.doLogs and data.time ~= nil then diff --git a/src/iNav/horus.lua b/src/iNav/horus.lua index 648df8dd..9dec7679 100644 --- a/src/iNav/horus.lua +++ b/src/iNav/horus.lua @@ -86,8 +86,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Setup bmap(icons.bg, 0, TOP) - color(TEXT_COLOR, WHITE) - color(WARNING_COLOR, data.telem and YELLOW or RED) -- Calculate orientation if data.pitchRoll then diff --git a/src/iNav/menu.lua b/src/iNav/menu.lua index 02facc14..a86df288 100644 --- a/src/iNav/menu.lua +++ b/src/iNav/menu.lua @@ -1,8 +1,8 @@ -local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, FILE_PATH, SMLCD, FLASH, PREV, NEXT, HORUS, env) +local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, icons, FILE_PATH, SMLCD, FLASH, PREV, NEXT, HORUS, env) local CONFIG_X = HORUS and (data.nv and 10 or 90) or (SMLCD and 0 or 46) local TOP = HORUS and (data.nv and 107 or 37) or 11 - local LINE = HORUS and 22 or 9 + local LINE = HORUS and (data.nv and 28 or 22) or 9 local RSIDE = HORUS and 200 or 83 local GPS = HORUS and 45 or 21 local ROWS = HORUS and (data.nv and 12 or 9) or 5 @@ -58,12 +58,14 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, end if HORUS then - lcd.setColor(CUSTOM_COLOR, GREY) - lcd.drawFilledRectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, LINE * (ROWS + 1) + 12, CUSTOM_COLOR) - lcd.setColor(CUSTOM_COLOR, 12678) -- Dark grey - end - if not SMLCD then - lcd.drawRectangle(CONFIG_X - (HORUS and 10 or 5), TOP - (HORUS and 7 or 2), LCD_W - CONFIG_X * 2 + (HORUS and 20 or 10), LINE * (ROWS + 1) + (HORUS and 12 or 1), SOLID) + if not data.nv then + lcd.setColor(CUSTOM_COLOR, GREY) + lcd.drawFilledRectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, LINE * (ROWS + 1) + 12, CUSTOM_COLOR) + end + icons.rectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, LINE * (ROWS + 1) + 12, SOLID, TEXT_COLOR) + lcd.setColor(CUSTOM_COLOR, data.nv and LIGHTGREY or 12678) -- Dark grey + elseif not SMLCD then + lcd.drawRectangle(CONFIG_X - 5, TOP - 2, LCD_W - CONFIG_X * 2 + 10, LINE * (ROWS + 1) + 1, SOLID) end -- Special limit cases diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 7a0b9ffa..a3e39ab8 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -1,14 +1,14 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) local rgb = lcd.RGB - local SKY = rgb(50, 171, 230) - local GROUND = rgb(148, 118, 58) + local SKY = 13660 --rgb(50, 171, 230) + local GROUND = 37799 --rgb(148, 118, 58) --local SKY2 = 8943 --rgb(32, 92, 122) --local GROUND2 = 20996 --rgb(81, 65, 36) local MAP = rgb(50, 150, 50) --local DKMAP = 544 --rgb(0, 70, 0) local LIGHTMAP = rgb(50, 200, 50) - --local DATA = rgb(50, 82, 115) + --local DATA = 12942 --rgb(50, 82, 115) --local GREY = rgb(180, 182, 180) local DKGREY = rgb(98, 106, 115) local RIGHT_POS = 270 @@ -87,8 +87,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Setup bmap(icons.bg, 0, TOP) - color(TEXT_COLOR, WHITE) - color(WARNING_COLOR, data.telem and 65516 --[[rgb(255, 255, 100)]] or 64300 --[[rgb(255, 100, 100)]]) -- Calculate orientation if data.pitchRoll then @@ -422,7 +420,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end if data.altMin < -1 then cy = BOTTOM - (-data.altMin * factor) - color(CUSTOM_COLOR, LIGHTGREY) + color(CUSTOM_COLOR, BLACK) line(RIGHT_POS - 58, cy, RIGHT_POS - 1, cy, DOTTED, CUSTOM_COLOR) if cy < 142 then text(RIGHT_POS - 59, cy - 8, "0", SMLSIZE + RIGHT) @@ -473,10 +471,10 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Startup message if data.startup == 2 then color(CUSTOM_COLOR, BLACK) - text(X_CNTR - 78, 182, "Lua Telemetry", MIDSIZE + CUSTOM_COLOR) - text(X_CNTR - 38, 212, "v" .. VERSION, MIDSIZE + CUSTOM_COLOR) - text(X_CNTR - 79, 181, "Lua Telemetry", MIDSIZE) - text(X_CNTR - 39, 211, "v" .. VERSION, MIDSIZE) + text(X_CNTR - 78, 192, "Lua Telemetry", MIDSIZE + CUSTOM_COLOR) + text(X_CNTR - 38, 222, "v" .. VERSION, MIDSIZE + CUSTOM_COLOR) + text(X_CNTR - 79, 191, "Lua Telemetry", MIDSIZE) + text(X_CNTR - 39, 221, "v" .. VERSION, MIDSIZE) end --[[ -- Data From b97b405b231f916da055c6e131814144a1b8bbe8 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sat, 31 Aug 2019 16:36:38 -0400 Subject: [PATCH 08/34] Cleaned up missing event constants --- dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3248 -> 3130 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7942 -> 7818 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 10388 -> 10347 bytes dist/WIDGETS/iNav/main.lua | 11 ++++++++- dist/WIDGETS/iNav/main.luac | Bin 977 -> 1148 bytes src/iNav/data.lua | 27 ++++++++--------------- src/iNav/func_h.lua | 22 ++++-------------- src/iNav/nirvana.lua | 6 ++--- 8 files changed, 26 insertions(+), 40 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index 746c5903606711ec7acc0c5a99c4b54f25f14a0c..def1fee48385e8839901eeab5402351c59786125 100644 GIT binary patch delta 1340 zcmZuwX-^YD7=CA`2ZtQ$2TBOy7c?e*^AAkBElBZ508Q~~Vq(-Ul6ZXXv}0%jYB2Ri z!~^dO1P?%Q%ONo97}Ut(mQiXbVZB9sO98 zXpjlYM+LWlS&k^WNHmruV@VJ-SzMN&m!lRZ0~++K!DtzJN)&mM#s1ZET8~)JiDZ@; z6cI7rBuSRCu?#I?(I&xU!~!WmG834j4c=ywBBafsm`N=$co9N|T(-->F@%G=l;>Zd z@ezqdi>it|USnSE;%13W5RP-l-cs+gN=fip) zzpZ`s{=6}r)8OMfTCd=7tv7mlhTqi&pWyejVZ9%4U+We8KsN6-U7b4%hiW73KH1yfo9^i9>FuLXgXi0w i*t0Jk>q$hr3o8LNJrF!$Os|B0vBJ;l)O5af8~Y7r0eVIN delta 1477 zcmZuwO>Yxd6us}w2g3yF?CdClbORM^`WK$ZvP}pul{27(Bz1zy0tpGJ(Dgh&qXcNH z2Ha9wNa+VHwDcnoK#;PS3{tmrfhwU0kv+eFUC*26F$rMl>dram-gEEsyjdQhsoi41>c3O2ntm>X`x;J|S3`8?}ObIiZc zSaPXPst+`8=6Ly>c@gUq^UXPNK5tl2o9SZ8o$f*xvPSObbsb~W!(SS`FW0{^dJkVT z`j%Y(+UQ#-?hd$Q3by72-_v$me?&J%`zmWSc`0DX@ zKL0nqiihug75;#X2!BLIgg+r8!fVKg@MmO1_zN;3ypD_rZy?|B)96>kZ+J$8H<54p z!J*&5{o$ui5YeCD5aC}Kiuhm=c+pSe=++1)!n?cWD{;G~a68pgTY_6j2e7SVW8$e@ zB$5?ewhEWJ_V$=KjIUrl$M1|NqP^fu^bG*~enWWhtO?aRz-?HQWT0v1^%WNcTnCJl#y zwMR1~EwU4fIN{|8TRPGvH?gIA)sof_NjgK+`Oj&4n~3P-sgI8>9dwU#&jHfErNn#5 zJlDqK$xn`S?)&4h`wl?$P}Ce9A8po#8>11K>e40QZtZG~Flz3r)^cg>h3K_usWDvN zlWPgI{%%|KKvZosgGRMH(lzau!Y$v9R<%U|?qA-Pw(rGWp&6?tMSrd9tU#h+SVg|o@KV&s z5d~Tpzj6sA#sY00a23}@RfB6$!-*s@fkY-dVoH+FsLqnl9oR+Z${p@u8;<`CZNYq6 zr%+{WbXJUxrZR*xp5g)!Cj@K|z17*qaH=`bYu-Vhu&?J^LKIT*TWthsT@H^BD^8M#X>IGRD(#T`jp|9O+eSl0GQ+%rn%P zV2+_lQJIl*lVZkw-dLGL8=}h4Ra|Kkr76S5zeGlJ9P?9{0K=u^ycT^~_Bes6-ffw* z{0A0qd8ExTv6<^r_h^$-Z-Q_yf4RQ9YOxIH=db+tI^}rQ5eO8 z1oq9U6%3xk T`g(fHduLe%mp@KF-HydSa2)9_ delta 1052 zcmZWnO=}ZT6g_X6Oa{RZ3hgAu(t>VuBcg~K%bmtanp6;`L240#%l-v7xg(MRzh%@G zYX5^!MBKdr>9@KU1o!<5F1&BvL>s%B``)?d+;iTYCpQPPAFhvk9|1V z18&^-*JJK<0~PfJbtQUmxL?V%J+KG{B`Z!2yYVesv*MAStmqK~t_pMUB?{mZxJsdX zFR&toL~E=|P#=mt9X|D_`OMSJ=N`3Qc)Im6!4B35eQB8Fgm`kRXFRxjOb*M~$;JZdPG5I^fl6zNV7!4}@<*jB!67 zNC&x_Z2@Y`HVMR#?EV<8jR|Wi7nGkU;RCztVE}#PRr21J{U7qRjc8s{qr1eKaVNt0 zkPd}w(~^1`jH~Iz`nB}oME$&5lC?*zIh5rq@=H_{%SEB@ryCO-of0s-+wCphTkJL4 z(PFnCRM*HoSzytfZtr&3974Yi$sN)R6t!FPLrfo1`g^iIbB4)1UC_g&cDFYdg~39h tJ;RiqoBTX(9bu(#gcY4$F4fWp{+044;eOp*_1~Av-=+Mqd1ES4e*l?L0&V~R diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index 0782e95c6f3a13140f7353a762af3938b17f8cd6..5121a1714542e04a1218abeeac86ce513e16adc6 100644 GIT binary patch literal 10347 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 Ee?Mi(CjbBd literal 10388 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 HK9Bi-c6zY_ diff --git a/dist/WIDGETS/iNav/main.lua b/dist/WIDGETS/iNav/main.lua index b5266312..d92df506 100644 --- a/dist/WIDGETS/iNav/main.lua +++ b/dist/WIDGETS/iNav/main.lua @@ -1,7 +1,7 @@ local buildMode = ... local iNav = nil local options = { - { "Restore", BOOL, 0}, + { "Restore", BOOL, 1}, { "Text", COLOR, BLACK}, { "Warning", COLOR, YELLOW} } @@ -13,6 +13,15 @@ if string.sub(r, -4) == "simu" and buildMode ~= true then loadScript(TELE_PATH .. "iNav", "tc")(true) end +-- Nirvana NV14 doesn't have have these global constants, so we set them +if r == "NV14" then + EVT_SYS_FIRST = 1 --1542 + EVT_ROT_LEFT = 2 --57088 + EVT_ROT_RIGHT = 3 --56832 + EVT_ENTER_BREAK = 4 --514 + EVT_EXIT_BREAK = 5 --516 +end + -- Run once at the creation of the widget local function create(zone, options) iNavZone = { zone = zone, options = options } diff --git a/dist/WIDGETS/iNav/main.luac b/dist/WIDGETS/iNav/main.luac index 708d3f7c2bf9be16d3bf6edf1a4948a969266600..123e8cb0a98e62e0fc55c41ec55839ff81b0b681 100644 GIT binary patch delta 331 zcmcb}{)c0NETi>Ax%u@H4M&*785kQl8V+=FIJkCk9B}RCaB%D4IN;Ws%EZ91)QN%N zX%hp3>R|>3?`B2@FK72YuV#jRFXyIyuV$tRUWc0|cri0ijAv$GlxJvQP-b9YVB-K1 zL8-+h`9-M=Y^*?zlfS?s5V!>5Z9o1ryy5HZg1P9_N*E}miA;_W=B>%Aj=TQ KlAk<@*&YBDa7HNr delta 124 zcmeyvaglw3EThRpx%sB4ObiT5ofsINHZd@$9%f+hZf0cgI_%Qv)y&Z4<=oWe)y&lG zb-1b9iagoWXVjP!fekf X4`eA#mSd5h{GC~eRTaq70P^AhQ~VyD diff --git a/src/iNav/data.lua b/src/iNav/data.lua index ba081432..77eecfe0 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -10,6 +10,15 @@ local function getTelemetryUnit(n) return (field and field.unit <= 10) and field.unit or 0 end +local tx = string.sub(r, 0, 2) +if HORUS or string.sub(r, 0, 3) == "x9e" or string.sub(r, 0, 6) == "x9lite" then + tx = "x7" +end +local tmp = tx == "x9" and EVT_PLUS_FIRST or (tx == "xl" and EVT_UP_FIRST) +local PREV = tx == "x7" and EVT_ROT_LEFT or tmp +tmp = tx == "x9" and EVT_MINUS_FIRST or (tx == "xl" and EVT_DOWN_FIRST) +local NEXT = tx == "x7" and EVT_ROT_RIGHT or tmp +local MENU = tx == "xl" and EVT_SHIFT_BREAK or (HORUS and EVT_SYS_FIRST or EVT_MENU_BREAK) local general = getGeneralSettings() local distSensor = getTelemetryId("Dist") > -1 and "Dist" or (getTelemetryId("0420") > -1 and "0420" or "0007") local data = { @@ -85,22 +94,4 @@ local data = { fUnit = {"mAh", "mWh"}, } -if data.nv then - EVT_SYS_FIRST = 1542 - EVT_ROT_LEFT = 57088 - EVT_ROT_RIGHT = 56832 - EVT_ENTER_BREAK = 514 - EVT_EXIT_BREAK = 516 -end - -local tx = string.sub(r, 0, 2) -if HORUS or string.sub(r, 0, 3) == "x9e" or string.sub(r, 0, 6) == "x9lite" then - tx = "x7" -end -local tmp = tx == "x9" and EVT_PLUS_FIRST or (tx == "xl" and EVT_UP_FIRST) -local PREV = tx == "x7" and EVT_ROT_LEFT or tmp -tmp = tx == "x9" and EVT_MINUS_FIRST or (tx == "xl" and EVT_DOWN_FIRST) -local NEXT = tx == "x7" and EVT_ROT_RIGHT or tmp -local MENU = tx == "xl" and EVT_SHIFT_BREAK or (HORUS and EVT_SYS_FIRST or EVT_MENU_BREAK) - return data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU \ No newline at end of file diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index 3fb6b5a1..a2ce4e66 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -59,6 +59,8 @@ local function title(data, config, icons, SMLCD) text(data.nv and 115 or 180, 0, fmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) text(data.nv and 75 or 130, 0, fmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) + --text(40,20,lcd.RGB(255, 100, 100),0) + --text(40,40,lcd.RGB(255, 255, 100),0) -- Reset colors color(WARNING_COLOR, YELLOW) @@ -69,8 +71,6 @@ local function title(data, config, icons, SMLCD) end end - --text(40,20,lcd.RGB(255, 100, 100),0) - --text(40,40,lcd.RGB(255, 255, 100),0) end local function gpsDegMin(c, lat) @@ -120,20 +120,13 @@ if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then end function icons.clear(event, data) - lcd.setColor(CUSTOM_COLOR, data.nv and (data.configStatus > 0 and lcd.RGB(98, 106, 115) or 12942) or 264) --lcd.RGB(50, 82, 115) & lcd.RGB(0, 32, 65) + lcd.setColor(CUSTOM_COLOR, data.nv and (data.configStatus > 0 and 25422 or 12942) or 264) --lcd.RGB(98, 106, 115) / lcd.RGB(50, 82, 115) / lcd.RGB(0, 32, 65) lcd.clear(CUSTOM_COLOR) lcd.setColor(TEXT_COLOR, WHITE) - lcd.setColor(WARNING_COLOR, data.telem and (data.nv and 65516 or YELLOW) or (data.nv and 64300 or RED)) --lcd.RGB(255, 255, 100) & lcd.RGB(255, 100, 100) + lcd.setColor(WARNING_COLOR, data.telem and (data.nv and 65516 or YELLOW) or (data.nv and 64300 or RED)) --lcd.RGB(255, 255, 100) / lcd.RGB(255, 100, 100) if event == 0 or event == nil then event = 0 - if data.nv then - EVT_SYS_FIRST = 1542 - EVT_ROT_LEFT = 57088 - EVT_ROT_RIGHT = 56832 - EVT_ENTER_BREAK = 514 - EVT_EXIT_BREAK = 516 - end if not data.armed then data.stickMsg = (data.throttle >= -940 or math.abs(getValue(data.hctrl_id)) >= 50) and "Return throttle stick to bottom center" or nil if data.throttle > 940 and getValue(data.hctrl_id) > 940 and math.abs(getValue(data.hcurx_id)) < 50 and math.abs(getValue(data.hcury_id)) < 50 then @@ -169,13 +162,6 @@ function icons.clear(event, data) if data.lastt6 == 0 then data.lastt6 = nil end - --[[ - lcd.setColor(CUSTOM_COLOR, WHITE) - lcd.drawText(0,400,"t " .. data.throttle,CUSTOM_COLOR) - lcd.drawText(0,420,"l " .. getValue(data.hctrl_id),CUSTOM_COLOR) - lcd.drawText(0,440,"x " .. getValue(data.hcurx_id),CUSTOM_COLOR) - lcd.drawText(0,460,"y " .. getValue(data.hcury_id),CUSTOM_COLOR) - ]] end return event end diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index a3e39ab8..abc72b26 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -5,12 +5,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local GROUND = 37799 --rgb(148, 118, 58) --local SKY2 = 8943 --rgb(32, 92, 122) --local GROUND2 = 20996 --rgb(81, 65, 36) - local MAP = rgb(50, 150, 50) + local MAP = 13478 --rgb(50, 150, 50) --local DKMAP = 544 --rgb(0, 70, 0) local LIGHTMAP = rgb(50, 200, 50) --local DATA = 12942 --rgb(50, 82, 115) --local GREY = rgb(180, 182, 180) - local DKGREY = rgb(98, 106, 115) + local DKGREY = 25422 --rgb(98, 106, 115) local RIGHT_POS = 270 local X_CNTR = 134 --(RIGHT_POS + LEFT_POS [0]) / 2 - 1 local HEADING_DEG = 190 @@ -357,7 +357,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end end - --[[ Variometer - Currently not supported in the Nirvana OpenTX firmware + --[[ Variometer - Test with multi-protocol TX module and SBUS RX if config[7].v % 2 == 1 then color(CUSTOM_COLOR, DKGREY) fill(RIGHT_POS, TOP, 10, BOTTOM - 20, CUSTOM_COLOR) From a4de015e744a6659bc1d547b0b480fb1a2c1d263 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sat, 31 Aug 2019 19:28:48 -0400 Subject: [PATCH 09/34] Everything but RSSI/LQ done? --- dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7818 -> 7826 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 10347 -> 13809 bytes src/iNav/func_h.lua | 10 +-- src/iNav/nirvana.lua | 99 +++++++++++++---------- 4 files changed, 62 insertions(+), 47 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index a2bc3d26dad76336335a88ed98aa10460b1e16ca..9ea741a1d9744e59b891743c3aae1e2df8604884 100644 GIT binary patch delta 251 zcmeCOon*VgkyAsM;kFY4gE#|2!@(wD2F7Ma1_$N_=ElRq49A&+8Q54t7-U--7~EYZ zXL6b=Hi@99IL7SGaJ>0AJ6zR~$p<;r6PQC8<~lVnwmXF~%w__b?ZDE|))dOnekhc+ zohgiUVv`%IM1v=*_yMMd1||mPV@z%gY|Wtz?1w|y*qy`JKzbqKP6+X4h`2mM14H!W z9zp5J$y~>n9wcnm=9XY&T9CQfmB)dR`9O@r=6c?1jLar_hLa=s_cA*+F;A8dc*x1h Q00a(Q4;(f#3%2tD08o`fCIA2c delta 244 zcmbPa+hx1KkyC?(;kFY4gE#|2!$Buu2F7Ma1_$N_=Ei1WhU3h^3~Wb&8Dv`;7~EMV zXL6b=I*FjDIL7SGaJ>0AJ6u)Ed^JGPVhg@u|3=9nJL9USu Jo4Ezsc>ymiKLG#$ diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index 5121a1714542e04a1218abeeac86ce513e16adc6..f6c645b5e82a57695c25c5d16e91bbf48cdb6de7 100644 GIT binary patch delta 5777 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 delta 2303 zcmai0U1%fM6+U-ljci#Od+v-pmR#><^|z9pKq%RiKw-yrR*Kt5wnk&6^=1Q08*j{p z6iT}k@}R3-x_YwLGgsR_6xu)@3S}v6{m_?|j=jl>z}i{KjtFdAD1F$pX`yK;g%C*2 z)sO3zLIv_YbI*6abI*6q9r@#{A1!Y^GxD+opupFEA^&pz*Q1x6QrJ`3Bx$Sga2UW~ zz{(Vqix%1d%tZUhVT4c$9o0?9mIXQ2g0MxC(4OA)FLE)=8Iy750ejW0ImYNV488hu+R)IA< zKWlCsKy&&2nW(q5Wq3nO#1p}-E`?8WpNtcjs)EN6p#PVoIlcl9$At_NY-f2GNGXD) zMc@z15r#5F0__!0C`~NU%4orI?+6)Gw~`!d`;$t$l00&NK!7D;5O~u7%J$V4f-z6! zuZOP@i~l{GkX)4;N+p6a9-(}OM+7egl(}f}>&kgaUEz0?>sB|Bnw%1SFoE?G$1!o@ zWa4F44UXX<6xvTtnUSLxAa8w;tkW_y-Bs9X)6^|m;XfQJN^Xlk8v9DzEu~_nyJfHt z+jn0KMm;xac%#gtEHYN!i-)xeFORQHw^m@&QRDBbmC?PHb7uqF;y9JWt(HHr+2Wn? z^A&7;4AkEkEW!e%mmrT3N=c1}ol0D-SK_M>_^mj8%zH^OOpO6*m`7Y4aYe_8-$LdM z$GKBLyX17@ORew6i)x2oRiBpI7UZeTf2yuZPKoZgm!YJ~t0bKzj zVXW_8^pqcU&AB|L%|0C{cfqC#K>-%sLl6!#kds54cbDKI6~j(g0ZCrha?hwMFs0&_ z=feX7EwpxnOl4z&Li7P?x{Yo*oy33M3;u~VOG?{meT<|;g=#%MjrmNKO^Av&)j(py z`DWr0?jhksv&B~_%fTn{PBSb$bnpxGo*KnWEhY74%MKx`CBZ z$VAPXI6QTru`svOty06m<)8Rtc%CW5dWC=kE*CVYA&V?Q)a@}G)Rvf z&~%aV&_Ics{0ayqKx4Fca3#nzmfYuyLC~u#nX@qgk|Mwtg%5jGX+VqRSAv_`?~^+` z1G0@1*1$I4=@BO(F)fq}!OepYL!O2MqOU<%uVjumkiel00lh&wTI1}0$2HxH@HOvY z$}lHc(>;PF|7#>lvOF+xO~Tt(oj4_ypG+iD^iAWlx9c2Sw zhd-M5jI8rV#_7~LTtc<;ja7)UKV=M%n2GJJC9VS_6MzE9H zS(sYsv6ILQJkW0=k_n{1WCf;X&%lrD9;Viqfr)w}gZ-u(_FiJYaX$nRP;x8$$CHVw ziy~VnGLCSu{pVnf&ccp03o^e7VjKq}-1C1Fthp)lhXA$ocW`w7C(ivN@;rXbGq@r} z>n|8D_WvCp76bxt8W?Qzf2Q+3cJTi8`Loxh;Iiq5?kCQ7vyZlaHS?lWl>@kQ`PJ_f zE`JY>?e*87k1U$td)j?39pU1o0H(0@x@s}5# z93b+22k^)f3;Y{TRJMQi);aY2L-XVb-d7QrGqZY}KsY6kWqOU({simwOzwyL}EnKEse-5`Gx! zPQk7Zrsn%oAPqrSx(=oUJ|;2g-uzpV-`B;;0xREmD=kee^uY^0*pqJfcy%ZsZQdJ0>M`R8x~ f@iT&7@&z(WVkAmZXcH14$*$|fA2P7{{<*~GICEjz diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index a2ce4e66..73ebaac9 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -15,7 +15,7 @@ local function title(data, config, icons, SMLCD) fill(0, 0, LCD_W, 20, CUSTOM_COLOR) text(0, 0, model.getInfo().name) - local bat = data.nv and 115 or 197 + local bat = data.nv and 135 or 197 if config[19].v > 0 then fill(bat, 3, 43, 14, TEXT_COLOR) fill(bat + 43, 6, 2, 8, TEXT_COLOR) @@ -30,9 +30,9 @@ local function title(data, config, icons, SMLCD) if config[13].v > 0 then if data.doLogs and data.time ~= nil then - text(data.nv and 195 or 340, 0, data.time, WARNING_COLOR) + text(data.nv and 205 or 340, 0, data.time, WARNING_COLOR) else - lcd.drawTimer(data.nv and 195 or 340, 0, data.timer) + lcd.drawTimer(data.nv and 205 or 340, 0, data.timer) end end @@ -76,7 +76,7 @@ end local function gpsDegMin(c, lat) local gpsD = math.floor(math.abs(c)) local gpsM = math.floor((math.abs(c) - gpsD) * 60) - return string.format("%d\64%d'%05.2f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) + return string.format("%d\64%d'%04.1f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) end local function hdopGraph(x, y) @@ -84,7 +84,7 @@ local function hdopGraph(x, y) lcd.setColor(CUSTOM_COLOR, data.hdop < 11 - config[21].v * 2 and YELLOW or WHITE) for i = 4, 9 do if i > data.hdop then - lcd.setColor(CUSTOM_COLOR, GREY) + lcd.setColor(CUSTOM_COLOR, 33874) end fill(i * 4 + x - 16, y - (i * 3 - 10), 2, i * 3 - 10, CUSTOM_COLOR) end diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index abc72b26..05ff0a8f 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -10,7 +10,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local LIGHTMAP = rgb(50, 200, 50) --local DATA = 12942 --rgb(50, 82, 115) --local GREY = rgb(180, 182, 180) - local DKGREY = 25422 --rgb(98, 106, 115) + local DKGREY = 33874 --rgb(98, 106, 115) local RIGHT_POS = 270 local X_CNTR = 134 --(RIGHT_POS + LEFT_POS [0]) / 2 - 1 local HEADING_DEG = 190 @@ -78,9 +78,11 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local tmp2 = Y_CNTR + ((v - i) * 3) - 9 if tmp2 > 10 and tmp2 < BOTTOM - 8 then line(p, tmp2 + 8, p + 2, tmp2 + 8, SOLID, TEXT_COLOR) + --[[ Currently disabled due to preformance if config[28].v == 0 and i % 10 == 0 and (i >= 0 or p > X_CNTR) and tmp2 < BOTTOM - 23 then text(p + (p > X_CNTR and -1 or 4), tmp2, i, SMLSIZE + (p > X_CNTR and RIGHT or 0) + TEXT_COLOR) end + ]] end end end @@ -244,7 +246,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end end if not data.showMax then - text(X_CNTR - 64, Y_CNTR - 9, fmt("%.0f", upsideDown and -tmp or tmp) .. "\64", SMLSIZE + RIGHT) + text(X_CNTR - 60, Y_CNTR - 10, fmt("%.0f", upsideDown and -tmp or tmp) .. "\64", SMLSIZE + RIGHT) end end @@ -379,6 +381,21 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end ]] + --[[ RSSI + tmp = (not data.telem or data.rssi < data.rssiLow) and FLASH or 0 + val = data.showMax and data.rssiMin or data.rssiLast + text(X1 - 3, TOP + 84, val .. (data.crsf and "%" or "dB"), MIDSIZE + RIGHT + tmp) + text(0, TOP + 93, data.crsf and "LQ" or "RSSI", SMLSIZE) + if data.rl ~= val then + local red = val >= data.rssiLow and max(floor((100 - val) / (100 - data.rssiLow) * 255), 0) or 255 + local green = val < data.rssiLow and max(floor((val - data.rssiCrit) / (data.rssiLow - data.rssiCrit) * 255), 0) or 255 + data.rc = rgb(red, green, 60) + data.rl = val + end + color(CUSTOM_COLOR, data.rc) + lcd.drawGauge(0, TOP + 110, X1 - 3, 15, min(val, 99), 100, CUSTOM_COLOR) + ]] + -- Calc orientation tmp = data.headingRef if data.showDir or data.headingRef == -1 then @@ -402,7 +419,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end local cx, cy, d - -- Altitude graph + --[[ Altitude graph - Currently disabled due to preformance if config[28].v > 0 then local factor = 30 / (data.altMax - data.altMin) color(CUSTOM_COLOR, LIGHTMAP) @@ -413,7 +430,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic line(cx, cy, cx, BOTTOM - 1, SOLID, CUSTOM_COLOR) end if (i - 1) % (60 / config[28].v) == 0 then - color(CUSTOM_COLOR, DKGREY) + color(CUSTOM_COLOR, BLACK) line(cx, BOTTOM - 30, cx, BOTTOM - 1, DOTTED, CUSTOM_COLOR) color(CUSTOM_COLOR, LIGHTMAP) end @@ -428,6 +445,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end text(RIGHT_POS + 2, BOTTOM - 46, floor(data.altMax + 0.5) .. units[data.alt_unit], SMLSIZE + RIGHT) end + ]] if data.gpsHome ~= false then -- Craft location @@ -476,21 +494,25 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(X_CNTR - 79, 191, "Lua Telemetry", MIDSIZE) text(X_CNTR - 39, 221, "v" .. VERSION, MIDSIZE) end ---[[ + -- Data - local X1 = 140 - local X2 = 234 - local X3 = 346 - TOP = BOTTOM + 1 - BOTTOM = 271 + local X1 = 140 - 149 + local X2 = 234 - 144 + local X3 = 346 - 149 + TOP = BOTTOM + 60 + BOTTOM = 479 - -- Box 1 (fuel, battery, rssi) + -- Box 1 (fuel, battery) tmp = (not data.telem or data.cell < config[3].v or (data.showFuel and config[23].v == 0 and data.fuel <= config[17].v)) and FLASH or 0 + local btop = TOP - 54 + local bleft = 0 + local bwidth = 150 + local bright = 150 if data.showFuel then if config[23].v > 0 or (data.crsf and data.showMax) then - text(X1, TOP + 1, (data.crsf and data.fuelRaw or data.fuel) .. data.fUnit[data.crsf and 1 or config[23].v], MIDSIZE + RIGHT + tmp) + text(bright, btop, (data.crsf and data.fuelRaw or data.fuel) .. data.fUnit[data.crsf and 1 or config[23].v], MIDSIZE + RIGHT + tmp) else - text(X1 - 3, TOP, data.fuel .. "%", MIDSIZE + RIGHT + tmp) + text(bright, btop, data.fuel .. "%", MIDSIZE + RIGHT + tmp) if data.fl ~= data.fuel then local red = data.fuel >= config[18].v and max(floor((100 - data.fuel) / (100 - config[18].v) * 255), 0) or 255 local green = data.fuel < config[18].v and max(floor((data.fuel - config[17].v) / (config[18].v - config[17].v) * 255), 0) or 255 @@ -498,14 +520,19 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic data.fl = data.fuel end color(CUSTOM_COLOR, data.fc) - lcd.drawGauge(0, TOP + 26, X1 - 3, 15, min(data.fuel, 99), 100, CUSTOM_COLOR) + --lcd.drawGauge(bleft, btop + 26, bwidth, 15, min(data.fuel, 99), 100, CUSTOM_COLOR) + icons.rectangle(bleft, btop + 27, bwidth, 15, CUSTOM_COLOR) + local w = max(1, (min(data.fuel, 100) * 0.01) * (bwidth - 2)) + fill(1, btop + 28, w, 13, CUSTOM_COLOR) end - text(0, TOP + ((config[23].v > 0 or (data.crsf and data.showMax)) and 23 or 9), labels[1], SMLSIZE) + text(bleft, btop + ((config[23].v > 0 or (data.crsf and data.showMax)) and 23 or 9), labels[1], SMLSIZE) end + bleft = 170 + bright = LCD_W - 1 local val = math.floor((data.showMax and data.cellMin or data.cell) * 100 + 0.5) * 0.01 - text(X1 - 3, TOP + 42, fmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) - text(0, TOP + 51, labels[2], SMLSIZE) + text(bright, btop, fmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) + text(bleft, btop + 9, labels[2], SMLSIZE) if data.bl ~= val then local red = val >= config[2].v and max(floor((4.2 - val) / (4.2 - config[2].v) * 255), 0) or 255 local green = val < config[2].v and max(floor((val - config[3].v) / (config[2].v - config[3].v) * 255), 0) or 255 @@ -513,20 +540,10 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic data.bl = val end color(CUSTOM_COLOR, data.bc) - lcd.drawGauge(0, TOP + 68, X1 - 3, 15, min(max(val - config[3].v + 0.1, 0) * (100 / (4.2 - config[3].v + 0.1)), 99), 100, CUSTOM_COLOR) - - tmp = (not data.telem or data.rssi < data.rssiLow) and FLASH or 0 - val = data.showMax and data.rssiMin or data.rssiLast - text(X1 - 3, TOP + 84, val .. (data.crsf and "%" or "dB"), MIDSIZE + RIGHT + tmp) - text(0, TOP + 93, data.crsf and "LQ" or "RSSI", SMLSIZE) - if data.rl ~= val then - local red = val >= data.rssiLow and max(floor((100 - val) / (100 - data.rssiLow) * 255), 0) or 255 - local green = val < data.rssiLow and max(floor((val - data.rssiCrit) / (data.rssiLow - data.rssiCrit) * 255), 0) or 255 - data.rc = rgb(red, green, 60) - data.rl = val - end - color(CUSTOM_COLOR, data.rc) - lcd.drawGauge(0, TOP + 110, X1 - 3, 15, min(val, 99), 100, CUSTOM_COLOR) + --lcd.drawGauge(bleft, btop + 27, bwidth, 15, min(max(val - config[3].v + 0.1, 0) * (100 / (4.2 - config[3].v + 0.1)), 99), 100, CUSTOM_COLOR) + icons.rectangle(bleft, btop + 27, bwidth, 15, CUSTOM_COLOR) + local w = max(1, (min(max(val - config[3].v + 0.1, 0) * (100 / (4.2 - config[3].v + 0.1)), 100) * 0.01) * (bwidth - 2)) + fill(bleft + 1, btop + 28, w, 13, CUSTOM_COLOR) -- Box 2 (altitude, distance, current) tmp = data.showMax and data.altitudeMax or data.altitude @@ -554,15 +571,15 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.showHead then if data.showDir or data.headingRef == -1 then text((X2 + X3) * 0.5, TOP + 18, "N", SMLSIZE) - text(X3 - 4, 211, "E", SMLSIZE + RIGHT) - text(X2 + 10, 211, "W", SMLSIZE) + text(X3 - 4, 421, "E", SMLSIZE + RIGHT) + text(X2 + 10, 421, "W", SMLSIZE) text(X2 + 78, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) end - local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, (X2 + X3) * 0.5 + 4, 219, 25) + local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, (X2 + X3) * 0.5 + 4, 429, 25) if data.headingHold then fill((x2 + x3) * 0.5 - 2, (y2 + y3) * 0.5 - 2, 5, 5, SOLID) else - color(CUSTOM_COLOR, GREY) + color(CUSTOM_COLOR, DKGREY) line(x2, y2, x3, y3, SOLID, CUSTOM_COLOR) end line(x1, y1, x2, y2, SOLID, TEXT_COLOR) @@ -586,30 +603,28 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if not data.crsf then text(RIGHT_POS, TOP + 28, floor(data.gpsAlt + 0.5) .. (data.gpsAlt_unit == 10 and "'" or units[data.gpsAlt_unit]), MIDSIZE + tmp) end - text(RIGHT_POS, TOP + 54, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), tmp) - text(RIGHT_POS, TOP + 74, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), tmp) + text(RIGHT_POS, TOP + 54, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), SMLSIZE + tmp) + text(RIGHT_POS, TOP + 74, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), SMLSIZE + tmp) tmp = data.showMax and data.speedMax or data.speed text(RIGHT_POS + 1, TOP + 98, tmp >= 99.5 and floor(tmp + 0.5) .. units[data.speed_unit] or fmt("%.1f", tmp) .. units[data.speed_unit], MIDSIZE + RIGHT + data.telemFlags) -- Dividers color(CUSTOM_COLOR, DKGREY) - line(X1 + 3, TOP, X1 + 3, BOTTOM, SOLID, CUSTOM_COLOR) line(X2 + 3, TOP, X2 + 3, BOTTOM, SOLID, CUSTOM_COLOR) line(X3 + 3, TOP, X3 + 3, BOTTOM, SOLID, CUSTOM_COLOR) line(X3 + 3, TOP + 95, RIGHT_POS, TOP + 95, SOLID, CUSTOM_COLOR) if data.crsf then line(X3 + 3, TOP + 28, RIGHT_POS, TOP + 28, SOLID, CUSTOM_COLOR) end - color(CUSTOM_COLOR, LIGHTGREY) line(0, TOP - 1, LCD_W - 1, TOP - 1, SOLID, CUSTOM_COLOR) if data.showMax then color(CUSTOM_COLOR, YELLOW) - fill(190, TOP - 20, 80, 20, CUSTOM_COLOR) + fill(240, TOP - 211, 80, 20, CUSTOM_COLOR) color(CUSTOM_COLOR, BLACK) - text(265, TOP - 20, "Min/Max", CUSTOM_COLOR + RIGHT) + text(319, TOP - 211, "Min/Max", CUSTOM_COLOR + RIGHT) end -]] + end return view \ No newline at end of file From b54e74a395f70c603e51b0daccea815600989d57 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sat, 31 Aug 2019 19:59:52 -0400 Subject: [PATCH 10/34] Slight title position change --- dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7826 -> 7826 bytes src/iNav/func_h.lua | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index 9ea741a1d9744e59b891743c3aae1e2df8604884..52ce1d84bf86fbbb9505c5a64d21ea12f2e16e94 100644 GIT binary patch delta 14 VcmbPaJIQu~GY_M~W)~hmApj*E1VR7+ delta 14 VcmbPaJIQu~GY{i}%`QBCLI5XS1fl={ diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index 73ebaac9..31bf8c1b 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -30,9 +30,9 @@ local function title(data, config, icons, SMLCD) if config[13].v > 0 then if data.doLogs and data.time ~= nil then - text(data.nv and 205 or 340, 0, data.time, WARNING_COLOR) + text(data.nv and 202 or 340, 0, data.time, WARNING_COLOR) else - lcd.drawTimer(data.nv and 205 or 340, 0, data.timer) + lcd.drawTimer(data.nv and 202 or 340, 0, data.timer) end end From f452ba95d4c5ea88ae95a717dcac822a80b9bd54 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 1 Sep 2019 12:03:32 -0400 Subject: [PATCH 11/34] Commit before I test a few things --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11306 -> 11302 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11306 -> 11302 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7826 -> 7847 bytes dist/SCRIPTS/TELEMETRY/iNav/log.luac | Bin 3197 -> 3213 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6590 -> 6650 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 13809 -> 14349 bytes dist/SCRIPTS/TELEMETRY/iNav/other.luac | Bin 2646 -> 2678 bytes src/iNav.lua | 2 +- src/iNav/func_h.lua | 16 +++--- src/iNav/log.lua | 18 ++++--- src/iNav/menu.lua | 63 +++++++++++------------ src/iNav/nirvana.lua | 3 +- src/iNav/other.lua | 5 +- src/iNav/save.lua | 8 +-- 14 files changed, 59 insertions(+), 56 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 71ac84de814659742101c876837661130daac9b5..77ece8f87cd5e446b2256908622defc3b947c285 100644 GIT binary patch delta 50 zcmZ1#u`FUkuPT$E(ByvABa94_L)2;|I9Qn*I9!<-I9r(;IFB+nFtV~Ru*5nrY<{a| G%L)K?KMgAY delta 54 zcmZ1$u_|IiuPT#}@Z^5gBa9A{L)2;aXIGNXWtZiaHk|5OjfuCK7P!Pq1d6^eF zt0HxltrP^QCK6`U1b{t8%mwoq*6sOQ3N#Jv>npQJ`=EGLO_QYea#p$^#!b5cMK9I^ll?66n7 zvLZgL9$V20Q__k-C`5yQW5~Wk7Ntck-Lw#Q*kWRivPzgM-s3LuOJ-9gv3cjU5_)q|bNz z@-;X62h4B}Oq)0os$+Dav`P$>(;9CJ8iDVGqZI*g8s_+**an?d;)8l_C5euu@%6AG zgI=YcU8S4uG#%wL)NEpYDS0#vdQ<^}RCPmC^&|~49SZEUA0_>Bz~M%4CH)x@{=o8o z_D`L^{m`QFrv$K`T6$W3@2%Z=R$hI4e+^Fht5$GxU>y0IXFkw*IZzI)%w0sQvb+_% o&u%07T$V5VnZY0QrK~;%m-EY%?#VI=cFb)`zsT|+u*MeAFOD_^I{*Lx delta 999 zcmZvbOKa3n6vxlKH#Zrk?L1l~t+nX7`W1?qq&3*4@5vwxEr<{7LWJT2M3~#8Ojg~P zWvft7OK~H_tvEB085G6RZE@j8@Edq;GOZoj)f`UF{r%7XoHKh9uO>bgcxD;^6u3AO z4fBV@ZBP-=N!T_4bf7{|pg&vR6yg&wm|z<$3!T`86J_gKjuI+}W~&b*(PlGHXJ$gtQMpbHBssi;9UMu5z}oZP zSq{DdRCdBSZM-I%@|}~Wwiwl9V|s&QGfvtJ@Wf2JWp<@!VOX?PDN(WpplV4uBJ8*X zRhCMZ{B9nwCLVwdmV=7#tJ3(fMqtjtwZwU2PztcNDFt%U6A@Io>V4K>n_&_^-ZD*h~ ze+qh`2ij&f9!5ty0e?j>atq4lZb@PAn+dYw0~}v6vRRv&pfVRO$pr?cn_iEhh`Q%O z&~kY|!(vvy?z^DHuBurTHC=W0>2cmq^H)GXHQX0(C9RG6w##2Mh z;_tonJI~8&kM6HS^s;}PWYVwVLHKUq19z}sA#!tf317mn8hy_15dH+iXW?q`FMom2 aUQ`~ea=wq@m*|te!+8_KACWt@ME(KxBL4IM diff --git a/dist/SCRIPTS/TELEMETRY/iNav/log.luac b/dist/SCRIPTS/TELEMETRY/iNav/log.luac index 1c0eb849345d50e57cad750ad0fb3300e7952199..7ba774e2aeaf449f383a07dc6c81d445a76fe083 100644 GIT binary patch delta 61 zcmV-D0K)(M7>yaQ2?7YC0000602aWL5dyIRWV6Ep_X7bWle-2R0VA{52A%;A!%_$a T0|N(G06+#8KnH-cbO;Fq8AlKb delta 45 zcmV+|0Mh@B8T}Zr2?7YA0000602aKH5dyIRW3$5o_X7bVle-2R0V1>42A%=4g$M`) DFu)B~ diff --git a/dist/SCRIPTS/TELEMETRY/iNav/menu.luac b/dist/SCRIPTS/TELEMETRY/iNav/menu.luac index 521c2b96b6e3ce31ce58bb8d8b058fb3ad2c77a5..fb0ac0dcf10d4040dac3bc673f94fc09c2d0a217 100644 GIT binary patch literal 6650 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 T-2a#n#B=}fZ6I!h=eYk1sw6S> literal 6590 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 AR{#J2 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index f6c645b5e82a57695c25c5d16e91bbf48cdb6de7..6a36381f9e4fc33698e32da0704904e075166918 100644 GIT binary patch delta 2702 zcmai0U2NOd6+Wa>DN$s37B40LN%fB;Q%amB1(tMnmr+eBF0Cau5@{^;Tp%0Z#L%K9 zv7P3pnXmR>J=w{8$?YL4T5QilG30R%qh7)ljqSvyQecUj0R`suCzyj_1BPwb4n^5X zfMPRX@aX*AbH4kXLq0CfpS}LAT~jf^?x3%J}Rl_-Q~r?rUBZBp_5&^a-fg z6R@CWlk>Ka{Hc08IjKZ8OZRrhF|7EL6q&E4xQrK+5SS(b}!W=o} z_;Oph7Sucb?OfWa?OYB2S)c?v!+>t#ud`0)?eeiiSoTmy76eGNtOXOfAoFh_F(=>w zhy(~Um}94WRG_hCcFczd#xg1%fJLCasomUgn-Uj!&7S;D+k@l+_fgv<=P%5s5q^5yTD`zwnh;Q&0`=0Z*X_4riJR zLIUl)YyZ+$UW`LE?+0x7xqHa3ulM^5^X%EqvmGD&%2&?seI|a)N#Hnei+drxx*N)? zd!adV*Pr$bfVDUR_k&KoJE)aEgQQ-@|KY?5VDYfYQ)}^zYo{o$KB^BvoBaEDm~uD- zC3d4dx-VbybA_FdX1&PwUa%O32$<50Q)>-F3b*@Dm<;CzLs*GzwD-QIm*56L7euUL zqufBOLP}tfx4~ z;pBp@-+jZGNU~X<#I(8-)*0pQ7aY)lR)zgA>m*k&z?ryqnP9>l&XkfmsnBNW55Q7y zCl|103;i6~Ydom;vW$gZNBuQ&wobe<9uPrRbv7{J$bOIscqyU%CIN}lS^){l`(*u( zPO(0jbUie2|9Ehs6!k1%$DGABn}9$fYj3h^ozVdLRc#65C^teLv)^_`6WRgD)E5Rc zVRX>(R_sUh7EZ`|{k9an#QxJ6;_U$z?uvTY0l2kxjtzBnM9F#Bs?V#QffoC;v^9$> z!echo)f>=Wd@?M?i|kijiBRo4j5X#*5vO1stMO<>_OL6(t5a-uB(`_MQkUxJEZbz` z|DeLgB8T&2Gx;7)YZXCrnj33?mPXJhg604QB9+nz8v5}*s&DvA_9yJNz6LAyRDBJ4 z_01+35tv83zKk4g+h`VFOMOE$?ylhNa5V{oDR+&WV@fp2YX{h==nr_T{Nw1GA^G!w zvy`2yp0{g(@y6~LdcI?}z8CJ*_d-=o!u>{ZRU3DQt)uJz+#L|A=n@tcoVQ0~OJv&b zHFA7L%sZ=#cl5{z)aU#lLLj3RVGe1ZHH=inI9Y$P4|;aIuBg*6MjWp0qzXCi$~bn4 zJ`G(8#odQvWlcL2YaBG=_iA5rkUGQqx_bl0H-X}L5rcAgCR^!iW5sS?Z*2y=qR4s0 z3n>LG{c9;YnE6 zXpg3ly?pkIV^?Ij3lVk(0G z&tcOa_C|f;C1|akMpcnr>k-*ky{$oe244ezket=1sF$Fk|AV#k?K^B=iq{iqmjK_w zDQ69O#mnw+;6-rSpevhr5$F>TjbFFav{bWkxt{$>-#(9h+0ThX?8Cm$)90@Ab&RT4 z;udys-??E-R@H}|qS*i}*#yDHtHL*FMIU*xbjf9R>B>NVp@PR@fwOp;k#f$|e<#+F zsa=6=t(J-yz$xOp*xFM4D%0A_?i6FFqgOP8bHOP>R;;9+uoHYsYKgrc3;B$fp(1`C zDz$gn?_wdo_AmBHEXtFs<67;lZQf5sr$oY^MM7soC9>~ZjLZn$j6 zTwmibdzcWpf8P9CqTMs=@dCifA5CXZUW9FVvIL$Tu6|p2Wad10Jg9tSIDO=GSABFu wRbM>{&!HCova&0fCmRCI${zf>g#B9{O2YsrWY2CisIRiV!Z delta 2229 zcmai0&2JM|5TCc9-e8L-|M#90DSte5K(_ zZJt{xJ|#hUyX^s09C|IPD*ga$Rn4|i656oKfsjh25~V_nc4mTDby>F<#8zDXN53W z2p=manN`4Gg{joOGQSwfV6e~tzuXevB@MtO2_Z;kNyBrE%#zWM4H*ED4nPa7+KIWe z+7NtK)bE3+ccv|D$``iOK4~A}%T~pQ(XC>ygW47N^gK)>WLhe<&li|rg^q!Um=C~6 zMaltYaV$xDfM2K5Tn;IbOdTtSm;|UB6>)nsX{vDd32TByRl-25C zo-;C6aOnhA;p<`84X&bts!b^?GZF?|!Z4Ur6{1_yZLqYd_A$)aLY#XRP2?17nZZOa z;{CXB%oA%7ABdvhT56mSV?AUf5SheMWeF6buYg_y1b@bubCdOFq*b@dA&`7V7pV3z zz>0|#TBrjF?aLTm8&&Mz0k?nHQdN4tdd6O6wYB_uG`2mo5he@AVT}Kjnhd=S z){P%hBEni~Efb9ZH$zOx3WfUr?K}%>xwJQSPF8%2i{{|5QNK_Xs(fcUQ3B-lIwr)AlJowWu|D!LF!0(YXx;|Fl*J;22Oujk`W(Jsh zuj(f8*l~_P7cHfqi34NV{rp=w?5A6yL=QqqKhLkr5%QRi%Q3+?zsTmewy@wl=6}dr z1yogADpwOLXQ_S7(gjQl{9W`yV8q!2leo3Ke+8rg{wTFs(2w)A%H~dO8_XCN0>s${ zSx0~o4+ZYLN+USKllEcPi{S5I(N0vc^bKzZj$nJcOw%i%6&O6cdPQ03;~g7!`F%bB Q*wLBYx%=v;8^`Pa1+s38`~Uy| diff --git a/dist/SCRIPTS/TELEMETRY/iNav/other.luac b/dist/SCRIPTS/TELEMETRY/iNav/other.luac index 75ca4ac3f3414bc3e5a1c9729ac4e1a8f82cda66..5bacb8f21a94a0840c1115a979e242390958a175 100644 GIT binary patch delta 343 zcmYL_F-rqM5QX2)x;aHcn&73;!qQH$(Z*y$KsM$GR)UScz)Eag_llELLJA3j2BWqj z`2*{n$yG{BVH5Hj?5y1*iq*{b7~VYIXYspuxy&}6S2p=}ne>ayVv5tO=*OZ9f-_F zm7CqvIM&uBf=+1wW$9uVH(lrt!CZ=Z$e@zJ-I_{jJ;ld82lp!3e{lRbm72Y}2E1^D m16|H#O?cJz)7&Zx`s2AH@;HFwQ}oxp1txYK9QJqSefj~X&S|0m delta 290 zcmYL@F;2rU7=@qhIO!5tswNTwA!bGn&^lysl?Xa@gClSQj57pP3`iLe3zeW80ObNE zZJG%YF|g$V9Do^DATj)U|9g5*`o8<0{o7q~__BAzTm$tg{NjQQT%Dk)-ijM0CNxE^ z$2>GK4~A6bBE?K3_ZwaR*0>j?@UpQxihOihky%CWa&3E6Z1wnmub{4~tzzHVxug$< zDgp*R%C<3xnA>R(X|&BjH~F8RH`O~rQ}X~&679SZEkb214OByGNJFpJ`osdaoLGW! zMj)5*qg>YZPM_?*klDw=`sYq4vZ8?JM=hpm=mr+aV@2Z}kfi)_&S^REdW6RSrsY{L Fpg(MGUzGp= diff --git a/src/iNav.lua b/src/iNav.lua index 8c3fef5f..3fd642b1 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -486,7 +486,7 @@ local function run(event) data.v = 9 end tmp = config[30].v - view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, icons, FILE_PATH, SMLCD, FLASH, PREV, NEXT, HORUS, env) + view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, icons, SMLCD, FLASH, PREV, NEXT, HORUS, env) if HORUS then icons.menu(config, data, icons, tmp) end diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index 31bf8c1b..82e14bac 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -11,10 +11,14 @@ local function title(data, config, icons, SMLCD) tmp = WARNING_COLOR end + -- Title color(CUSTOM_COLOR, BLACK) fill(0, 0, LCD_W, 20, CUSTOM_COLOR) + + -- Model text(0, 0, model.getInfo().name) + -- TX battery local bat = data.nv and 135 or 197 if config[19].v > 0 then fill(bat, 3, 43, 14, TEXT_COLOR) @@ -24,24 +28,27 @@ local function title(data, config, icons, SMLCD) fill(i, 5, 2, 10, CUSTOM_COLOR) end end - if config[19].v ~= 1 and not data.nv then - text(bat + 93, 0, fmt("%.1fV", data.txBatt), RIGHT) + if config[19].v ~= 1 then + text(data.nv and 180 or bat + 93, 0, fmt("%.1fV", data.txBatt), RIGHT) end + -- Timer if config[13].v > 0 then if data.doLogs and data.time ~= nil then - text(data.nv and 202 or 340, 0, data.time, WARNING_COLOR) + text(data.nv and 187 or 340, 0, data.time, WARNING_COLOR) else lcd.drawTimer(data.nv and 202 or 340, 0, data.timer) end end + -- Receiver voltage or Crossfire speed if data.rxBatt > 0 and config[14].v == 1 then text(LCD_W, 0, fmt("%.1fV", data.rxBatt), RIGHT + tmp) elseif data.crsf then text(LCD_W, 0, (data.rfmd == 2 and 150 or (data.telem and 50 or "--")) .. "Hz", RIGHT + tmp) end + -- Data on config menu if data.configStatus > 0 then color(CUSTOM_COLOR, 12678) -- Dark grey fill(0, 30, 75, (22 * (data.crsf and 1 or 2)) + 14, CUSTOM_COLOR) @@ -59,9 +66,6 @@ local function title(data, config, icons, SMLCD) text(data.nv and 115 or 180, 0, fmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) text(data.nv and 75 or 130, 0, fmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) - --text(40,20,lcd.RGB(255, 100, 100),0) - --text(40,40,lcd.RGB(255, 255, 100),0) - -- Reset colors color(WARNING_COLOR, YELLOW) if data.widget then diff --git a/src/iNav/log.lua b/src/iNav/log.lua index 7a33af4f..334e6d39 100644 --- a/src/iNav/log.lua +++ b/src/iNav/log.lua @@ -99,9 +99,9 @@ local function playLog(data, config, distCalc, date, NEXT, PREV) if pos == nil then pos = string.len(raw) end - local line = string.sub(raw, 0, pos) + local ln = string.sub(raw, 0, pos) raw = string.sub(raw, pos + 1) - record = parseLine(line) + record = parseLine(ln) end end @@ -143,12 +143,14 @@ local function playLog(data, config, distCalc, date, NEXT, PREV) if data.a4_id > -1 then data.cell = toNum(record[label.a4]) end - pos = string.find(record[label.gps], " ") - if pos ~= nil then - gpsTemp = { - lat = toNum(string.sub(record[label.gps], 0, pos - 1)), - lon = toNum(string.sub(record[label.gps], pos + 1)) - } + if record[label.gps] ~= nil then + pos = string.find(record[label.gps], " ") + if pos ~= nil then + gpsTemp = { + lat = toNum(string.sub(record[label.gps], 0, pos - 1)), + lon = toNum(string.sub(record[label.gps], pos + 1)) + } + end end data.telem = true data.telemFlags = 0 diff --git a/src/iNav/menu.lua b/src/iNav/menu.lua index a86df288..51c874d3 100644 --- a/src/iNav/menu.lua +++ b/src/iNav/menu.lua @@ -1,17 +1,12 @@ -local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, icons, FILE_PATH, SMLCD, FLASH, PREV, NEXT, HORUS, env) +local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, icons, SMLCD, FLASH, PREV, NEXT, HORUS, env) local CONFIG_X = HORUS and (data.nv and 10 or 90) or (SMLCD and 0 or 46) local TOP = HORUS and (data.nv and 107 or 37) or 11 - local LINE = HORUS and (data.nv and 28 or 22) or 9 + local HIGH = HORUS and (data.nv and 28 or 22) or 9 local RSIDE = HORUS and 200 or 83 local GPS = HORUS and 45 or 21 local ROWS = HORUS and (data.nv and 12 or 9) or 5 local FONT = HORUS and 0 or SMLSIZE - local text = lcd.drawText - local min = math.min - local max = math.max - local floor = math.floor - local format = string.format local offOn = {[0] = "Off", "On"} -- Config options: o=display Order / t=Text / c=Characters / v=default Value / l=Lookup text / d=Decimal / m=Min / x=maX / i=Increment / a=Append text @@ -60,17 +55,17 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, if HORUS then if not data.nv then lcd.setColor(CUSTOM_COLOR, GREY) - lcd.drawFilledRectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, LINE * (ROWS + 1) + 12, CUSTOM_COLOR) + lcd.drawFilledRectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, HIGH * (ROWS + 1) + 12, CUSTOM_COLOR) end - icons.rectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, LINE * (ROWS + 1) + 12, SOLID, TEXT_COLOR) + icons.rectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, HIGH * (ROWS + 1) + 12, SOLID, TEXT_COLOR) lcd.setColor(CUSTOM_COLOR, data.nv and LIGHTGREY or 12678) -- Dark grey elseif not SMLCD then - lcd.drawRectangle(CONFIG_X - 5, TOP - 2, LCD_W - CONFIG_X * 2 + 10, LINE * (ROWS + 1) + 1, SOLID) + lcd.drawRectangle(CONFIG_X - 5, TOP - 2, LCD_W - CONFIG_X * 2 + 10, HIGH * (ROWS + 1) + 1, SOLID) end -- Special limit cases - config[19].x = SMLCD and ((config[14].v == 1 or data.crsf) and 1 or 2) or 2 - config[19].v = min(config[19].x, config[19].v) + config[19].x = SMLCD and ((config[14].v == 1 or data.crsf) and 1 or 2) or (data.nv and 1 or 2) + config[19].v = math.min(config[19].x, config[19].v) config[25].x = config[28].v == 0 and 2 or 3 if config[28].v == 0 and config[25].v == 3 then config[25].v = 2 @@ -131,7 +126,7 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, if data.configSelect == 0 then if event == NEXT or event == EVT_DOWN_REPT or event == EVT_MINUS_REPT then -- Next option data.configStatus = data.configStatus == #config and 1 or data.configStatus + 1 - data.configTop = data.configStatus > min(#config, data.configTop + ROWS) and data.configTop + 1 or (data.configStatus == 1 and 1 or data.configTop) + data.configTop = data.configStatus > math.min(#config, data.configTop + ROWS) and data.configTop + 1 or (data.configStatus == 1 and 1 or data.configTop) elseif event == PREV or event == EVT_UP_REPT or event == EVT_PLUS_REPT then -- Previous option data.configStatus = data.configStatus == 1 and #config or data.configStatus - 1 data.configTop = data.configStatus < data.configTop and data.configTop - 1 or (data.configStatus == #config and #config - ROWS or data.configTop) @@ -141,10 +136,10 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, end -- Delete invisible menus - local bottom = min(#config, data.configTop + ROWS) - for line = 1, #config do - if line < data.configTop or line > bottom then - config2[config[line].z] = nil + local bottom = math.min(#config, data.configTop + ROWS) + for i = 1, #config do + if i < data.configTop or i > bottom then + config2[config[i].z] = nil end end collectgarbage() @@ -156,21 +151,21 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, if event == EVT_EXIT_BREAK then data.configSelect = 0 elseif event == NEXT or event == EVT_UP_REPT or event == EVT_PLUS_REPT then - config[z].v = min(floor(config[z].v * 10 + i * 10) * 0.1, config[z].x == nil and 1 or config[z].x) + config[z].v = math.min(math.floor(config[z].v * 10 + i * 10) * 0.1, config[z].x == nil and 1 or config[z].x) elseif event == PREV or event == EVT_DOWN_REPT or event == EVT_MINUS_REPT then - config[z].v =max(floor(config[z].v * 10 - i * 10) * 0.1, config2[z].m == nil and 0 or config2[z].m) + config[z].v =math.max(math.floor(config[z].v * 10 - i * 10) * 0.1, config2[z].m == nil and 0 or config2[z].m) end -- Special cases if event ~= 0 and event ~= nil then if z == 2 then -- Cell low > critical - config[2].v = max(config[2].v, config[3].v + 0.1) + config[2].v = math.max(config[2].v, config[3].v + 0.1) elseif z == 3 then -- Cell critical < low - config[3].v = min(config[3].v, config[2].v - 0.1) + config[3].v = math.min(config[3].v, config[2].v - 0.1) elseif z == 18 then -- Fuel low > critical - config[18].v = max(config[18].v, config[17].v + 1) + config[18].v = math.max(config[18].v, config[17].v + 1) elseif z == 17 then -- Fuel critical < low - config[17].v = min(config[17].v, config[18].v - 1) + config[17].v = math.min(config[17].v, config[18].v - 1) elseif z == 20 then -- Speed sensor local tmp = config[20].v == 0 and "GSpd" or "ASpd" data.speed_id = getTelemetryId(tmp) @@ -181,27 +176,27 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, data.alt[i] = 0 end elseif i > 1 then - config[z].v = floor(config[z].v / i) * i + config[z].v = math.floor(config[z].v / i) * i end end end -- Print screen - for line = data.configTop, bottom do - local y = (line - data.configTop) * LINE + TOP - local z = config[line].z - local tmp = (data.configStatus == line and INVERS + data.configSelect or 0) + (config[z].d ~= nil and PREC1 or 0) + for i = data.configTop, bottom do + local y = (i - data.configTop) * HIGH + TOP + local z = config[i].z + local tmp = (data.configStatus == i and INVERS + data.configSelect or 0) + (config[z].d ~= nil and PREC1 or 0) if config2[z].p == 1 and HORUS then tmp = tmp + CUSTOM_COLOR end - text(CONFIG_X, y, config2[z].t, FONT + ((config2[z].p == 1 and HORUS) and CUSTOM_COLOR or 0)) + lcd.drawText(CONFIG_X, y, config2[z].t, FONT + ((config2[z].p == 1 and HORUS) and CUSTOM_COLOR or 0)) if config2[z].p == nil then if config2[z].l == nil then - text(CONFIG_X + RSIDE, y, (config[z].d ~= nil and format("%.1f", config[z].v) or config[z].v) .. config2[z].a, FONT + tmp) + lcd.drawText(CONFIG_X + RSIDE, y, (config[z].d ~= nil and string.format("%.1f", config[z].v) or config[z].v) .. config2[z].a, FONT + tmp) else if config2[z].l == 0 then if config[z].v == 0 then - config2[z].l = { [0] = format("%10.6f %11.6f", data.lastLock.lat, data.lastLock.lon) } + config2[z].l = { [0] = string.format("%10.6f %11.6f", data.lastLock.lat, data.lastLock.lon) } else config2[z].l = { gpsDegMin(data.lastLock.lat, true) .. " " .. gpsDegMin(data.lastLock.lon, false) } end @@ -209,14 +204,14 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, config2[z].l = offOn end if not config2[z].l then - text(CONFIG_X + RSIDE, y, config[z].v, FONT + tmp) + lcd.drawText(CONFIG_X + RSIDE, y, config[z].v, FONT + tmp) else - text(z == 16 and LCD_W - CONFIG_X or CONFIG_X + RSIDE, y, config2[z].l[config[z].v] .. ((config2[z].a == nil or config[z].v == 0) and "" or config2[z].a), FONT + tmp + (z == 16 and RIGHT or 0)) + lcd.drawText(z == 16 and LCD_W - CONFIG_X or CONFIG_X + RSIDE, y, config2[z].l[config[z].v] .. ((config2[z].a == nil or config[z].v == 0) and "" or config2[z].a), FONT + tmp + (z == 16 and RIGHT or 0)) end end config2[z] = nil else - text(CONFIG_X + RSIDE, y, "--", FONT + tmp) + lcd.drawText(CONFIG_X + RSIDE, y, "--", FONT + tmp) end end diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 05ff0a8f..2aaa79f0 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -419,7 +419,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end local cx, cy, d - --[[ Altitude graph - Currently disabled due to preformance + -- Altitude graph if config[28].v > 0 then local factor = 30 / (data.altMax - data.altMin) color(CUSTOM_COLOR, LIGHTMAP) @@ -445,7 +445,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end text(RIGHT_POS + 2, BOTTOM - 46, floor(data.altMax + 0.5) .. units[data.alt_unit], SMLSIZE + RIGHT) end - ]] if data.gpsHome ~= false then -- Craft location diff --git a/src/iNav/other.lua b/src/iNav/other.lua index 67fbb0a3..62329561 100644 --- a/src/iNav/other.lua +++ b/src/iNav/other.lua @@ -7,6 +7,9 @@ data.fm_id = getTelemetryId("FM") > -1 and getTelemetryId("FM") or getTelemetryI -- Testing Crossfire --if data.simu then data.fm_id = 1 end +-- Testing Nirvana +--data.nv = true + if data.fm_id > -1 then crsf = loadScript(FILE_PATH .. "crsf.luac", env)(config, data, getTelemetryId, FLASH) collectgarbage() @@ -42,7 +45,7 @@ end if config[6].v == -1 then config[6].v = data.alt_unit == 10 and 400 or 120 end -config[19].x = SMLCD and ((config[14].v == 1 or data.crsf) and 1 or 2) or 2 +config[19].x = SMLCD and ((config[14].v == 1 or data.crsf) and 1 or 2) or (data.nv and 1 or 2) config[19].v = math.min(config[19].x, config[19].v) config[20].v = data.pitot and config[20].v or 0 if config[28].v == 0 then diff --git a/src/iNav/save.lua b/src/iNav/save.lua index 2dd97df0..761c6e23 100644 --- a/src/iNav/save.lua +++ b/src/iNav/save.lua @@ -10,11 +10,11 @@ else if fh ~= nil then local floor = math.floor local format = string.format - for line = 1, #config do - if config[line].d == nil then - io.write(fh, string.format("%0" .. config[line].c .. "d", config[line].v)) + for i = 1, #config do + if config[i].d == nil then + io.write(fh, string.format("%0" .. config[i].c .. "d", config[i].v)) else - io.write(fh, floor(config[line].v * 10)) + io.write(fh, floor(config[i].v * 10)) end end io.close(fh) From b45b03422234b89aca28ad6fb2c12928e1fd38df Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 1 Sep 2019 15:57:10 -0400 Subject: [PATCH 12/34] Refactoring for local LCD functions --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11302 -> 11322 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11302 -> 11322 bytes dist/SCRIPTS/TELEMETRY/iNav/alt.luac | Bin 8362 -> 8052 bytes dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3130 -> 3243 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7847 -> 7562 bytes dist/SCRIPTS/TELEMETRY/iNav/func_t.luac | Bin 3726 -> 3530 bytes dist/SCRIPTS/TELEMETRY/iNav/horus.luac | Bin 15613 -> 15528 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6650 -> 6545 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 14349 -> 14149 bytes dist/SCRIPTS/TELEMETRY/iNav/pilot.luac | Bin 11456 -> 11033 bytes dist/SCRIPTS/TELEMETRY/iNav/radar.luac | Bin 8678 -> 8376 bytes dist/SCRIPTS/TELEMETRY/iNav/view.luac | Bin 7016 -> 6727 bytes src/iNav.lua | 22 +-- src/iNav/alt.lua | 127 +++++++++-------- src/iNav/build.lua | 7 +- src/iNav/data.lua | 2 +- src/iNav/func_h.lua | 56 ++++---- src/iNav/func_t.lua | 60 ++++---- src/iNav/horus.lua | 9 +- src/iNav/menu.lua | 18 +-- src/iNav/nirvana.lua | 23 ++-- src/iNav/pilot.lua | 168 +++++++++++------------ src/iNav/radar.lua | 122 ++++++++-------- src/iNav/view.lua | 78 +++++------ 24 files changed, 339 insertions(+), 353 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 77ece8f87cd5e446b2256908622defc3b947c285..3fdee544e806ee8b801994d8bc62aebd0ce37977 100644 GIT binary patch delta 1309 zcmZ`&O>Y!O5Pj9te)`H%r8w$})V;$u#2)-!83YS15&e#fe3RLsiv#yRlRyuPrHA2x6i0ce?6Rk zroBe^@YSRK@2ZSa>~|PtXB{x0wU;5-a5%SRW}QK}KVX7k;|#|v{{0R<=8U2;Zo0CO zFnBa5<8Ed9fIniHsY9?}1y`^*_I&|_t%@Lk;>MTF90tI#G(lg)n&^;X2aU7!1~pi& zISXQ`=`B-V`cV5Lgqcav+hAlH>jDDW*@$qOfQlL27W=B$5c^dGXE}VlVUGx4*xOOnP;vL}TYk_t7)87~4I^ zSaS;30m{$@1L(2LS*(gq=62D+E~>bU+c@d?kHjD2%(v0S9ugPuy5vZgDsy`u;`We( z)sC0FAq0;>RDgqikD25f2OI1SG8DSwcdLJ$3P3JE5~w99Oo>C;B@~3IQ1Mi%5ao)a zLcxRqn>2vU1EwNi8*0R<<~Y|J^c-Y*Oq+r=Cg9hl8EAR$Q|3}Mov_CRVPBx@Dxm^l zQ^)Ch z*O&*DK$2M--e`UIeQhkGNOzFb6*Uq}f0fMeMQinkkskS7lDSbe&>h*^J7=v!K*77?AH^N%hr{Rh5%EnWZs delta 1276 zcmZ`&O>Y}j6g~HipWhoh32F!#_sh^0=R-n5%?61Ddcm2QgkNB(vRHM?nho+rs^ex+ zDaBI%04i*exnv2hrj0@w30o7q>sS zE>_-^Sd28KAy?#vT$PsGl4Ysmf6w>iwQ9i5U0EJ~-T8cgNHhJ|^ok#m6qv{Tpx6!u zpE4~&*C;V&Tz#dR(7CQG93jUMs@zPwxEl09f)&k*E_#?E36b(nU=M1tFg?qgVhBW& zq6RA(J%Px8z_kjPYo6>e9c4&uUK~~5wUhuXst8yX*;G)kXv{?G*1)Ak-O#|y47`oh zrxD^|r130Lu{B}`u%#;Zh>-*#!JP`v5|1P>FsUe$DwZi)fnC5RyD&p9RIaf*#fx7P68BuSLFhmh-^)QTNl8Lra(L= zqhPG#$$GM+7j_Vj|6Jc%%I$uU+fmV#61#T1wz0K(`uQkq%O|R%$`WEV#-DAxf44C= zj%J+~_1OOe3$LX<{$*pUo!jH$NZ2K*?)IdJ@!PyJoLZheZf{;Qe0{jt9-O*+s_|cQ zGiFuB`kVxzjbpSdEAqD7mOCPH JbG-82+CSf)7$N`w diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index 77ece8f87cd5e446b2256908622defc3b947c285..3fdee544e806ee8b801994d8bc62aebd0ce37977 100644 GIT binary patch delta 1309 zcmZ`&O>Y!O5Pj9te)`H%r8w$})V;$u#2)-!83YS15&e#fe3RLsiv#yRlRyuPrHA2x6i0ce?6Rk zroBe^@YSRK@2ZSa>~|PtXB{x0wU;5-a5%SRW}QK}KVX7k;|#|v{{0R<=8U2;Zo0CO zFnBa5<8Ed9fIniHsY9?}1y`^*_I&|_t%@Lk;>MTF90tI#G(lg)n&^;X2aU7!1~pi& zISXQ`=`B-V`cV5Lgqcav+hAlH>jDDW*@$qOfQlL27W=B$5c^dGXE}VlVUGx4*xOOnP;vL}TYk_t7)87~4I^ zSaS;30m{$@1L(2LS*(gq=62D+E~>bU+c@d?kHjD2%(v0S9ugPuy5vZgDsy`u;`We( z)sC0FAq0;>RDgqikD25f2OI1SG8DSwcdLJ$3P3JE5~w99Oo>C;B@~3IQ1Mi%5ao)a zLcxRqn>2vU1EwNi8*0R<<~Y|J^c-Y*Oq+r=Cg9hl8EAR$Q|3}Mov_CRVPBx@Dxm^l zQ^)Ch z*O&*DK$2M--e`UIeQhkGNOzFb6*Uq}f0fMeMQinkkskS7lDSbe&>h*^J7=v!K*77?AH^N%hr{Rh5%EnWZs delta 1276 zcmZ`&O>Y}j6g~HipWhoh32F!#_sh^0=R-n5%?61Ddcm2QgkNB(vRHM?nho+rs^ex+ zDaBI%04i*exnv2hrj0@w30o7q>sS zE>_-^Sd28KAy?#vT$PsGl4Ysmf6w>iwQ9i5U0EJ~-T8cgNHhJ|^ok#m6qv{Tpx6!u zpE4~&*C;V&Tz#dR(7CQG93jUMs@zPwxEl09f)&k*E_#?E36b(nU=M1tFg?qgVhBW& zq6RA(J%Px8z_kjPYo6>e9c4&uUK~~5wUhuXst8yX*;G)kXv{?G*1)Ak-O#|y47`oh zrxD^|r130Lu{B}`u%#;Zh>-*#!JP`v5|1P>FsUe$DwZi)fnC5RyD&p9RIaf*#fx7P68BuSLFhmh-^)QTNl8Lra(L= zqhPG#$$GM+7j_Vj|6Jc%%I$uU+fmV#61#T1wz0K(`uQkq%O|R%$`WEV#-DAxf44C= zj%J+~_1OOe3$LX<{$*pUo!jH$NZ2K*?)IdJ@!PyJoLZheZf{;Qe0{jt9-O*+s_|cQ zGiFuB`kVxzjbpSdEAqD7mOCPH JbG-82+CSf)7$N`w diff --git a/dist/SCRIPTS/TELEMETRY/iNav/alt.luac b/dist/SCRIPTS/TELEMETRY/iNav/alt.luac index 5693b23290dc51a4cadb8c0d75e0bc288bea8cd9..4c1cf92ed4f30a52fb31182d696be7bbd5c56cd0 100644 GIT binary patch literal 8052 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 Lk{`>v2I;>6c^gk2 literal 8362 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 Dpo-+t diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index def1fee48385e8839901eeab5402351c59786125..0f1886cd83f233448aa89da9237602baa9df287e 100644 GIT binary patch delta 146 zcmdlbv08G143mWZM!D%MnryBK4D785Ty8+x{pbU(HXz;3n#g?&NFR57$UUFAfmNQN zfuU{lK9*p%05%o|28NvE6b3d?z1*ImJB<7{(0EI-L SLT;HkIjJddiOmAsT8sdZh$wOZ delta 33 pcmZ22xl3Y#43miZM!D%Mob#C*nB^H77#cU>=S%DXl8Mx7&rX82K^wzG3$$O0ekl62yHZTmuHzW+!a3wN2Muq5(xJ*mmi94r9XDO?9r>=v))Dx?tb!g1Kqh z$>nLMbu%O0Pt!T~4XbbKKfPRm{FXz|l z){lp_wXE-Hy_kLC zOXFv`I`>WTG8knmjg``xnXRssSIIky*|o}C{a+dB3u~*32DnsRDHE^NAFm$|jm7hI zjb?#=JJk(b=>(GO1}+;0DNtKjdxgBdm@M852mn!o{zQuB*P$@6Z7gram z;ZainCTQ1cbMGterP3AV#nOLEPcr*emX3Y>YGod>lMq_VSFP6SWogtO z{CA`Nk_E`B^w_lZMyb|VUz@2Q05s{9Qe(-Cmevn^8MA4| z@g?dX6HtMW=A@*8LOKgW3P?~}M)Zj^>10Fs6av|cd@6`6-IGe(B*-lU`S@=5S&9OO zye%Iva&KZIB(Nw;nJ$p!rt)wVJ8y|J10mq2h?Ge z79^xV`i)W)i8P69nhMQ4o%G3N*o3$VSQ;=7FfW05L4h(+!71Q5B6ge&e}~$^4qc0c z+m3d~Ywplp(RAO&`&(kvjYJP!48RBaoW!#)B4;9cUtmi+k>5k5K&ZS!LOGO*nmr_3 zkNoW(+SvB#VwT*?(cixl%RWm*X8<)JjnxIzjSH|b>+1W5=z?!-IuYE`yh5Q!Y#pLP zc8BhPujh(h z1pFPHhHW}z6G!&1^Y5^o9WS^;#vkDA=e1nNwT_O_5&maBi7w4Mi7tIjO0hlzVH$GZ zF*;DXYh7D>K*y==>Ui+`=o6M-3Dx!ygRC>hNnqy*bCmuY{$qQ^JUsudku&@! z7!~Ci@frk2S#QCy;zPzDI*M57N322?Bp0SFoI~_j7GuyBjz|4Y^QV2;e5$a;Hsd%` z&Of}i8ONv+KH?_``YDR~AvfX+_Tbp?#Y1|&?SDug1s`_n!nV?W^t7!sjp!lBer!Jt z%(wlIV8h7e659?wvNmK}9W&#QV9$@}ZX|y3NB?8@gW%&m{63~WQFKNr_~pL16%X&m z24Xnzb@pK@Y<)}{&1t&PRMg)36J6VK($6=WsmbPtsm^%bPqTlQrg)^AW)pkX*-0gI zvwzlf-)=fTkD3l$bdl|orj+WD$j~3g6I9IGsQC_mvWQilT)US<<3seOisizjGrC%bEnPH@!asG z^D((+r6#vhoiC%5aGgROG3AdLu9mnm*aB@NxPMui!OxcLfW8zLS1V(W1*m+C@s#v> zL2f2LJ7cA?sK;XriU)(TqY|-+R!XlKTdh>k!>~mfuVqUO6i;rv&3J-A9j{no86+Y+ z6f<}v9y}Qj{&vbBs|7nF&l|H0ec_7>=Zw{+iX)>lWQl%WYB}bs+zb^iD}K%>I;TyZDD2Jt_iPLqEwXHBTqkVJTv+& zOy64x>0JZ*X^3^-^XjdZU^C1JoB6#sH~A?y40wDm8^nO#$WXk;%vFnD8~fR z^BN2_Vcax4`TSRns7v!zG@I<6#kG2&Vtw{Bq_i}juuJLwsq}k4;m==AnEMDH4 zFH_}uqgt~q&`kL?gceVqFV$9g7xIVq5RnifBU0Ge=2g#`pEGz&;p@=hFXFL5k~XCj zZ9I2WsB^(RtiPd%^qdTZ$F(z%jzoPq8IU*{kkcPY=N>YOCw$}@-|+)|6c8bDyypPF zDO1t`eiQhphy7bJb#%)-(Q7ytz{xcd(Q94MwE;avx2~Op9r}- zYil6J=rL}f?}WK13LQArrJsi>wSo1(cln660pD!;(rpJ4y`W1skk8+Q5B?ZzIUfk+ z-o+WYe{0)0>I|ojI!*GMg5JXWHD@^8Zc5;j`!n@_-(fo*gPae_^?WGmPS$K6y_Kw? zzAUw&UP%lmE#Nc8>T$TUd(Mv*XYw&(lJAmzXVaYg-u;-yGw~qK*z}|X9byN=188yt zZ|JViI^JH@Gy1&8(iAA95s9w~X(9~al~70jCVKj-(if4!X*P=Boh|A^gq@ViVaxD_ z-m^EEoH^fccqCaI^@HDEkCl5ydY{63VSRadus&BSmsbaC<(JnhwKB>n@7?K%@#*4= z2q->Oc2`JDAbg;n(UM=2&wpU_2EJ)J^3Ql&BPs5p8O3I8Zb?JzVaCvsGqB03Q&oRZMxK@NRd3o#Du7~10yLl?1Y42>;K2neD*A9ObAj?Fo(f#5^@0ds>q`pEEoaI?hfUN+l<{wj9>9XQi(%Nsg;wJfBcF z(orFNpDsx5x<9Q7@+Q3~>HC}o3t^r{s7)KPKy7G=%QMh78Ua871|Dv>pe()9ruN<&SDZ^-}s zuU*OBOqMapicIB)p%N1;)mF;$CZpCHmAP+D)NzF1B->c3RT~Z59~mJpUkyDTncE(w z!PQ)2qWeErT3$yl#Os#k?5&nr$DQYAF+Ejotk+ftW2%Fi*PlTCSDhagKprA-OZI9*FD?cV}#_#9~8trpWovB z4nrvOJ3QhHJ4=XeoeiWI!7h6f>v4KZqTlB2NU?*T_e2uB^A9ptCF?MX%8TD!rv*Wo{| z3V}RC*DdWp9YW>kwELl5zI2$nbnp-F>JS`8??VUMI2^Nlp<5?k>fPlld%O9n-d(<7 zZ#Q4ux9!^Q2yAyG;R}Ct^9YaZ@(5GiJP7w*|DbI9HM7xeBE}8KTzn41 zQk@I`k)&>9{nc%02EV>$5_Z@1$R!J;f3t(|LOl3J3_4{7_Z$Cf2J*XcF~A|&&<;!H zJk9q2)(Qq7V+JawiyUh}^!&a%6P-ts%-)srIsKbE9=kfZSb5gcyT29_jxTUz-Oj9i zdw+Q$O72O%WYIp1DTJ}qmtzWVe>)~FK53VE=96n$cFm8M~O6LNlqnMcH(9>Em0Ct zN>nH+anfPEkMzhcot*~lfHj7(VZg8-h7J1@-lJ@?c9%9qei>jGa|if`{j~l(puj%o z-uoU&%f?m;)VuF|Kj+?i&bgPzXLgG7BvPr=2p#+J*yszR6o15lpJMn`BI_}pr#zxk zK=eaF)b(8I1))tA39mzR#J5rp0}>xaLjF7=a(tIE4L9WiA2b9lH5#cC4HEZ7qcMcD ztU+9J2-g_GU5D((kY39k&>Q^4ATHn7rArpkge2*8Y`WxQOc-0KL7vtikJlK&{a^@Z zrK#;tQM)mfjyh>N(uw^I{<7=kNHiQ`|9er_o({!dDVU!bgxyrI&JgV5Ua(6K5Z4J; zNX;{n@F+NJzJqu}=8vXb?~`e|_es|)kkcqAx})Jedm0^(d;@0Cpz26Fj6j(EsYf1c({U1VFFOsA`!uoR3_*bbe zf0vvLMt-@zQQXqd>Q-r!oN++6%FEk-z(n8J+FaAf_3B26m{)zAgLo(^hHon}gZ$0u zVdTajlH6frMJq@_+UnMO@)0i)E-{ z1DPad_&_l*x>PB};Cii+fNMLTc7U(Hu3&6Xy;k0Mx&FGgu2S5tm)@)EiQ*R^v}yGZ zwv5Q~T=BiPtDAUJl8RSZ7hC_K0yRLTs%OrmAs!qOQu9NOIza4jp3%$84g@$5Bv z>CA4P^7a`T&)QBtdxqK=&o!IQA-o@Ko^iY;GE_qf(G+wW&l|p#{>;CdLhRDs?g;(5 zA!G=Rh+)P{?W5qjL($|ua;AKGm?isB=eOUFZNDfB=?Q7WcCvc#^?}JuQD+}LFq!Ey z>wb!Lxwf=}>?rkM-#bkyTFq(rCareo{y-cuvTdEETPz1gwEeSmQJzgt(9?A6Pjp1c zW~?KhJxeXyS8_QMwk*uIKa(D^t#M#4-|h^@*=k#}q~`;=J9m{`N0pD3^0C|Tm7c^G zdp7aqhHYiopNTLHyJxizlpf;CH)rXn>^iEd?T*o~RezjI-ku zG{dq>Wo0|A?Q5>yRp6y4_+Hl=a7Qu?Qhe!v%ebl zg=3}GilbtsWHi4--tL$7$^blX&m)GB!xcB5oi{N=teVg1aY&MB=CaLyIA?$1%x1qB z*4J2|8;wGGR9gSYwhgU~&X@aZ18X>0xAtM`H5bU4T%;4%CFQR#()eU*?J4DTypd}F|uO#u7-0p{|-{9 z%Dt6kQ+8Hr#rGFW*HAGI1IKT~N-bT&gBG2R1Y7NQV zf(Q+|0RoT@AD67Z%UW#t^3WXFTk1#X6InynG=R_nNC< z8`YH(3KCa4R3lwPxd3ezxxQczaGBQ?>CqKe5B_f54CvLkL~8_%7=)aPDZcJH`ypg; z>f)lY%8(w7DJUMCbO-7gSFw%aH67B8GCCoSNd1~$tRtXY#q@ZVQ3J1FF$xkB4#f%% z$AhoLgWsIi#B$X@+zUD^r@ryc)g>LZ`9l88A{n8-=PEl^sx#F!lvsw=xe^=vm9<#T zj;pLvYXAf_L*SORd}cB;UNb(itmWGFs+L+?-B>X^;Z-A)3a*-wmtWR1bLK-m>C4s4 z)$-axy;$GbHaxpOi+R3f2H|`Rd0m^7%?=jr*FGhFI6h#dMTDq zZy9NFR?phxxi{a?manf=(ZTX;t!-`R%4P~*hS6FNy%Zbr=ydwipYrFwPV4nv!=j5d zgx}GEc_xzeskgDPt zrjlRgOWXBo&Gc1z>oWL4v9`&Zl0WE>p7MDUutj_=8vQ07EkX@-UD3s}Cqon#qKDwU zEr}G&4TU4nX9ce10(T-HF&>b0FmkPjl7REjNO+cq6NChJh!cckfnJ|3=>$%d;|)q3 z?6|4%j((m9q;(0pCqVoHN%Tj^@4})>9@j2QLYyAE1Nb1ugEq402pC?3KF(*{YYyy3 zP9>|ADyJ#ln#HT}Jkgx1ChsYUOPvl*t+=OFzIN)B*D#MSky!!|Z9&SMexOM3+mwD> z!0=gdUIOMaz7~!BJ|3+n;_O5&Tih8=;4gTjXGJcv8l&2v4~Bh|HyqC}>QBnj@e)#=^*y~qZ=Xt#6b}E&V+sn05Y4c>Q^zKf%RzlI{y}mFz zvru>&OOa2u!vz)q+Uqex{~X_c!q=j7ghz|a_J^05D5T@y;w_lrrA0x5m!iPdKJM{$ z#W*r!!dO^z8_QD5@I@CgZo6dOky0dDnFy_CLc?hW$0!e%9I>8Qr_y6DB*Mn) zx;dn@Zj$O=kn#rm8c@dYk-U!hOiTKR`Hx9?b3&$N3w%A3h8PFC7$<=vTjRn6_ld$$ z0rKHH^Tjx~Ao!Tz$O2+@kB$=I9mgW9dc;%giPfOpZeH2Lab_9QB!7HV%|QzM_i?0S zAB-*TedR+BaKuad!S-NYl|6&_kZsU5DS23jZF!$=VIC6uW$YVb!nBA<8@pA{^{`A0 zOXl$>Y#Zb%zG*r6lNaGLr#nv1!#lU%=kCpFHmLbJi7`*a_Qi4Xv+N~Z~ld;s3O4-SJ_2gA(scxKHE^XG6&hp9)*T{-*$F$^~n!fttd^WYTczNNih0D3Z z{K6usyFUg^T`VkK_UEU(v!t@Ng3T>X%^RSxs_d%yVeI_5#mh5Oxuh*Fhbp`=O1I1^ zpFZu@Ovhbcvt?kG>83GyMt=QgV0Q6M(I`JMD9e0BbulE1a{-tAjPR@}At~?#E`CwA zy-;0MEs2K3?bSylf=m=)Px@#D4$F+!!Jfi6{4)4`@Mo=@m!)>FOSd?WO60A`rdyn& zu_prL$P+04iq@O7a=|3cMR%+rdXetadufV-G>J}{a())PWIt1na0d9C|65NmKp)|% z>8X11Rz7e=3wGZ0^0vBkH-1H^F%OJiQILU+8P;iK#2KOd@_JABW%ca?edK}1AE8|1 zjPffJ{fsVB0dYNoxZX2$?fId&ws0Xo7{5H?e9743Mf;Mr%oC%-bKs2*=*CqT_#VW5 zM5BE_#D0QXPmOg83!8Pbe?xkM{e8XB{$ai1KwqzSU|4T}>##U}5w6j!v0=U5EMh<4 zUw~^XL+@dYw1?K%SYJ;7{}9W;A1oYeF8Kk%@#mDDG5qkv^Tm1g4eSTAKl}IPHh_Go z&YNrRPYT@Ts2>ZMgn9MV`m=KHAM0&z(lWB;a(w6l>+hW6wXOeh-=yzrUF|EC_fKZt7vj;dOFSk$Ll?j=olG{TJ)$XG6?;^8ZE zO-XO=xz|wHH>n3hm4Y47_b`S#x%_y|nDl7N4Csm(xZ7s1^}W4Ci72_tc-4@79!m&g zC$7X2e)PRqxT|YK(nK3`zHacZyz34(!Ms#v3zMoN#t;oIe|Vn_f9~S-b9~cu;8i?w zNWgk??~^xi4*mtsySV`EKMq?Gn>Q4a#u`M(-PE!o3UR0SjwkJy=0?z`ne9BA=CepD zo1R6(x?-9qb#XJM^x@ze+XVjv=x`s*_K?jRjOWhb4VB!35q?wSVm@@yH&c#(^;tMK aQ<&7}2aa?9wht^&fbhYpCqE3@3;tgd&0xa- diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac index eca75941740f5d2275146ff2fea8cf4c214a2778..7160811518e356c49576a8a832ff478e90bea579 100644 GIT binary patch literal 3530 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 Vk8$-(^o`3nqhRus0*Mnj{|8UPq@n-- diff --git a/dist/SCRIPTS/TELEMETRY/iNav/horus.luac b/dist/SCRIPTS/TELEMETRY/iNav/horus.luac index 9b736a47864fddbc9057ea823baa1d36c749f31b..90c8181a1bef195b5690b4a28007a14ecaff1615 100644 GIT binary patch literal 15528 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 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/menu.luac b/dist/SCRIPTS/TELEMETRY/iNav/menu.luac index fb0ac0dcf10d4040dac3bc673f94fc09c2d0a217..761899d0e5d7bc9924d66c8efbf9e453dbcf42d7 100644 GIT binary patch literal 6545 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 bS#D^D_r@C#aQ?qU5HJ11hgclsmv;Xb4vfn3 literal 6650 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 T-2a#n#B=}fZ6I!h=eYk1sw6S> diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index 6a36381f9e4fc33698e32da0704904e075166918..f25115f104a6517611b80d639101d0db72b7c6f3 100644 GIT binary patch literal 14149 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 literal 14349 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 Jev7P diff --git a/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac b/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac index aa4ae339b5e9a434b566a88ce5e8cdc7190975e0..4c21f3a7f939f18dcb2fbdf96230038b63b3f35f 100644 GIT binary patch literal 11033 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 MAMp3^-u)y03oy!u;Q#;t diff --git a/dist/SCRIPTS/TELEMETRY/iNav/radar.luac b/dist/SCRIPTS/TELEMETRY/iNav/radar.luac index 2aca7e53f31798873578d463e225fafd1938d5f2..5d388132cbe2067cbce31008bf5b00c048c06195 100644 GIT binary patch literal 8376 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 C@|_w0 literal 8678 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 Iqid4>7hAI*qW}N^ diff --git a/dist/SCRIPTS/TELEMETRY/iNav/view.luac b/dist/SCRIPTS/TELEMETRY/iNav/view.luac index 753e5243170e43c94284cbc5343c8f1815ec5193..db2e907c4b8cf79857e3eb7f1ee3eabbf4f33a2f 100644 GIT binary patch literal 6727 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 literal 7016 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 -1 and not data.armed)) then @@ -523,12 +523,12 @@ local function run(event) view = loadScript(FILE_PATH .. (HORUS and (data.nv and "nirvana" or "horus") or (config[25].v == 0 and "view" or (config[25].v == 1 and "pilot" or (config[25].v == 2 and "radar" or "alt")))) .. ext, env)() data.v = config[25].v end - view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) + view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) end collectgarbage() -- Paint title - title(data, config, icons, SMLCD) + title() return 0 end diff --git a/src/iNav/alt.lua b/src/iNav/alt.lua index dc9d04dd..355a325c 100644 --- a/src/iNav/alt.lua +++ b/src/iNav/alt.lua @@ -1,5 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) - +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) local LEFT_DIV = 36 local LEFT_POS = SMLCD and LEFT_DIV or 73 local RIGHT_POS = SMLCD and LCD_W - 31 or LCD_W - 53 @@ -10,16 +9,16 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Startup message if data.startup == 2 then if not SMLCD then - lcd.drawText(LEFT_POS + 8, 28, "Lua Telemetry") + text(LEFT_POS + 8, 28, "Lua Telemetry") end - lcd.drawText(X_CNTR - 10, SMLCD and 29 or 40, "v" .. VERSION) + text(X_CNTR - 10, SMLCD and 29 or 40, "v" .. VERSION) end -- Flight modes tmp = X_CNTR - (SMLCD and 16 or 19) - lcd.drawText(tmp + 1, 9, modes[data.modeId].t, SMLSIZE + modes[data.modeId].f) + text(tmp + 1, 9, modes[data.modeId].t, SMLSIZE + modes[data.modeId].f) if data.headFree then - lcd.drawText(tmp, 9, "HF", SMLSIZE + FLASH + RIGHT) + text(tmp, 9, "HF", SMLSIZE + FLASH + RIGHT) end -- Pitch calculation @@ -34,19 +33,19 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if SMLCD then if data.showDir then -- GPS coords - lcd.drawText(RIGHT_POS, 49, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - lcd.drawText(RIGHT_POS, 57, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS, 49, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(RIGHT_POS, 57, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) else - lcd.drawLine(LEFT_POS + 31, 48, LEFT_POS + 31, 63, SOLID, FORCE) + line(LEFT_POS + 31, 48, LEFT_POS + 31, 63, SOLID, FORCE) -- Distance tmp = data.showMax and data.distanceMax or data.distanceLast - lcd.drawText(LEFT_POS + 29, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) - lcd.drawText(LEFT_POS + 10, 49, "Dist", SMLSIZE) + text(LEFT_POS + 29, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS + 10, 49, "Dist", SMLSIZE) icons.home(LEFT_POS + 2, 49) -- Altitude tmp = data.showMax and data.altitudeMax or data.altitude - lcd.drawText(RIGHT_POS, 57, math.floor(tmp + 0.5) .. units[data.alt_unit], SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) - lcd.drawText(RIGHT_POS, 49, "Alt", SMLSIZE + RIGHT) + text(RIGHT_POS, 57, math.floor(tmp + 0.5) .. units[data.alt_unit], SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(RIGHT_POS, 49, "Alt", SMLSIZE + RIGHT) if data.altHold then icons.lock(RIGHT_POS - 20, 49) end @@ -54,37 +53,37 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end -- Min/Max if not data.showDir and data.showMax then - lcd.drawText(RIGHT_POS, 9, "\192", SMLSIZE + RIGHT) + text(RIGHT_POS, 9, "\192", SMLSIZE + RIGHT) end if data.startup == 0 then -- Altitude graph local BOTTOM = SMLCD and 47 or 63 tmp = (SMLCD and 30 or 40) / (data.altMax - data.altMin) - lcd.drawLine(RIGHT_POS - 60, BOTTOM, RIGHT_POS - 1, BOTTOM, SOLID, SMLCD and FORCE or GREY_DEFAULT + FORCE) + line(RIGHT_POS - 60, BOTTOM, RIGHT_POS - 1, BOTTOM, SOLID, SMLCD and FORCE or GREY_DEFAULT + FORCE) for i = 1, 60 do local cx = RIGHT_POS - 61 + i local cy = math.floor(BOTTOM - (data.alt[((data.altCur - 2 + i) % 60) + 1] - data.altMin) * tmp) if cy < BOTTOM then - lcd.drawLine(cx, cy, cx, BOTTOM - 1, SOLID, SMLCD and FORCE or GREY_DEFAULT + FORCE) + line(cx, cy, cx, BOTTOM - 1, SOLID, SMLCD and FORCE or GREY_DEFAULT + FORCE) end if (i ~= 1 or not SMLCD) and (i - 1) % (60 / config[28].v) == 0 then - lcd.drawLine(cx, BOTTOM - (SMLCD and 30 or 40), cx, BOTTOM, DOTTED, 0) + line(cx, BOTTOM - (SMLCD and 30 or 40), cx, BOTTOM, DOTTED, 0) end end if data.altMin < -1 then local cy = data.altMin * tmp + BOTTOM - lcd.drawLine(RIGHT_POS - 60, cy, RIGHT_POS - 1, cy, DOTTED, 0) + line(RIGHT_POS - 60, cy, RIGHT_POS - 1, cy, DOTTED, 0) end if not SMLCD then - lcd.drawText(RIGHT_POS - 60, 19, math.floor(data.altMax + 0.5) .. units[data.alt_unit], SMLSIZE + RIGHT) + text(RIGHT_POS - 60, 19, math.floor(data.altMax + 0.5) .. units[data.alt_unit], SMLSIZE + RIGHT) end -- Orientation if not SMLCD and data.telem then if data.showDir or data.headingRef == -1 then - lcd.drawText(LEFT_POS + 12, 29, "N", SMLSIZE) - lcd.drawText(LEFT_POS + 25 - (data.heading < 100 and 3 or 0) - (data.heading < 10 and 3 or 0), 57, math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS + 12, 29, "N", SMLSIZE) + text(LEFT_POS + 25 - (data.heading < 100 and 3 or 0) - (data.heading < 10 and 3 or 0), 57, math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) tmp = data.heading else tmp = data.heading - data.headingRef @@ -94,104 +93,104 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local r3 = math.rad(tmp - 145) local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, LEFT_POS + 14, 45, 7) if data.headingHold then - lcd.drawFilledRectangle((x2 + x3) * 0.5 - 1, (y2 + y3) * 0.5 - 1, 3, 3, SOLID) + fill((x2 + x3) * 0.5 - 1, (y2 + y3) * 0.5 - 1, 3, 3, SOLID) else - lcd.drawLine(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) + line(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) end - lcd.drawLine(x1, y1, x2, y2, SOLID, FORCE) - lcd.drawLine(x1, y1, x3, y3, SOLID, FORCE) + line(x1, y1, x2, y2, SOLID, FORCE) + line(x1, y1, x3, y3, SOLID, FORCE) end end -- Variometer if config[7].v % 2 == 1 then - lcd.drawLine(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + (SMLCD and 4 or 6), 8, RIGHT_POS + (SMLCD and 4 or 6), 63, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + 1, 35, RIGHT_POS + (SMLCD and 3 or 5), 35, SMLCD and DOTTED or SOLID, SMLCD and 0 or GREY_DEFAULT) + line(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) + line(RIGHT_POS + (SMLCD and 4 or 6), 8, RIGHT_POS + (SMLCD and 4 or 6), 63, SOLID, FORCE) + line(RIGHT_POS + 1, 35, RIGHT_POS + (SMLCD and 3 or 5), 35, SMLCD and DOTTED or SOLID, SMLCD and 0 or GREY_DEFAULT) if data.armed then tmp = math.log(1 + math.min(math.abs(0.6 * (data.vspeed_unit == 6 and data.vspeed * 0.3048 or data.vspeed)), 10)) * (data.vspeed < 0 and -1 or 1) local y1 = 36 - (tmp * 11) local y2 = 36 - (tmp * 9) - lcd.drawLine(RIGHT_POS + 1, y1 - 1, RIGHT_POS + (SMLCD and 3 or 5), y2 - 1, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + 1, y1, RIGHT_POS + (SMLCD and 3 or 5), y2, SOLID, FORCE) + line(RIGHT_POS + 1, y1 - 1, RIGHT_POS + (SMLCD and 3 or 5), y2 - 1, SOLID, FORCE) + line(RIGHT_POS + 1, y1, RIGHT_POS + (SMLCD and 3 or 5), y2, SOLID, FORCE) end else - lcd.drawLine(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) + line(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) end -- Right data - GPS - lcd.drawText(LCD_W, data.crsf and 20 or 8, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) + text(LCD_W, data.crsf and 20 or 8, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) icons.gps(LCD_W - (SMLCD and 23 or 22), data.crsf and 24 or 12) if data.crsf then - lcd.drawText(LCD_W, SMLCD and 9 or 11, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) + text(LCD_W, SMLCD and 9 or 11, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) else - lcd.drawText(LCD_W + 1, SMLCD and 43 or 24, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) + text(LCD_W + 1, SMLCD and 43 or 24, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) end if SMLCD then if data.crsf == false then - lcd.drawText(LCD_W + 1, config[22].v == 0 and 32 or 22, "HDOP", RIGHT + SMLSIZE) + text(LCD_W + 1, config[22].v == 0 and 32 or 22, "HDOP", RIGHT + SMLSIZE) end hdopGraph(LCD_W - 12, config[22].v == 0 and (data.crsf and 37 or 24) or 31, MIDSIZE, SMLCD) else hdopGraph(LCD_W - 39, data.crsf and 24 or 10, MIDSIZE, SMLCD) if data.crsf == false then - lcd.drawText(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) + text(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) end - lcd.drawText(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - lcd.drawText(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) - lcd.drawText(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) + text(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) end - lcd.drawLine(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) + line(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) local rssiFlags = RIGHT + ((not data.telem or data.rssi < data.rssiLow) and FLASH or 0) - lcd.drawText(LCD_W - (data.crsf and 6 or 10), 52, math.min(data.showMax and data.rssiMin or data.rssiLast, data.crsf and 100 or 99), MIDSIZE + rssiFlags) - lcd.drawText(LCD_W, 57, data.crsf and "%" or "dB", SMLSIZE + rssiFlags) + text(LCD_W - (data.crsf and 6 or 10), 52, math.min(data.showMax and data.rssiMin or data.rssiLast, data.crsf and 100 or 99), MIDSIZE + rssiFlags) + text(LCD_W, 57, data.crsf and "%" or "dB", SMLSIZE + rssiFlags) -- Left data - Battery - lcd.drawLine(LEFT_DIV, 8, LEFT_DIV, 63, SOLID, FORCE) + line(LEFT_DIV, 8, LEFT_DIV, 63, SOLID, FORCE) tmp = (not data.telem or data.cell < config[3].v or (data.showFuel and config[23].v == 0 and data.fuel <= config[17].v)) and FLASH or 0 if data.showFuel then if config[23].v > 0 or (data.crsf and data.showMax) then - lcd.drawText(LEFT_DIV, data.showCurr and 8 or 10, (data.crsf and data.fuelRaw or data.fuel), MIDSIZE + RIGHT + tmp) - lcd.drawText(LEFT_DIV, data.showCurr and 20 or 23, data.fUnit[data.crsf and 1 or config[23].v], SMLSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 8 or 10, (data.crsf and data.fuelRaw or data.fuel), MIDSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 20 or 23, data.fUnit[data.crsf and 1 or config[23].v], SMLSIZE + RIGHT + tmp) else - lcd.drawText(LEFT_DIV - 5, data.showCurr and 8 or 12, data.fuel, DBLSIZE + RIGHT + tmp) - lcd.drawText(LEFT_DIV, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) + text(LEFT_DIV - 5, data.showCurr and 8 or 12, data.fuel, DBLSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) end end - lcd.drawText(LEFT_DIV - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) - lcd.drawText(LEFT_DIV, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) + text(LEFT_DIV - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) if data.showCurr then tmp = data.showMax and data.currentMax or data.current - lcd.drawText(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) - lcd.drawText(LEFT_DIV, 47, "A", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV, 47, "A", SMLSIZE + RIGHT + data.telemFlags) end - lcd.drawLine(0, data.showCurr and 55 or 53, LEFT_DIV, data.showCurr and 55 or 53, SOLID, FORCE) + line(0, data.showCurr and 55 or 53, LEFT_DIV, data.showCurr and 55 or 53, SOLID, FORCE) tmp = data.showMax and data.speedMax or data.speed - lcd.drawText(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or string.format("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or string.format("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) -- Left data - Wide screen if not SMLCD then - lcd.drawLine(LEFT_POS, 8, LEFT_POS, 63, SOLID, FORCE) + line(LEFT_POS, 8, LEFT_POS, 63, SOLID, FORCE) -- Altitude tmp = data.showMax and data.altitudeMax or data.altitude local tmp2 = data.alt_unit == 9 and 6 or 2 - lcd.drawText(LEFT_DIV + 2, 9, "Alt", SMLSIZE) - lcd.drawText(LEFT_POS - tmp2, data.alt_unit == 9 and 21 or 17, units[data.alt_unit], SMLSIZE + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) - lcd.drawText(LEFT_POS - tmp2, 16, math.floor(tmp + 0.5), MIDSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(LEFT_DIV + 2, 9, "Alt", SMLSIZE) + text(LEFT_POS - tmp2, data.alt_unit == 9 and 21 or 17, units[data.alt_unit], SMLSIZE + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(LEFT_POS - tmp2, 16, math.floor(tmp + 0.5), MIDSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) if data.altHold then icons.lock(LEFT_POS - 6, 9) end -- Distance tmp = data.showMax and data.distanceMax or data.distanceLast tmp2 = data.dist_unit == 9 and (tmp < 1000 and 6 or 11) or (tmp < 1000 and 2 or 10) - lcd.drawText(LEFT_DIV + 2, 30, "Dist", SMLSIZE) - lcd.drawText(LEFT_POS - tmp2, (data.dist_unit == 9 or tmp >= 1000) and 42 or 38, tmp < 1000 and units[data.dist_unit] or (data.dist_unit == 9 and "km" or "mi"), SMLSIZE + data.telemFlags) - lcd.drawText(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV + 2, 30, "Dist", SMLSIZE) + text(LEFT_POS - tmp2, (data.dist_unit == 9 or tmp >= 1000) and 42 or 38, tmp < 1000 and units[data.dist_unit] or (data.dist_unit == 9 and "km" or "mi"), SMLSIZE + data.telemFlags) + text(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) --Pitch - lcd.drawLine(LEFT_DIV, 50, LEFT_POS, 50, SOLID, FORCE) - lcd.drawText(LEFT_DIV + 5, 54, pitch > 0 and "\194" or (pitch == 0 and "->" or "\195"), SMLSIZE) - lcd.drawText(LEFT_POS, 53, "\64", SMLSIZE + RIGHT + data.telemFlags) - lcd.drawText(LEFT_POS - 4, 52, pitch, MIDSIZE + RIGHT + data.telemFlags) + line(LEFT_DIV, 50, LEFT_POS, 50, SOLID, FORCE) + text(LEFT_DIV + 5, 54, pitch > 0 and "\194" or (pitch == 0 and "->" or "\195"), SMLSIZE) + text(LEFT_POS, 53, "\64", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS - 4, 52, pitch, MIDSIZE + RIGHT + data.telemFlags) end end diff --git a/src/iNav/build.lua b/src/iNav/build.lua index 7f3529c2..56011b6b 100644 --- a/src/iNav/build.lua +++ b/src/iNav/build.lua @@ -5,6 +5,7 @@ local SMLCD = LCD_W < 212 local HORUS = LCD_W >= 480 local v, r, m, i, e = getVersion() local env = "tc" +--env = "tcd" -- Uncomment to compile with extra debug info print("") print("--------------------- COMPILE SCRIPTS ---------------------") @@ -12,12 +13,12 @@ print("") local config = loadScript(FILE_PATH .. "config", env)(SMLCD) local modes, units, labels = loadScript(FILE_PATH .. "modes", env)(HORUS) -local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU = loadScript(FILE_PATH .. "data", env)(r, m, i, HORUS) +local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, text, line, rect, fill = loadScript(FILE_PATH .. "data", env)(r, m, i, HORUS) loadScript(FILE_PATH .. "load", env)(config, data, FILE_PATH) if HORUS then - local title, gpsDegMin, hdopGraph, icons = loadScript(FILE_PATH .. "func_h", env)(config, data, FILE_PATH) + local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_h", env)(config, data, SMLCD, FILE_PATH, text, line, rect, fill) end -local title, gpsDegMin, hdopGraph, icons = loadScript(FILE_PATH .. "func_t", env)(config, data, FILE_PATH) +local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_t", env)(config, data, SMLCD, FILE_PATH, text, line, rect, fill) data.lang = "en" data.voice = "en" diff --git a/src/iNav/data.lua b/src/iNav/data.lua index 77eecfe0..f59973cb 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -94,4 +94,4 @@ local data = { fUnit = {"mAh", "mWh"}, } -return data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU \ No newline at end of file +return data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, lcd.drawText, lcd.drawLine, lcd.drawRectangle, lcd.drawFilledRectangle \ No newline at end of file diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index 82e14bac..3b4535ed 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -1,8 +1,6 @@ -local config, data, FILE_PATH = ... +local config, data, SMLCD, FILE_PATH, text, line, rect, fill = ... -local function title(data, config, icons, SMLCD) - local text = lcd.drawText - local fill = lcd.drawFilledRectangle +local function title() local color = lcd.setColor local fmt = string.format local tmp = 0 @@ -52,7 +50,7 @@ local function title(data, config, icons, SMLCD) if data.configStatus > 0 then color(CUSTOM_COLOR, 12678) -- Dark grey fill(0, 30, 75, (22 * (data.crsf and 1 or 2)) + 14, CUSTOM_COLOR) - icons.rectangle(0, 30, 75, (22 * (data.crsf and 1 or 2)) + 14, TEXT_COLOR) + rect(0, 30, 75, (22 * (data.crsf and 1 or 2)) + 14, TEXT_COLOR) text(4, 37, "Sats:", 0) text(72, 37, data.satellites % 100, RIGHT + tmp) if not data.crsf then @@ -84,7 +82,6 @@ local function gpsDegMin(c, lat) end local function hdopGraph(x, y) - local fill = lcd.drawFilledRectangle lcd.setColor(CUSTOM_COLOR, data.hdop < 11 - config[21].v * 2 and YELLOW or WHITE) for i = 4, 9 do if i > data.hdop then @@ -117,13 +114,25 @@ if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then data.widget = true if iNavZone.zone.w < (data.nv and 280 or 450) or iNavZone.zone.h < (data.nv and 450 or 250) then data.startupTime = math.huge - function icons.nfs() - lcd.drawText(iNavZone.zone.x + 14, iNavZone.zone.y + 16, "Full screen required", SMLSIZE + WARNING_COLOR) + function data.nfs() + text(iNavZone.zone.x + 14, iNavZone.zone.y + 16, "Full screen required", SMLSIZE + WARNING_COLOR) end end end -function icons.clear(event, data) +-- Nirvana's drawRectangle function is broken, replace it +if data.nv then + function rect(x, y, w, h, color) + w = w - 1 + h = h - 1 + line(x, y, x + w, y, SOLID, color) + line(x + w, y, x + w, y + h, SOLID, color) + line(x + w, y + h, x, y + h, SOLID, color) + line(x, y + h, x, y, SOLID, color) + end +end + +function data.clear(event) lcd.setColor(CUSTOM_COLOR, data.nv and (data.configStatus > 0 and 25422 or 12942) or 264) --lcd.RGB(98, 106, 115) / lcd.RGB(50, 82, 115) / lcd.RGB(0, 32, 65) lcd.clear(CUSTOM_COLOR) lcd.setColor(TEXT_COLOR, WHITE) @@ -170,7 +179,7 @@ function icons.clear(event, data) return event end -function icons.menu(config, data, icons, prev) +function data.menu(prev) if config[30].v ~= prev then icons.fg = Bitmap.open(FILE_PATH .. "pics/fg" .. config[30].v .. ".png") end @@ -178,33 +187,20 @@ function icons.menu(config, data, icons, prev) -- Aircraft symbol preview if data.configStatus == 27 and data.configSelect ~= 0 then lcd.setColor(CUSTOM_COLOR, data.nv and 13660 or 982) -- Sky - lcd.drawFilledRectangle(LCD_W - 124, (data.nv and 28 or 111), 123, 31, CUSTOM_COLOR) + fill(LCD_W - 124, (data.nv and 28 or 111), 123, 31, CUSTOM_COLOR) lcd.setColor(CUSTOM_COLOR, data.nv and 37799 or 25121) -- Ground - lcd.drawFilledRectangle(LCD_W - 124, (data.nv and 59 or 142), 123, 31, CUSTOM_COLOR) + fill(LCD_W - 124, (data.nv and 59 or 142), 123, 31, CUSTOM_COLOR) lcd.drawBitmap(icons.fg, LCD_W - 125, (data.nv and 27 or 110), 50) - icons.rectangle(LCD_W - 125, (data.nv and 27 or 110), 125, 64, TEXT_COLOR) + rect(LCD_W - 125, (data.nv and 27 or 110), 125, 64, TEXT_COLOR) end -- Return throttle stick to bottom center if data.stickMsg ~= nil and not data.armed then lcd.setColor(CUSTOM_COLOR, BLACK) - lcd.drawFilledRectangle(data.nv and 6 or 20, data.nv and 270 or 128, data.nv and 308 or 439, 30, CUSTOM_COLOR) + fill(data.nv and 6 or 20, data.nv and 270 or 128, data.nv and 308 or 439, 30, CUSTOM_COLOR) lcd.setColor(CUSTOM_COLOR, YELLOW) - icons.rectangle(data.nv and 5 or 19, data.nv and 269 or 127, data.nv and 310 or 441, 32, CUSTOM_COLOR) - lcd.drawText(data.nv and 14 or 28, data.nv and 275 or 128, data.stickMsg, (data.nv and SMLSIZE or MIDSIZE) + CUSTOM_COLOR) - end -end - -function icons.rectangle(x, y, w, h, color) - if data.nv then - w = w - 1 - h = h - 1 - lcd.drawLine(x, y, x + w, y, SOLID, color) - lcd.drawLine(x + w, y, x + w, y + h, SOLID, color) - lcd.drawLine(x + w, y + h, x, y + h, SOLID, color) - lcd.drawLine(x, y + h, x, y, SOLID, color) - else - lcd.drawRectangle(x, y, w, h, color) + rect(data.nv and 5 or 19, data.nv and 269 or 127, data.nv and 310 or 441, 32, CUSTOM_COLOR) + text(data.nv and 14 or 28, data.nv and 275 or 128, data.stickMsg, (data.nv and SMLSIZE or MIDSIZE) + CUSTOM_COLOR) end end -return title, gpsDegMin, hdopGraph, icons \ No newline at end of file +return title, gpsDegMin, hdopGraph, icons, rect \ No newline at end of file diff --git a/src/iNav/func_t.lua b/src/iNav/func_t.lua index 3b059b06..a443c50f 100644 --- a/src/iNav/func_t.lua +++ b/src/iNav/func_t.lua @@ -1,34 +1,34 @@ -local config, data, FILE_PATH = ... +local config, data, SMLCD, FILE_PATH, text, line, rect, fill = ... -local function title(data, config, icons, SMLCD) - lcd.drawFilledRectangle(0, 0, LCD_W, 8, FORCE) - lcd.drawText(0, 0, model.getInfo().name, INVERS) +local function title() + fill(0, 0, LCD_W, 8, FORCE) + text(0, 0, model.getInfo().name, INVERS) if data.doLogs and data.time ~= nil then - lcd.drawText(SMLCD and 50 or 145, 1, data.time, SMLSIZE + 3) - lcd.drawLine(SMLCD and 50 or 145, 7, SMLCD and 83 or 178, 7, SOLID, FORCE) + text(SMLCD and 50 or 145, 1, data.time, SMLSIZE + 3) + line(SMLCD and 50 or 145, 7, SMLCD and 83 or 178, 7, SOLID, FORCE) elseif config[13].v > 0 then lcd.drawTimer(SMLCD and 60 or 150, 1, data.timer, SMLSIZE + INVERS) end if config[19].v > 0 then - lcd.drawFilledRectangle(86, 1, 19, 6, ERASE) - lcd.drawLine(105, 2, 105, 5, SOLID, ERASE) + fill(86, 1, 19, 6, ERASE) + line(105, 2, 105, 5, SOLID, ERASE) tmp = math.max(math.min((data.txBatt - data.txBattMin) / (data.txBattMax - data.txBattMin) * 17, 17), 0) + 86 for i = 87, tmp, 2 do - lcd.drawLine(i, 2, i, 5, SOLID, FORCE) + line(i, 2, i, 5, SOLID, FORCE) end end if config[19].v ~= 1 then - lcd.drawText(SMLCD and ((config[14].v == 1 or data.crsf) and 105 or LCD_W) or 128, 1, string.format("%.1fV", data.txBatt), SMLSIZE + RIGHT + INVERS) + text(SMLCD and ((config[14].v == 1 or data.crsf) and 105 or LCD_W) or 128, 1, string.format("%.1fV", data.txBatt), SMLSIZE + RIGHT + INVERS) end if data.rxBatt > 0 and data.telem and config[14].v == 1 then - lcd.drawText(LCD_W, 1, string.format("%.1fV", data.rxBatt), SMLSIZE + RIGHT + INVERS) + text(LCD_W, 1, string.format("%.1fV", data.rxBatt), SMLSIZE + RIGHT + INVERS) elseif data.crsf then - lcd.drawText(LCD_W, 1, (data.rfmd == 2 and 150 or (data.telem and 50 or "--")) .. (SMLCD and "" or "Hz"), SMLSIZE + RIGHT + INVERS) + text(LCD_W, 1, (data.rfmd == 2 and 150 or (data.telem and 50 or "--")) .. (SMLCD and "" or "Hz"), SMLSIZE + RIGHT + INVERS) end - --[[ Show FPS + --[[ Show FPS - Should always be 20fps on Taranis data.frames = data.frames + 1 - lcd.drawText(SMLCD and 57 or 80, 1, string.format("%.1f", data.frames / (getTime() - data.fpsStart) * 100), SMLSIZE + RIGHT + INVERS) + text(SMLCD and 57 or 80, 1, string.format("%.1f", data.frames / (getTime() - data.fpsStart) * 100), SMLSIZE + RIGHT + INVERS) ]] end @@ -41,41 +41,41 @@ local function hdopGraph(x, y, s, SMLCD) local tmp = ((data.armed or data.modeId == 6) and data.hdop < 11 - config[21].v * 2) or not data.telem if config[22].v == 0 then if tmp then - lcd.drawText(x, y, " ", SMLSIZE + 3) + text(x, y, " ", SMLSIZE + 3) end for i = 4, 9 do - lcd.drawLine(x - 8 + (i * 2), (data.hdop >= i or not SMLCD) and y + 8 - i or y + 5, x - 8 + (i * 2), y + 5, SOLID, (data.hdop >= i or SMLCD) and 0 or GREY_DEFAULT) + line(x - 8 + (i * 2), (data.hdop >= i or not SMLCD) and y + 8 - i or y + 5, x - 8 + (i * 2), y + 5, SOLID, (data.hdop >= i or SMLCD) and 0 or GREY_DEFAULT) end else - lcd.drawText(x + 12, s == SMLSIZE and y or y - 2, (data.hdop == 0 and not data.gpsFix) and "--" or (9 - data.hdop) * 0.5 + 0.8, s + RIGHT + (tmp and 3 or 0)) + text(x + 12, s == SMLSIZE and y or y - 2, (data.hdop == 0 and not data.gpsFix) and "--" or (9 - data.hdop) * 0.5 + 0.8, s + RIGHT + (tmp and 3 or 0)) end end local icons = {} function icons.gps(x, y) - lcd.drawLine(x + 1, y, x + 5, y + 4, SOLID, 0) - lcd.drawLine(x + 1, y + 1, x + 4, y + 4, SOLID, 0) - lcd.drawLine(x + 1, y + 2, x + 3, y + 4, SOLID, 0) - lcd.drawLine(x, y + 5, x + 2, y + 5, SOLID, 0) + line(x + 1, y, x + 5, y + 4, SOLID, 0) + line(x + 1, y + 1, x + 4, y + 4, SOLID, 0) + line(x + 1, y + 2, x + 3, y + 4, SOLID, 0) + line(x, y + 5, x + 2, y + 5, SOLID, 0) lcd.drawPoint(x + 4, y + 1) lcd.drawPoint(x + 1, y + 4) end function icons.lock(x, y) - lcd.drawRectangle(x, y + 2, 5, 4, 0) - lcd.drawRectangle(x + 1, y, 3, 5, FORCE) + rect(x, y + 2, 5, 4, 0) + rect(x + 1, y, 3, 5, FORCE) end function icons.home(x, y) lcd.drawPoint(x + 3, y - 1) - lcd.drawLine(x + 2, y, x + 4, y, SOLID, 0) - lcd.drawLine(x + 1, y + 1, x + 5, y + 1, SOLID, 0) - lcd.drawLine(x, y + 2, x + 6, y + 2, SOLID, 0) - lcd.drawLine(x + 1, y + 3, x + 1, y + 5, SOLID, 0) - lcd.drawLine(x + 5, y + 3, x + 5, y + 5, SOLID, 0) - lcd.drawLine(x + 2, y + 5, x + 4, y + 5, SOLID, 0) + line(x + 2, y, x + 4, y, SOLID, 0) + line(x + 1, y + 1, x + 5, y + 1, SOLID, 0) + line(x, y + 2, x + 6, y + 2, SOLID, 0) + line(x + 1, y + 3, x + 1, y + 5, SOLID, 0) + line(x + 5, y + 3, x + 5, y + 5, SOLID, 0) + line(x + 2, y + 5, x + 4, y + 5, SOLID, 0) lcd.drawPoint(x + 3, y + 4) end -return title, gpsDegMin, hdopGraph, icons \ No newline at end of file +return title, gpsDegMin, hdopGraph, icons, rect \ No newline at end of file diff --git a/src/iNav/horus.lua b/src/iNav/horus.lua index 9dec7679..215b5aa9 100644 --- a/src/iNav/horus.lua +++ b/src/iNav/horus.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) local rgb = lcd.RGB local SKY = 982 --rgb(0, 121, 180) @@ -19,14 +19,11 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local Y_CNTR = 83 --(TOP + BOTTOM) / 2 local DEGV = 160 local tmp, tmp2, top2, bot2, pitch, roll, roll1, upsideDown - local text = lcd.drawText - local line = lcd.drawLine - local fill = lcd.drawFilledRectangle local bmap = lcd.drawBitmap local color = lcd.setColor - local max = math.max - local min = math.min local floor = math.floor + local min = math.min + local max = math.max local abs = math.abs local rad = math.rad local deg = math.deg diff --git a/src/iNav/menu.lua b/src/iNav/menu.lua index 51c874d3..796ddfce 100644 --- a/src/iNav/menu.lua +++ b/src/iNav/menu.lua @@ -1,4 +1,4 @@ -local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, icons, SMLCD, FLASH, PREV, NEXT, HORUS, env) +local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, SMLCD, FLASH, PREV, NEXT, HORUS, text, rect, fill, env) local CONFIG_X = HORUS and (data.nv and 10 or 90) or (SMLCD and 0 or 46) local TOP = HORUS and (data.nv and 107 or 37) or 11 @@ -55,12 +55,12 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, if HORUS then if not data.nv then lcd.setColor(CUSTOM_COLOR, GREY) - lcd.drawFilledRectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, HIGH * (ROWS + 1) + 12, CUSTOM_COLOR) + fill(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, HIGH * (ROWS + 1) + 12, CUSTOM_COLOR) end - icons.rectangle(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, HIGH * (ROWS + 1) + 12, SOLID, TEXT_COLOR) + rect(CONFIG_X - 10, TOP - 7, LCD_W - CONFIG_X * 2 + 20, HIGH * (ROWS + 1) + 12, TEXT_COLOR) lcd.setColor(CUSTOM_COLOR, data.nv and LIGHTGREY or 12678) -- Dark grey elseif not SMLCD then - lcd.drawRectangle(CONFIG_X - 5, TOP - 2, LCD_W - CONFIG_X * 2 + 10, HIGH * (ROWS + 1) + 1, SOLID) + rect(CONFIG_X - 5, TOP - 2, LCD_W - CONFIG_X * 2 + 10, HIGH * (ROWS + 1) + 1, SOLID) end -- Special limit cases @@ -189,10 +189,10 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, if config2[z].p == 1 and HORUS then tmp = tmp + CUSTOM_COLOR end - lcd.drawText(CONFIG_X, y, config2[z].t, FONT + ((config2[z].p == 1 and HORUS) and CUSTOM_COLOR or 0)) + text(CONFIG_X, y, config2[z].t, FONT + ((config2[z].p == 1 and HORUS) and CUSTOM_COLOR or 0)) if config2[z].p == nil then if config2[z].l == nil then - lcd.drawText(CONFIG_X + RSIDE, y, (config[z].d ~= nil and string.format("%.1f", config[z].v) or config[z].v) .. config2[z].a, FONT + tmp) + text(CONFIG_X + RSIDE, y, (config[z].d ~= nil and string.format("%.1f", config[z].v) or config[z].v) .. config2[z].a, FONT + tmp) else if config2[z].l == 0 then if config[z].v == 0 then @@ -204,14 +204,14 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, config2[z].l = offOn end if not config2[z].l then - lcd.drawText(CONFIG_X + RSIDE, y, config[z].v, FONT + tmp) + text(CONFIG_X + RSIDE, y, config[z].v, FONT + tmp) else - lcd.drawText(z == 16 and LCD_W - CONFIG_X or CONFIG_X + RSIDE, y, config2[z].l[config[z].v] .. ((config2[z].a == nil or config[z].v == 0) and "" or config2[z].a), FONT + tmp + (z == 16 and RIGHT or 0)) + text(z == 16 and LCD_W - CONFIG_X or CONFIG_X + RSIDE, y, config2[z].l[config[z].v] .. ((config2[z].a == nil or config[z].v == 0) and "" or config2[z].a), FONT + tmp + (z == 16 and RIGHT or 0)) end end config2[z] = nil else - lcd.drawText(CONFIG_X + RSIDE, y, "--", FONT + tmp) + text(CONFIG_X + RSIDE, y, "--", FONT + tmp) end end diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 2aaa79f0..2f85d9a7 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) local rgb = lcd.RGB local SKY = 13660 --rgb(50, 171, 230) @@ -9,7 +9,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic --local DKMAP = 544 --rgb(0, 70, 0) local LIGHTMAP = rgb(50, 200, 50) --local DATA = 12942 --rgb(50, 82, 115) - --local GREY = rgb(180, 182, 180) local DKGREY = 33874 --rgb(98, 106, 115) local RIGHT_POS = 270 local X_CNTR = 134 --(RIGHT_POS + LEFT_POS [0]) / 2 - 1 @@ -20,14 +19,11 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local Y_CNTR = 83 --(TOP + BOTTOM) / 2 local DEGV = 160 local tmp, tmp2, top2, bot2, pitch, roll, roll1, upsideDown - local text = lcd.drawText - local line = lcd.drawLine - local fill = lcd.drawFilledRectangle local bmap = lcd.drawBitmap local color = lcd.setColor - local max = math.max - local min = math.min local floor = math.floor + local min = math.min + local max = math.max local abs = math.abs local rad = math.rad local deg = math.deg @@ -251,12 +247,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end -- Speed & altitude tics - tics(data.speed, 1) - tics(data.altitude, RIGHT_POS - 4) - if config[28].v == 0 and config[33].v == 0 then - text(42, TOP - 1, units[data.speed_unit], SMLSIZE) - text(RIGHT_POS - 43, TOP - 1, "Alt " .. units[data.alt_unit], SMLSIZE + RIGHT) - elseif config[28].v > 0 then + if config[28].v == 0 then + tics(data.speed, 1) + tics(data.altitude, RIGHT_POS - 4) text(42, Y_CNTR - 25, units[data.speed_unit], SMLSIZE + RIGHT) text(RIGHT_POS - 4, Y_CNTR - 25, "Alt " .. units[data.alt_unit], SMLSIZE + RIGHT) end @@ -520,7 +513,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end color(CUSTOM_COLOR, data.fc) --lcd.drawGauge(bleft, btop + 26, bwidth, 15, min(data.fuel, 99), 100, CUSTOM_COLOR) - icons.rectangle(bleft, btop + 27, bwidth, 15, CUSTOM_COLOR) + rect(bleft, btop + 27, bwidth, 15, CUSTOM_COLOR) local w = max(1, (min(data.fuel, 100) * 0.01) * (bwidth - 2)) fill(1, btop + 28, w, 13, CUSTOM_COLOR) end @@ -540,7 +533,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end color(CUSTOM_COLOR, data.bc) --lcd.drawGauge(bleft, btop + 27, bwidth, 15, min(max(val - config[3].v + 0.1, 0) * (100 / (4.2 - config[3].v + 0.1)), 99), 100, CUSTOM_COLOR) - icons.rectangle(bleft, btop + 27, bwidth, 15, CUSTOM_COLOR) + rect(bleft, btop + 27, bwidth, 15, CUSTOM_COLOR) local w = max(1, (min(max(val - config[3].v + 0.1, 0) * (100 / (4.2 - config[3].v + 0.1)), 100) * 0.01) * (bwidth - 2)) fill(bleft + 1, btop + 28, w, 13, CUSTOM_COLOR) diff --git a/src/iNav/pilot.lua b/src/iNav/pilot.lua index edd348c9..1b6e7643 100644 --- a/src/iNav/pilot.lua +++ b/src/iNav/pilot.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) local LEFT_POS = SMLCD and 0 or 36 local RIGHT_POS = SMLCD and LCD_W - 31 or LCD_W - 53 @@ -24,9 +24,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local yd = math.cos(roll1) * r local x1, y1, x2, y2 = x - xd, y + yd, x + xd, y - yd if (y1 > 15 or y2 > 15) and (y1 < 56 or y2 < 56) then - lcd.drawLine(x1, y1, x2, y2, SMLCD and DOTTED or (adj % 10 == 0 and SOLID or DOTTED), SMLCD and 0 or (adj > 0 and GREY_DEFAULT or 0)) + line(x1, y1, x2, y2, SMLCD and DOTTED or (adj % 10 == 0 and SOLID or DOTTED), SMLCD and 0 or (adj > 0 and GREY_DEFAULT or 0)) if not SMLCD and adj % 10 == 0 and adj ~= 0 and y1 > 15 and y1 < 56 then - lcd.drawText(x1 - 2, y1 - 3, math.abs(adj), SMLSIZE + RIGHT) + text(x1 - 2, y1 - 3, math.abs(adj), SMLSIZE + RIGHT) end end end @@ -41,14 +41,14 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic for x = LEFT_POS + 1, RIGHT_POS - 1 do local yy = y + 0.5 if (not upsideDown and yy < 64) or (upsideDown and yy > 7) then - lcd.drawLine(x, math.min(math.max(yy, 8), 63), x, upsideDown and 8 or 63, SOLID, SMLCD and 0 or GREY_DEFAULT) + line(x, math.min(math.max(yy, 8), 63), x, upsideDown and 8 or 63, SOLID, SMLCD and 0 or GREY_DEFAULT) end y = y + a end elseif (y1 > 15 or y2 > 15) and (y1 < 56 or y2 < 56) then - lcd.drawLine(x1, y1, x2, y2, SMLCD and DOTTED or (adj % 10 == 0 and SOLID or DOTTED), SMLCD and 0 or (adj > 0 and GREY_DEFAULT or 0)) + line(x1, y1, x2, y2, SMLCD and DOTTED or (adj % 10 == 0 and SOLID or DOTTED), SMLCD and 0 or (adj > 0 and GREY_DEFAULT or 0)) if not SMLCD and adj % 10 == 0 and adj ~= 0 and y1 > 15 and y1 < 56 then - lcd.drawText(x1 - 2, y1 - 3, math.abs(adj), SMLSIZE + RIGHT) + text(x1 - 2, y1 - 3, math.abs(adj), SMLSIZE + RIGHT) end end ]] @@ -57,7 +57,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local function tics(v, p) for i = v % 10 + 8, 56, 10 do if i < 31 or i > 41 then - lcd.drawLine(p, i, p + 1, i, SOLID, 0) + line(p, i, p + 1, i, SOLID, 0) end end end @@ -65,9 +65,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Startup message if data.startup == 2 then if not SMLCD then - lcd.drawText(50, 20, "INAV Lua Telemetry") + text(50, 20, "INAV Lua Telemetry") end - lcd.drawText(X_CNTR - 12, SMLCD and 20 or 42, "v" .. VERSION) + text(X_CNTR - 12, SMLCD and 20 or 42, "v" .. VERSION) end -- Orientation @@ -78,12 +78,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local r3 = math.rad(data.heading - data.headingRef - 145) local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, x, 21, 7) if data.headingHold then - lcd.drawFilledRectangle((x2 + x3) * 0.5 - 1, (y2 + y3) * 0.5 - 1, 3, 3, SOLID) + fill((x2 + x3) * 0.5 - 1, (y2 + y3) * 0.5 - 1, 3, 3, SOLID) else - lcd.drawLine(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) + line(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) end - lcd.drawLine(x1, y1, x2, y2, SOLID, FORCE) - lcd.drawLine(x1, y1, x3, y3, SOLID, FORCE) + line(x1, y1, x2, y2, SOLID, FORCE) + line(x1, y1, x3, y3, SOLID, FORCE) end -- Attitude part 1 (pitch ladder) @@ -108,7 +108,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end if not data.showMax then tmp2 = tmp >= 0 and (tmp < 1 and 0 or math.floor(tmp + 0.5)) or (tmp > -1 and 0 or math.ceil(tmp - 0.5)) - lcd.drawText(X_CNTR - (SMLCD and 14 or 24), 33, math.abs(tmp2) .. (SMLCD and "" or "\64"), SMLSIZE + RIGHT) + text(X_CNTR - (SMLCD and 14 or 24), 33, math.abs(tmp2) .. (SMLCD and "" or "\64"), SMLSIZE + RIGHT) end end @@ -121,15 +121,15 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end if home >= LEFT_POS - (SMLCD and 0 or 7) and home <= RIGHT_POS - 1 then tmp = (home > X_CNTR - 15 and home < X_CNTR + 10) and 49 or 50 - lcd.drawFilledRectangle(home, tmp - 1, 7, 8, ERASE) + fill(home, tmp - 1, 7, 8, ERASE) if data.distanceLast < data.distRef then - lcd.drawText(home + 1, tmp, " ", SMLSIZE + FLASH) + text(home + 1, tmp, " ", SMLSIZE + FLASH) end icons.home(home, tmp) end elseif data.showMax then - lcd.drawText(LEFT_POS + 21, 33, "\192", SMLSIZE) - lcd.drawText(RIGHT_POS - 22, 33, "\192", SMLSIZE + RIGHT) + text(LEFT_POS + 21, 33, "\192", SMLSIZE) + text(RIGHT_POS - 22, 33, "\192", SMLSIZE + RIGHT) end -- Heading part 1 @@ -138,57 +138,57 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic tmp = math.floor(LEFT_POS + ((i - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 2.5) if tmp >= LEFT_POS and tmp <= RIGHT_POS then if i % 90 == 0 then - lcd.drawText(tmp - 2, 57, i == 0 and "N" or (i == 90 and "E" or (i == 180 and "S" or "W")), SMLSIZE) + text(tmp - 2, 57, i == 0 and "N" or (i == 90 and "E" or (i == 180 and "S" or "W")), SMLSIZE) elseif i % 45 == 0 then - lcd.drawText(tmp - 4, 57, i == 45 and "NE" or (i == 135 and "SE" or (i == 225 and "SW" or "NW")), SMLSIZE) + text(tmp - 4, 57, i == 45 and "NE" or (i == 135 and "SE" or (i == 225 and "SW" or "NW")), SMLSIZE) elseif tmp < X_CNTR - 10 or tmp > X_CNTR + 9 then - lcd.drawLine(tmp, 62, tmp, 63, SOLID, FORCE) + line(tmp, 62, tmp, 63, SOLID, FORCE) end end end - lcd.drawFilledRectangle(RIGHT_POS, 49, 6, 14, ERASE) + fill(RIGHT_POS, 49, 6, 14, ERASE) end -- Battery and GPS overlay if SMLCD then icons.home(LEFT_POS + 4, 42) tmp = data.showMax and data.distanceMax or data.distanceLast - lcd.drawText(LEFT_POS + 12, 42, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + data.telemFlags) + text(LEFT_POS + 12, 42, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + data.telemFlags) tmp = (not data.telem or data.cell < config[3].v or (data.showCurr and config[23].v == 0 and data.fuel <= config[17].v)) and FLASH or 0 if data.showFuel then if config[23].v > 0 or (data.crsf and data.showMax) then - lcd.drawText(RIGHT_POS - 2, 9, (data.crsf and data.fuelRaw or data.fuel), SMLSIZE + RIGHT + tmp) + text(RIGHT_POS - 2, 9, (data.crsf and data.fuelRaw or data.fuel), SMLSIZE + RIGHT + tmp) else - lcd.drawText(RIGHT_POS - 7, 8, data.fuel, MIDSIZE + RIGHT + tmp) - lcd.drawText(RIGHT_POS - 2, 13, "%", SMLSIZE + RIGHT + tmp) + text(RIGHT_POS - 7, 8, data.fuel, MIDSIZE + RIGHT + tmp) + text(RIGHT_POS - 2, 13, "%", SMLSIZE + RIGHT + tmp) end end - lcd.drawText(RIGHT_POS - 7, 19, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) - lcd.drawText(RIGHT_POS - 2, 24, "V", SMLSIZE + RIGHT + tmp) + text(RIGHT_POS - 7, 19, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) + text(RIGHT_POS - 2, 24, "V", SMLSIZE + RIGHT + tmp) if data.showDir then - lcd.drawText(RIGHT_POS - 2, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - lcd.drawText(RIGHT_POS - 2, 49, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS - 2, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(RIGHT_POS - 2, 49, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) elseif data.showCurr then - lcd.drawText(RIGHT_POS - 2, 42, string.format("%.1fA", data.showMax and data.currentMax or data.current), SMLSIZE + RIGHT + data.telemFlags) + text(RIGHT_POS - 2, 42, string.format("%.1fA", data.showMax and data.currentMax or data.current), SMLSIZE + RIGHT + data.telemFlags) end elseif not data.armed and data.startup == 0 then - lcd.drawText(LEFT_POS + 19, 24, "Spd", SMLSIZE + RIGHT) - lcd.drawText(RIGHT_POS - 2, 24, "Alt", SMLSIZE + RIGHT) + text(LEFT_POS + 19, 24, "Spd", SMLSIZE + RIGHT) + text(RIGHT_POS - 2, 24, "Alt", SMLSIZE + RIGHT) end -- Flight modes tmp = X_CNTR - (SMLCD and 16 or 19) - lcd.drawLine(tmp, 9, tmp, 15, SOLID, ERASE) - lcd.drawText(tmp + 1, 9, modes[data.modeId].t, SMLSIZE + modes[data.modeId].f) + line(tmp, 9, tmp, 15, SOLID, ERASE) + text(tmp + 1, 9, modes[data.modeId].t, SMLSIZE + modes[data.modeId].f) if data.headFree then - lcd.drawText(tmp, 9, "HF", SMLSIZE + FLASH + RIGHT) + text(tmp, 9, "HF", SMLSIZE + FLASH + RIGHT) end if data.altHold then icons.lock(RIGHT_POS - 28, 33) end -- Attitude part 2 (artificial horizon) - lcd.drawFilledRectangle(X_CNTR - 1, 34, 3, 3, ERASE) + fill(X_CNTR - 1, 34, 3, 3, ERASE) local x = math.sin(roll1) * 200 local y = math.cos(roll1) * 200 local p = math.cos(math.rad(pitch)) * 85 @@ -198,124 +198,124 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic for x = LEFT_POS + 1, RIGHT_POS - 1 do local yy = y + 0.5 if (not upsideDown and yy < 64) or (upsideDown and yy > 7) then - lcd.drawLine(x, math.min(math.max(yy, 8), 63), x, upsideDown and 8 or 63, SOLID, SMLCD and 0 or GREY_DEFAULT) + line(x, math.min(math.max(yy, 8), 63), x, upsideDown and 8 or 63, SOLID, SMLCD and 0 or GREY_DEFAULT) --[[ Faster? local t = upsideDown and 8 or math.min(math.max(yy, 8), 63) local h = upsideDown and math.min(math.max(yy, 8), 64) - t or 65 - t - lcd.drawFilledRectangle(x, t, 3, h, GREY_DEFAULT) + fill(x, t, 3, h, GREY_DEFAULT) ]] end y = y + a end local inside = SMLCD and 6 or 13 local outside = SMLCD and 14 or 24 - lcd.drawLine(X_CNTR - outside, 35, X_CNTR - inside, 35, SOLID, SMLCD and 0 or FORCE) - lcd.drawLine(X_CNTR + outside, 35, X_CNTR + inside, 35, SOLID, SMLCD and 0 or FORCE) - lcd.drawLine(X_CNTR - inside, 36, X_CNTR - inside, SMLCD and 37 or 38, SOLID, SMLCD and 0 or FORCE) - lcd.drawLine(X_CNTR + inside, 36, X_CNTR + inside, SMLCD and 37 or 38, SOLID, SMLCD and 0 or FORCE) - lcd.drawLine(X_CNTR - 1, 35, X_CNTR + 1, 35, SOLID, SMLCD and 0 or FORCE) + line(X_CNTR - outside, 35, X_CNTR - inside, 35, SOLID, SMLCD and 0 or FORCE) + line(X_CNTR + outside, 35, X_CNTR + inside, 35, SOLID, SMLCD and 0 or FORCE) + line(X_CNTR - inside, 36, X_CNTR - inside, SMLCD and 37 or 38, SOLID, SMLCD and 0 or FORCE) + line(X_CNTR + inside, 36, X_CNTR + inside, SMLCD and 37 or 38, SOLID, SMLCD and 0 or FORCE) + line(X_CNTR - 1, 35, X_CNTR + 1, 35, SOLID, SMLCD and 0 or FORCE) if SMLCD then lcd.drawPoint(X_CNTR, 34, 0) lcd.drawPoint(X_CNTR, 36, 0) else - lcd.drawLine(X_CNTR, 34, X_CNTR, 36, SOLID, FORCE) + line(X_CNTR, 34, X_CNTR, 36, SOLID, FORCE) end -- Heading part 2 if data.showHead then - lcd.drawLine(X_CNTR - 9, 56, X_CNTR + 10, 56, SOLID, ERASE) - lcd.drawLine(X_CNTR - 10, 56, X_CNTR - 10, 63, SOLID, ERASE) - lcd.drawText(X_CNTR - 9, 57, " ", SMLSIZE + data.telemFlags) - lcd.drawText(X_CNTR + 11, 57, math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) + line(X_CNTR - 9, 56, X_CNTR + 10, 56, SOLID, ERASE) + line(X_CNTR - 10, 56, X_CNTR - 10, 63, SOLID, ERASE) + text(X_CNTR - 9, 57, " ", SMLSIZE + data.telemFlags) + text(X_CNTR + 11, 57, math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) if not SMLCD then lcd.drawRectangle(X_CNTR - 11, 55, 23, 10, FORCE) end end -- Speed - lcd.drawLine(LEFT_POS, 8, LEFT_POS, 63, SOLID, FORCE) + line(LEFT_POS, 8, LEFT_POS, 63, SOLID, FORCE) tics(data.speed, LEFT_POS + 1) - lcd.drawLine(LEFT_POS + 1, 32, LEFT_POS + 18, 32, SOLID, ERASE) - lcd.drawText(LEFT_POS + 1, 33, " ", SMLSIZE + data.telemFlags) + line(LEFT_POS + 1, 32, LEFT_POS + 18, 32, SOLID, ERASE) + text(LEFT_POS + 1, 33, " ", SMLSIZE + data.telemFlags) tmp = data.showMax and data.speedMax or data.speed - lcd.drawText(LEFT_POS + 19, 33, data.startup == 0 and (tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp)) or "Spd", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS + 19, 33, data.startup == 0 and (tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp)) or "Spd", SMLSIZE + RIGHT + data.telemFlags) lcd.drawRectangle(LEFT_POS, 31, 20, 10, FORCE) -- Altitude tics(data.altitude, RIGHT_POS - 2) - lcd.drawLine(RIGHT_POS - 21, 32, RIGHT_POS, 32, SOLID, ERASE) + line(RIGHT_POS - 21, 32, RIGHT_POS, 32, SOLID, ERASE) tmp = data.showMax and data.altitudeMax or data.altitude - lcd.drawText(RIGHT_POS - 21, 33, " ", SMLSIZE + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) - lcd.drawText(RIGHT_POS, 33, data.startup == 0 and (math.floor(tmp + 0.5)) or "Alt", SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(RIGHT_POS - 21, 33, " ", SMLSIZE + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(RIGHT_POS, 33, data.startup == 0 and (math.floor(tmp + 0.5)) or "Alt", SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) lcd.drawRectangle(RIGHT_POS - 22, 31, 23, 10, FORCE) -- Variometer if config[7].v % 2 == 1 then - lcd.drawLine(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + (SMLCD and 4 or 6), 8, RIGHT_POS + (SMLCD and 4 or 6), 63, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + 1, 35, RIGHT_POS + (SMLCD and 3 or 5), 35, SMLCD and DOTTED or SOLID, SMLCD and 0 or GREY_DEFAULT) + line(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) + line(RIGHT_POS + (SMLCD and 4 or 6), 8, RIGHT_POS + (SMLCD and 4 or 6), 63, SOLID, FORCE) + line(RIGHT_POS + 1, 35, RIGHT_POS + (SMLCD and 3 or 5), 35, SMLCD and DOTTED or SOLID, SMLCD and 0 or GREY_DEFAULT) if data.armed then tmp = math.log(1 + math.min(math.abs(0.6 * (data.vspeed_unit == 6 and data.vspeed * 0.3048 or data.vspeed)), 10)) * (data.vspeed < 0 and -1 or 1) local y1 = 36 - (tmp * 11) local y2 = 36 - (tmp * 9) - lcd.drawLine(RIGHT_POS + 1, y1 - 1, RIGHT_POS + (SMLCD and 3 or 5), y2 - 1, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + 1, y1, RIGHT_POS + (SMLCD and 3 or 5), y2, SOLID, FORCE) + line(RIGHT_POS + 1, y1 - 1, RIGHT_POS + (SMLCD and 3 or 5), y2 - 1, SOLID, FORCE) + line(RIGHT_POS + 1, y1, RIGHT_POS + (SMLCD and 3 or 5), y2, SOLID, FORCE) end else - lcd.drawLine(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) + line(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) end -- Right data - GPS - lcd.drawText(LCD_W, data.crsf and 20 or 8, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) + text(LCD_W, data.crsf and 20 or 8, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) icons.gps(LCD_W - (SMLCD and 23 or 22), data.crsf and 24 or 12) if data.crsf then - lcd.drawText(LCD_W, SMLCD and 9 or 11, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) + text(LCD_W, SMLCD and 9 or 11, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) else - lcd.drawText(LCD_W + 1, SMLCD and 43 or 24, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) + text(LCD_W + 1, SMLCD and 43 or 24, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) end if SMLCD then if data.crsf == false then - lcd.drawText(LCD_W + 1, config[22].v == 0 and 32 or 22, "HDOP", RIGHT + SMLSIZE) + text(LCD_W + 1, config[22].v == 0 and 32 or 22, "HDOP", RIGHT + SMLSIZE) end hdopGraph(LCD_W - 12, config[22].v == 0 and (data.crsf and 37 or 24) or 31, MIDSIZE, SMLCD) else hdopGraph(LCD_W - 39, data.crsf and 24 or 10, MIDSIZE, SMLCD) if data.crsf == false then - lcd.drawText(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) + text(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) end - lcd.drawText(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - lcd.drawText(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) - lcd.drawText(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) + text(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) end - lcd.drawLine(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) + line(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) local rssiFlags = RIGHT + ((not data.telem or data.rssi < data.rssiLow) and FLASH or 0) - lcd.drawText(LCD_W - (data.crsf and 6 or 10), 52, math.min(data.showMax and data.rssiMin or data.rssiLast, data.crsf and 100 or 99), MIDSIZE + rssiFlags) - lcd.drawText(LCD_W, 57, data.crsf and "%" or "dB", SMLSIZE + rssiFlags) + text(LCD_W - (data.crsf and 6 or 10), 52, math.min(data.showMax and data.rssiMin or data.rssiLast, data.crsf and 100 or 99), MIDSIZE + rssiFlags) + text(LCD_W, 57, data.crsf and "%" or "dB", SMLSIZE + rssiFlags) -- Left data - Battery if not SMLCD then - lcd.drawFilledRectangle(LEFT_POS - 7, 49, 7, 14, ERASE) + fill(LEFT_POS - 7, 49, 7, 14, ERASE) tmp = (not data.telem or data.cell < config[3].v or (data.showFuel and config[23].v == 0 and data.fuel <= config[17].v)) and FLASH or 0 if data.showFuel then if config[23].v > 0 or (data.crsf and data.showMax) then - lcd.drawText(LEFT_POS, data.showCurr and 8 or 10, (data.crsf and data.fuelRaw or data.fuel), MIDSIZE + RIGHT + tmp) - lcd.drawText(LEFT_POS, data.showCurr and 20 or 23, data.fUnit[data.crsf and 1 or config[23].v], SMLSIZE + RIGHT + tmp) + text(LEFT_POS, data.showCurr and 8 or 10, (data.crsf and data.fuelRaw or data.fuel), MIDSIZE + RIGHT + tmp) + text(LEFT_POS, data.showCurr and 20 or 23, data.fUnit[data.crsf and 1 or config[23].v], SMLSIZE + RIGHT + tmp) else - lcd.drawText(LEFT_POS - 5, data.showCurr and 8 or 12, data.fuel, DBLSIZE + RIGHT + tmp) - lcd.drawText(LEFT_POS, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) + text(LEFT_POS - 5, data.showCurr and 8 or 12, data.fuel, DBLSIZE + RIGHT + tmp) + text(LEFT_POS, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) end end - lcd.drawText(LEFT_POS - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) - lcd.drawText(LEFT_POS, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) + text(LEFT_POS - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) + text(LEFT_POS, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) if data.showCurr then tmp = data.showMax and data.currentMax or data.current - lcd.drawText(LEFT_POS - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) - lcd.drawText(LEFT_POS, 47, "A", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_POS, 47, "A", SMLSIZE + RIGHT + data.telemFlags) end - lcd.drawLine(0, data.showCurr and 54 or 53, LEFT_POS, data.showCurr and 54 or 53, SOLID, FORCE) + line(0, data.showCurr and 54 or 53, LEFT_POS, data.showCurr and 54 or 53, SOLID, FORCE) icons.home(0, 57) tmp = data.showMax and data.distanceMax or data.distanceLast - lcd.drawText(LEFT_POS, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) end end diff --git a/src/iNav/radar.lua b/src/iNav/radar.lua index f3a2cfaa..80ddf572 100644 --- a/src/iNav/radar.lua +++ b/src/iNav/radar.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) local LEFT_DIV = 36 local LEFT_POS = SMLCD and LEFT_DIV or 73 @@ -10,16 +10,16 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Startup message if data.startup == 2 then if not SMLCD then - lcd.drawText(LEFT_POS + 8, 28, "Lua Telemetry") + text(LEFT_POS + 8, 28, "Lua Telemetry") end - lcd.drawText(X_CNTR - 10, SMLCD and 29 or 40, "v" .. VERSION) + text(X_CNTR - 10, SMLCD and 29 or 40, "v" .. VERSION) end -- Flight modes tmp = X_CNTR - (SMLCD and 16 or 19) - lcd.drawText(tmp + 1, 9, modes[data.modeId].t, SMLSIZE + modes[data.modeId].f) + text(tmp + 1, 9, modes[data.modeId].t, SMLSIZE + modes[data.modeId].f) if data.headFree then - lcd.drawText(tmp, 9, "HF", SMLSIZE + FLASH + RIGHT) + text(tmp, 9, "HF", SMLSIZE + FLASH + RIGHT) end -- Pitch calculation @@ -34,41 +34,41 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if SMLCD then if data.showDir and (not data.armed or not data.telem) then -- GPS coords - lcd.drawText(RIGHT_POS, 50, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - lcd.drawText(RIGHT_POS, 57, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS, 50, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(RIGHT_POS, 57, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) else -- Distance tmp = data.showMax and data.distanceMax or data.distanceLast - lcd.drawText(LEFT_POS + 25, 57, data.startup > 0 and "Dist " or (tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi"))), SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS + 25, 57, data.startup > 0 and "Dist " or (tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi"))), SMLSIZE + RIGHT + data.telemFlags) -- Altitude tmp = data.showMax and data.altitudeMax or data.altitude - lcd.drawText(RIGHT_POS, 57, data.startup > 0 and "Alt" or (math.floor(tmp + 0.5) .. units[data.alt_unit]), SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(RIGHT_POS, 57, data.startup > 0 and "Alt" or (math.floor(tmp + 0.5) .. units[data.alt_unit]), SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) if data.altHold then icons.lock(RIGHT_POS - 6, 50) end end -- Pitch if data.startup == 0 then - lcd.drawText(LEFT_POS + 15, 17, pitch .. (math.abs(pitch) < 10 and "\64" or ""), SMLSIZE + RIGHT + data.telemFlags) - lcd.drawLine(LEFT_POS + 1, 17, LEFT_POS + 1, 24, SOLID, ERASE) + text(LEFT_POS + 15, 17, pitch .. (math.abs(pitch) < 10 and "\64" or ""), SMLSIZE + RIGHT + data.telemFlags) + line(LEFT_POS + 1, 17, LEFT_POS + 1, 24, SOLID, ERASE) else - lcd.drawText(LEFT_POS + 2, 17, "Ptch", SMLSIZE) + text(LEFT_POS + 2, 17, "Ptch", SMLSIZE) end elseif data.showDir or data.headingRef == -1 then -- Heading - lcd.drawText(X_CNTR + 14 - (data.heading < 100 and 3 or 0) - (data.heading < 10 and 3 or 0), 57, math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) + text(X_CNTR + 14 - (data.heading < 100 and 3 or 0) - (data.heading < 10 and 3 or 0), 57, math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) end -- Min/Max if not data.showDir and data.showMax then - lcd.drawText(RIGHT_POS, 9, "\192", SMLSIZE + RIGHT) + text(RIGHT_POS, 9, "\192", SMLSIZE + RIGHT) end -- Radar if data.startup == 0 then tmp = data.headingRef if data.showDir or data.headingRef == -1 then - lcd.drawText(LEFT_POS + 2, 33, "W", SMLSIZE) - lcd.drawText(RIGHT_POS, 33, "E", SMLSIZE + RIGHT) + text(LEFT_POS + 2, 33, "W", SMLSIZE) + text(RIGHT_POS, 33, "E", SMLSIZE + RIGHT) tmp = 0 end local cx, cy, d @@ -88,7 +88,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if d >= 9 then icons.home(hx - 3, hy - 3) elseif d > 1 then - lcd.drawFilledRectangle(hx - 1, hy - 1, 3, 3, SOLID) + fill(hx - 1, hy - 1, 3, 3, SOLID) end -- Shift craft location cx = d == 1 and X_CNTR + 2 or cx + hx @@ -105,106 +105,106 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, cx, cy, d == 1 and 8 or 5) if data.headingHold then if d == 1 then - lcd.drawFilledRectangle((x2 + x3) * 0.5 - 1.5, (y2 + y3) * 0.5 - 1.5, 4, 4, SOLID) + fill((x2 + x3) * 0.5 - 1.5, (y2 + y3) * 0.5 - 1.5, 4, 4, SOLID) else - lcd.drawFilledRectangle((x2 + x3) * 0.5 - 1, (y2 + y3) * 0.5 - 1, 3, 3, SOLID) + fill((x2 + x3) * 0.5 - 1, (y2 + y3) * 0.5 - 1, 3, 3, SOLID) end else - lcd.drawLine(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) + line(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) end - lcd.drawLine(x1, y1, x2, y2, SOLID, FORCE) - lcd.drawLine(x1, y1, x3, y3, SOLID, FORCE) + line(x1, y1, x2, y2, SOLID, FORCE) + line(x1, y1, x3, y3, SOLID, FORCE) end -- Variometer if config[7].v % 2 == 1 then - lcd.drawLine(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + (SMLCD and 4 or 6), 8, RIGHT_POS + (SMLCD and 4 or 6), 63, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + 1, 35, RIGHT_POS + (SMLCD and 3 or 5), 35, SMLCD and DOTTED or SOLID, SMLCD and 0 or GREY_DEFAULT) + line(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) + line(RIGHT_POS + (SMLCD and 4 or 6), 8, RIGHT_POS + (SMLCD and 4 or 6), 63, SOLID, FORCE) + line(RIGHT_POS + 1, 35, RIGHT_POS + (SMLCD and 3 or 5), 35, SMLCD and DOTTED or SOLID, SMLCD and 0 or GREY_DEFAULT) if data.armed then tmp = math.log(1 + math.min(math.abs(0.6 * (data.vspeed_unit == 6 and data.vspeed * 0.3048 or data.vspeed)), 10)) * (data.vspeed < 0 and -1 or 1) local y1 = 36 - (tmp * 11) local y2 = 36 - (tmp * 9) - lcd.drawLine(RIGHT_POS + 1, y1 - 1, RIGHT_POS + (SMLCD and 3 or 5), y2 - 1, SOLID, FORCE) - lcd.drawLine(RIGHT_POS + 1, y1, RIGHT_POS + (SMLCD and 3 or 5), y2, SOLID, FORCE) + line(RIGHT_POS + 1, y1 - 1, RIGHT_POS + (SMLCD and 3 or 5), y2 - 1, SOLID, FORCE) + line(RIGHT_POS + 1, y1, RIGHT_POS + (SMLCD and 3 or 5), y2, SOLID, FORCE) end else - lcd.drawLine(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) + line(RIGHT_POS, 8, RIGHT_POS, 63, SOLID, FORCE) end -- Right data - GPS - lcd.drawText(LCD_W, data.crsf and 20 or 8, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) + text(LCD_W, data.crsf and 20 or 8, data.satellites % 100, MIDSIZE + RIGHT + data.telemFlags) icons.gps(LCD_W - (SMLCD and 23 or 22), data.crsf and 24 or 12) if data.crsf then - lcd.drawText(LCD_W, SMLCD and 9 or 11, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) + text(LCD_W, SMLCD and 9 or 11, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) else - lcd.drawText(LCD_W + 1, SMLCD and 43 or 24, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) + text(LCD_W + 1, SMLCD and 43 or 24, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) end if SMLCD then if data.crsf == false then - lcd.drawText(LCD_W + 1, config[22].v == 0 and 32 or 22, "HDOP", RIGHT + SMLSIZE) + text(LCD_W + 1, config[22].v == 0 and 32 or 22, "HDOP", RIGHT + SMLSIZE) end hdopGraph(LCD_W - 12, config[22].v == 0 and (data.crsf and 37 or 24) or 31, MIDSIZE, SMLCD) else hdopGraph(LCD_W - 39, data.crsf and 24 or 10, MIDSIZE, SMLCD) if data.crsf == false then - lcd.drawText(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) + text(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) end - lcd.drawText(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - lcd.drawText(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) - lcd.drawText(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) + text(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) end - lcd.drawLine(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) + line(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) local rssiFlags = RIGHT + ((not data.telem or data.rssi < data.rssiLow) and FLASH or 0) - lcd.drawText(LCD_W - (data.crsf and 6 or 10), 52, math.min(data.showMax and data.rssiMin or data.rssiLast, data.crsf and 100 or 99), MIDSIZE + rssiFlags) - lcd.drawText(LCD_W, 57, data.crsf and "%" or "dB", SMLSIZE + rssiFlags) + text(LCD_W - (data.crsf and 6 or 10), 52, math.min(data.showMax and data.rssiMin or data.rssiLast, data.crsf and 100 or 99), MIDSIZE + rssiFlags) + text(LCD_W, 57, data.crsf and "%" or "dB", SMLSIZE + rssiFlags) -- Left data - Battery - lcd.drawLine(LEFT_DIV, 8, LEFT_DIV, 63, SOLID, FORCE) + line(LEFT_DIV, 8, LEFT_DIV, 63, SOLID, FORCE) tmp = (not data.telem or data.cell < config[3].v or (data.showFuel and config[23].v == 0 and data.fuel <= config[17].v)) and FLASH or 0 if data.showFuel then if config[23].v > 0 or (data.crsf and data.showMax) then - lcd.drawText(LEFT_DIV, data.showCurr and 8 or 10, (data.crsf and data.fuelRaw or data.fuel), MIDSIZE + RIGHT + tmp) - lcd.drawText(LEFT_DIV, data.showCurr and 20 or 23, data.fUnit[data.crsf and 1 or config[23].v], SMLSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 8 or 10, (data.crsf and data.fuelRaw or data.fuel), MIDSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 20 or 23, data.fUnit[data.crsf and 1 or config[23].v], SMLSIZE + RIGHT + tmp) else - lcd.drawText(LEFT_DIV - 5, data.showCurr and 8 or 12, data.fuel, DBLSIZE + RIGHT + tmp) - lcd.drawText(LEFT_DIV, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) + text(LEFT_DIV - 5, data.showCurr and 8 or 12, data.fuel, DBLSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) end end - lcd.drawText(LEFT_DIV - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) - lcd.drawText(LEFT_DIV, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) + text(LEFT_DIV - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) + text(LEFT_DIV, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) if data.showCurr then tmp = data.showMax and data.currentMax or data.current - lcd.drawText(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) - lcd.drawText(LEFT_DIV, 47, "A", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV, 47, "A", SMLSIZE + RIGHT + data.telemFlags) end - lcd.drawLine(0, data.showCurr and 55 or 53, LEFT_DIV, data.showCurr and 55 or 53, SOLID, FORCE) + line(0, data.showCurr and 55 or 53, LEFT_DIV, data.showCurr and 55 or 53, SOLID, FORCE) tmp = data.showMax and data.speedMax or data.speed - lcd.drawText(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or string.format("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or string.format("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) -- Left data - Wide screen if not SMLCD then - lcd.drawLine(LEFT_POS, 8, LEFT_POS, 63, SOLID, FORCE) + line(LEFT_POS, 8, LEFT_POS, 63, SOLID, FORCE) -- Altitude tmp = data.showMax and data.altitudeMax or data.altitude local tmp2 = data.alt_unit == 9 and 6 or 2 - lcd.drawText(LEFT_DIV + 2, 9, "Alt", SMLSIZE) - lcd.drawText(LEFT_POS - tmp2, data.alt_unit == 9 and 21 or 17, units[data.alt_unit], SMLSIZE + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) - lcd.drawText(LEFT_POS - tmp2, 16, math.floor(tmp + 0.5), MIDSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(LEFT_DIV + 2, 9, "Alt", SMLSIZE) + text(LEFT_POS - tmp2, data.alt_unit == 9 and 21 or 17, units[data.alt_unit], SMLSIZE + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) + text(LEFT_POS - tmp2, 16, math.floor(tmp + 0.5), MIDSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) if data.altHold then icons.lock(LEFT_POS - 6, 9) end -- Distance tmp = data.showMax and data.distanceMax or data.distanceLast tmp2 = data.dist_unit == 9 and (tmp < 1000 and 6 or 11) or (tmp < 1000 and 2 or 10) - lcd.drawText(LEFT_DIV + 2, 30, "Dist", SMLSIZE) - lcd.drawText(LEFT_POS - tmp2, (data.dist_unit == 9 or tmp >= 1000) and 42 or 38, tmp < 1000 and units[data.dist_unit] or (data.dist_unit == 9 and "km" or "mi"), SMLSIZE + data.telemFlags) - lcd.drawText(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV + 2, 30, "Dist", SMLSIZE) + text(LEFT_POS - tmp2, (data.dist_unit == 9 or tmp >= 1000) and 42 or 38, tmp < 1000 and units[data.dist_unit] or (data.dist_unit == 9 and "km" or "mi"), SMLSIZE + data.telemFlags) + text(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) --Pitch - lcd.drawLine(LEFT_DIV, 50, LEFT_POS, 50, SOLID, FORCE) - lcd.drawText(LEFT_DIV + 5, 54, pitch > 0 and "\194" or (pitch == 0 and "->" or "\195"), SMLSIZE) - lcd.drawText(LEFT_POS, 53, "\64", SMLSIZE + RIGHT + data.telemFlags) - lcd.drawText(LEFT_POS - 4, 52, pitch, MIDSIZE + RIGHT + data.telemFlags) + line(LEFT_DIV, 50, LEFT_POS, 50, SOLID, FORCE) + text(LEFT_DIV + 5, 54, pitch > 0 and "\194" or (pitch == 0 and "->" or "\195"), SMLSIZE) + text(LEFT_POS, 53, "\64", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS - 4, 52, pitch, MIDSIZE + RIGHT + data.telemFlags) end end diff --git a/src/iNav/view.lua b/src/iNav/view.lua index 22ab2774..ce66bae3 100644 --- a/src/iNav/view.lua +++ b/src/iNav/view.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) local RIGHT_POS = SMLCD and 129 or 195 local GAUGE_WIDTH = SMLCD and 82 or 149 @@ -11,63 +11,63 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local r2 = math.rad(h + w) local r3 = math.rad(h - w) local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, x, y, r) - lcd.drawLine(x1, y1, x2, y2, SOLID, FORCE) - lcd.drawLine(x1, y1, x3, y3, SOLID, FORCE) + line(x1, y1, x2, y2, SOLID, FORCE) + line(x1, y1, x3, y3, SOLID, FORCE) if data.headingHold then - lcd.drawFilledRectangle((x2 + x3) * 0.5 - 1.5, (y2 + y3) * 0.5 - 1.5, 4, 4, SOLID) + fill((x2 + x3) * 0.5 - 1.5, (y2 + y3) * 0.5 - 1.5, 4, 4, SOLID) else - lcd.drawLine(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) + line(x2, y2, x3, y3, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) end end local function drawData(txt, y, dir, vc, vm, max, ext, frac, flags) if data.showMax and dir > 0 then vc = vm - lcd.drawText(0, y, string.sub(txt, 1, 3), SMLSIZE) - lcd.drawText(15, y, dir == 1 and "\192" or "\193", SMLSIZE) + text(0, y, string.sub(txt, 1, 3), SMLSIZE) + text(15, y, dir == 1 and "\192" or "\193", SMLSIZE) else - lcd.drawText(0, y, txt, SMLSIZE) + text(0, y, txt, SMLSIZE) end local tmp = (frac ~= 0 or vc < max) and ext or "" if frac ~= 0 and vc + 0.5 < max then - lcd.drawText(21, y, string.format(frac, vc) .. tmp, SMLSIZE + flags) + text(21, y, string.format(frac, vc) .. tmp, SMLSIZE + flags) else - lcd.drawText(21, y, math.floor(vc + 0.5) .. tmp, SMLSIZE + flags) + text(21, y, math.floor(vc + 0.5) .. tmp, SMLSIZE + flags) end end -- Startup message if data.startup == 2 then if not SMLCD then - lcd.drawText(53, 9, "INAV Lua Telemetry") + text(53, 9, "INAV Lua Telemetry") end - lcd.drawText(SMLCD and 51 or 91, 17, "v" .. VERSION) + text(SMLCD and 51 or 91, 17, "v" .. VERSION) end -- GPS local gpsFlags = SMLSIZE + RIGHT + ((not data.telem or not data.gpsFix) and FLASH or 0) tmp = RIGHT_POS - (gpsFlags == SMLSIZE + RIGHT and 0 or 1) - lcd.drawText(tmp, 25, config[16].v == 0 and string.format(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - lcd.drawText(tmp, 33, config[16].v == 0 and string.format(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(tmp, 25, config[16].v == 0 and string.format(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(tmp, 33, config[16].v == 0 and string.format(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) if data.crsf then - lcd.drawText(RIGHT_POS - (data.telem and 0 or 1), 9, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) + text(RIGHT_POS - (data.telem and 0 or 1), 9, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) else - lcd.drawText(tmp, 17, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) + text(tmp, 17, math.floor(data.gpsAlt + 0.5) .. units[data.gpsAlt_unit], gpsFlags) end hdopGraph(RIGHT_POS - 30, data.crsf and 17 or 9, SMLSIZE, SMLCD) icons.gps(RIGHT_POS - 17, data.crsf and 17 or 9) - lcd.drawText(RIGHT_POS - (data.telem and 0 or 1), data.crsf and 17 or 9, data.satellites % 100, SMLSIZE + RIGHT + data.telemFlags) + text(RIGHT_POS - (data.telem and 0 or 1), data.crsf and 17 or 9, data.satellites % 100, SMLSIZE + RIGHT + data.telemFlags) -- Directionals if data.showHead and data.startup == 0 then if data.telem then local indicatorDisplayed = false if data.showDir or data.headingRef == -1 or not SMLCD then - lcd.drawText(X_CNTR_1 - 2, 9, "N " .. math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE) - lcd.drawText(X_CNTR_1 + 10, 21, "E", SMLSIZE) - lcd.drawText(X_CNTR_1 - 14, 21, "W", SMLSIZE) + text(X_CNTR_1 - 2, 9, "N " .. math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE) + text(X_CNTR_1 + 10, 21, "E", SMLSIZE) + text(X_CNTR_1 - 14, 21, "W", SMLSIZE) if not SMLCD then - lcd.drawText(X_CNTR_1 - 2, 32, "S", SMLSIZE) + text(X_CNTR_1 - 2, 32, "S", SMLSIZE) end drawDirection(data.heading, 140, 7, X_CNTR_1, 23) indicatorDisplayed = true @@ -84,17 +84,17 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local rad1 = math.rad(bearing) local x1 = math.floor(math.sin(rad1) * 10 + 0.5) + X_CNTR_2 local y1 = 19 - math.floor(math.cos(rad1) * 10 + 0.5) - lcd.drawLine(X_CNTR_2, 19, x1, y1, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) - lcd.drawFilledRectangle(x1 - 1, y1 - 1, 3, 3, ERASE) - lcd.drawFilledRectangle(x1 - 1, y1 - 1, 3, 3, SOLID) + line(X_CNTR_2, 19, x1, y1, SMLCD and DOTTED or SOLID, FORCE + (SMLCD and 0 or GREY_DEFAULT)) + fill(x1 - 1, y1 - 1, 3, 3, ERASE) + fill(x1 - 1, y1 - 1, 3, 3, SOLID) end end end -- Flight mode - lcd.drawText((SMLCD and 46 or 83) + (modes[data.modeId].f == FLASH and 1 or 0), 33, modes[data.modeId].t, (SMLCD and SMLSIZE or 0) + modes[data.modeId].f) + text((SMLCD and 46 or 83) + (modes[data.modeId].f == FLASH and 1 or 0), 33, modes[data.modeId].t, (SMLCD and SMLSIZE or 0) + modes[data.modeId].f) if data.headFree then - lcd.drawText(RIGHT_POS - 41, 9, "HF", FLASH + SMLSIZE) + text(RIGHT_POS - 41, 9, "HF", FLASH + SMLSIZE) end -- Data & gauges @@ -111,43 +111,43 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if config[23].v == 0 then lcd.drawGauge(46, 41, GAUGE_WIDTH, 7, math.min(data.fuel, 99), 100) if data.fuel == 0 then - lcd.drawLine(47, 42, 47, 46, SOLID, ERASE) + line(47, 42, 47, 46, SOLID, ERASE) end end end tmp = 100 / (4.2 - config[3].v + 0.1) lcd.drawGauge(46, data.showCurr and 49 or 41, GAUGE_WIDTH, data.showCurr and 7 or 15, math.min(math.max(data.cell - config[3].v + 0.1, 0) * tmp, 98), 100) tmp = (GAUGE_WIDTH - 2) * (math.min(math.max(data.cellMin - config[3].v + 0.1, 0) * tmp, 99) * 0.01) + 47 - lcd.drawLine(tmp, data.showCurr and 50 or 42, tmp, 54, SOLID, ERASE) + line(tmp, data.showCurr and 50 or 42, tmp, 54, SOLID, ERASE) lcd.drawGauge(46, 57, GAUGE_WIDTH, 7, math.max(math.min((data.rssiLast - data.rssiCrit) / (100 - data.rssiCrit) * 100, 98), 0), 100) tmp = (GAUGE_WIDTH - 2) * (math.max(math.min((data.rssiMin - data.rssiCrit) / (100 - data.rssiCrit) * 100, 99), 0) * 0.01) + 47 - lcd.drawLine(tmp, 58, tmp, 62, SOLID, ERASE) + line(tmp, 58, tmp, 62, SOLID, ERASE) if not SMLCD then local w = config[7].v % 2 == 1 and 7 or 15 local l = config[7].v % 2 == 1 and 205 or 197 - lcd.drawRectangle(l, 9, w, 48, SOLID) + rect(l, 9, w, 48, SOLID) tmp = math.max(math.min(math.ceil(data.altitude / config[6].v * 46), 46), 0) - lcd.drawFilledRectangle(l + 1, 56 - tmp, w - 2, tmp, INVERS) + fill(l + 1, 56 - tmp, w - 2, tmp, INVERS) tmp = 56 - math.max(math.min(math.ceil(data.altitudeMax / config[6].v * 46), 46), 0) - lcd.drawLine(l + 1, tmp, l + w - 2, tmp, SOLID, GREY_DEFAULT) - lcd.drawText(l + 1, 58, config[7].v % 2 == 1 and "A" or "Alt", SMLSIZE) + line(l + 1, tmp, l + w - 2, tmp, SOLID, GREY_DEFAULT) + text(l + 1, 58, config[7].v % 2 == 1 and "A" or "Alt", SMLSIZE) end -- Variometer if config[7].v % 2 == 1 then local varioSpeed = math.log(1 + math.min(math.abs(0.6 * (data.vspeed_unit == 6 and data.vspeed * 0.3048 or data.vspeed)), 10)) * 0.416667 * (data.vspeed < 0 and -1 or 1) if SMLCD and data.armed and not data.showDir and data.startup == 0 then - lcd.drawLine(X_CNTR_2 + 17, 21, X_CNTR_2 + 19, 21, SOLID, FORCE) - lcd.drawLine(X_CNTR_2 + 18, 21, X_CNTR_2 + 18, 21 - (varioSpeed * 12 - 0.5), SOLID, FORCE) + line(X_CNTR_2 + 17, 21, X_CNTR_2 + 19, 21, SOLID, FORCE) + line(X_CNTR_2 + 18, 21, X_CNTR_2 + 18, 21 - (varioSpeed * 12 - 0.5), SOLID, FORCE) elseif not SMLCD then - lcd.drawRectangle(197, 9, 7, 48, SOLID) - lcd.drawText(198, 58, "V", SMLSIZE) + rect(197, 9, 7, 48, SOLID) + text(198, 58, "V", SMLSIZE) if data.armed then tmp = 33 - math.floor(varioSpeed * 23 - 0.5) if tmp > 33 then - lcd.drawFilledRectangle(198, 33, 5, tmp - 33, INVERS) + fill(198, 33, 5, tmp - 33, INVERS) else - lcd.drawFilledRectangle(198, tmp - 1, 5, 33 - tmp + 2, INVERS) + fill(198, tmp - 1, 5, 33 - tmp + 2, INVERS) end end end From 116b16392cb24eb3d8335d2098ba35380c7dc540 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 1 Sep 2019 16:21:16 -0400 Subject: [PATCH 13/34] Refactored to make string.format a local function --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11322 -> 11340 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11322 -> 11340 bytes dist/SCRIPTS/TELEMETRY/iNav/alt.luac | Bin 8052 -> 7992 bytes dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3243 -> 3263 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7562 -> 7506 bytes dist/SCRIPTS/TELEMETRY/iNav/func_t.luac | Bin 3530 -> 3474 bytes dist/SCRIPTS/TELEMETRY/iNav/horus.luac | Bin 15528 -> 15484 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6545 -> 6513 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 14149 -> 14117 bytes dist/SCRIPTS/TELEMETRY/iNav/pilot.luac | Bin 11033 -> 10965 bytes dist/SCRIPTS/TELEMETRY/iNav/radar.luac | Bin 8376 -> 8316 bytes dist/SCRIPTS/TELEMETRY/iNav/save.luac | Bin 548 -> 512 bytes dist/SCRIPTS/TELEMETRY/iNav/view.luac | Bin 6727 -> 6681 bytes src/iNav.lua | 10 +++++----- src/iNav/alt.lua | 20 +++++++++---------- src/iNav/build.lua | 4 ++-- src/iNav/data.lua | 2 +- src/iNav/func_h.lua | 13 ++++++------ src/iNav/func_t.lua | 10 +++++----- src/iNav/horus.lua | 23 +++++++++++----------- src/iNav/menu.lua | 6 +++--- src/iNav/nirvana.lua | 23 +++++++++++----------- src/iNav/pilot.lua | 24 +++++++++++------------ src/iNav/radar.lua | 20 +++++++++---------- src/iNav/save.lua | 5 ++--- src/iNav/view.lua | 8 ++++---- 26 files changed, 82 insertions(+), 86 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 3fdee544e806ee8b801994d8bc62aebd0ce37977..3d5ae7e9504ac9eb0c0190e21041f56deef96019 100644 GIT binary patch delta 780 zcmZvYJ8u&~6ot>7^>}w@<42x$;y8f8uYjPWp%@-(?4+VWmZFF%B?W%~UxXYvK}eRi zpb8D}15hN8sJ6f>^Jt-?OhZ9W$K8NZknCusqn*3oJ?DJrf9;P~)zx=z*KW{2KUG;T zM77JvcJIJ?peIv}*kgTvIx4aUT^%u5kJDpfxvzF{@{j8!rffUK5`*1QV*06$9X?@s z*)v%1g)1yJ1Nb28r%T{Kp?KQNSpYU-f=el@_GSgB52PJQ;z=eWaQX}991QZp z&a*)wHe5Iukxu*&KYENKAE<8tJNp&j&1c}q5bB$R&1b+y5R5mz?2jKD{!))?*Uyut zb@EA3K!#@N0xeUSnlwjQ{P(;UyGsfnEY3%->ans5(N5!qq@HBh*|r=}vv!Nuxx*9m zZJNj7PCP;RShwZ-ZIqFqWLw-plDTUWEL%J;*`~~Ou$9hnBYM# zFaslYjn)XZElkILgls?vKK$1HP2CzK;i9~kDMRkRUb526Jb84HmZ(IIbXJz0D%7Ag ZI!7zg;2bT`C8|@4+C;QUwP@i=;}4@doFD)I delta 737 zcmZvYKW`I35XIl@-THRdv7L|*J0x;Qz-K1{@dYRj$ekS|dP~S91s{Qi3`kBwBBV$s zK}8uMQGp^Fs*A*(!=JCz4_k%)IV5KH$Q%8-lnbmxhjGf z<1VA!=R|`I>-k+X9U18H4igNU$gpGiA9r!qGYSgVh>BXB!K0nR^(Q*>_>5&r z7qDQ3D=c Bp&tMM diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index 3fdee544e806ee8b801994d8bc62aebd0ce37977..3d5ae7e9504ac9eb0c0190e21041f56deef96019 100644 GIT binary patch delta 780 zcmZvYJ8u&~6ot>7^>}w@<42x$;y8f8uYjPWp%@-(?4+VWmZFF%B?W%~UxXYvK}eRi zpb8D}15hN8sJ6f>^Jt-?OhZ9W$K8NZknCusqn*3oJ?DJrf9;P~)zx=z*KW{2KUG;T zM77JvcJIJ?peIv}*kgTvIx4aUT^%u5kJDpfxvzF{@{j8!rffUK5`*1QV*06$9X?@s z*)v%1g)1yJ1Nb28r%T{Kp?KQNSpYU-f=el@_GSgB52PJQ;z=eWaQX}991QZp z&a*)wHe5Iukxu*&KYENKAE<8tJNp&j&1c}q5bB$R&1b+y5R5mz?2jKD{!))?*Uyut zb@EA3K!#@N0xeUSnlwjQ{P(;UyGsfnEY3%->ans5(N5!qq@HBh*|r=}vv!Nuxx*9m zZJNj7PCP;RShwZ-ZIqFqWLw-plDTUWEL%J;*`~~Ou$9hnBYM# zFaslYjn)XZElkILgls?vKK$1HP2CzK;i9~kDMRkRUb526Jb84HmZ(IIbXJz0D%7Ag ZI!7zg;2bT`C8|@4+C;QUwP@i=;}4@doFD)I delta 737 zcmZvYKW`I35XIl@-THRdv7L|*J0x;Qz-K1{@dYRj$ekS|dP~S91s{Qi3`kBwBBV$s zK}8uMQGp^Fs*A*(!=JCz4_k%)IV5KH$Q%8-lnbmxhjGf z<1VA!=R|`I>-k+X9U18H4igNU$gpGiA9r!qGYSgVh>BXB!K0nR^(Q*>_>5&r z7qDQ3D=c Bp&tMM diff --git a/dist/SCRIPTS/TELEMETRY/iNav/alt.luac b/dist/SCRIPTS/TELEMETRY/iNav/alt.luac index 4c1cf92ed4f30a52fb31182d696be7bbd5c56cd0..09e446c67e07e001b92414ef6e0db8bc286c9a0a 100644 GIT binary patch literal 7992 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 Lk{`>v2I;>6c^gk2 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index 0f1886cd83f233448aa89da9237602baa9df287e..5d366b27b928a86dea862603c461366c4196b3eb 100644 GIT binary patch delta 53 zcmZ22xnFXE43nhcM!D@Qf^2LK4D4-*JoA|u*yI@+7}_`AV_Cw+&Bo5az>t<-l$%(x Jxsh9o5ddyB4UPZ+ delta 33 pcmdllxmt3943mWZM!D@Qob#C*SmhZS7}_>JV_Cwsc^bDSBLJ^43N`=$ diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index 21d0e5b40068814cc962df2a8053bcfa28bccb53..ad6c8feb49b6450b1d7aa1831125c34508fac2f1 100644 GIT binary patch delta 2215 zcmah}&2Jk;6#u=M-L**?Ck+x#TcXkn7Z3stAn0YsPS#BdC51`^RS~CLIU$e`uruDo z1qA(&ML~@sApv)!i2F|5tZ6>f4_bs2^}vAxe*_Y5b{%7|>2qck&%(#mXE-Slz2?)4^4K9A}VOcKB`(CB2rd?>%nef83y?{eU^lK&EwX!s6K~QGM68mN^b?#w9LVU?~W@Z@k8S@$Q`&fnu-7uqoB9u%dBAcN_U7RyUv{V-v z+m|iHa)BLhn65CUglVHm@k9@`rak_QsTm4Mld&b7GNgS03Wb(Nlwq4bs9xsFsxV!H ze9HbEA2h$Hf1xVh-YsS#pbkzjyKY*tWt>n2t7A0BwPIkEw6N+i1e+Pwxq-~g@pM{b z>D&MlC7od#`;InVXBKW_QEyWf|5aq9Uxa8BZlIRh=809F*GVwrRd>T33gW@;%;=+m zcE?dIGVG#Q2^UXi^2Vm}DMc|QYrqxi4ik6anK8FnO#ij zS?Opp_6XJ-O`3GevJk1D&(K)m2cJ=6ux1R`ElJ1NL6I!oD;iBFb;@i7EJ{TcH#s@I zIKe7aVZBsXu)8t#d&#XSW8W3!)KQWM`mxKK+dxu#JrF-vMbhpQ% zW9w*Pr(j0!;Ig6buh{eQtC-$ARPY}5c&}$t{lg>bHIx79gO%Lhx1B^#yN5`;g{7uO ztM)6-HJjc4EFyD(U#R<{p&ke)mVUAW zzbX7D`7M0A{ldiYjSojYmCu#neu$_<9zRoM3UbH5*XwMb=a0b1^X*fWdf=1hg}2|U zyi#jAxhq4sm@7|cWqUR+@HljV^V?eBd{zlOp-7zMTCS6k_Ft7}+Ru)ko)&pYDi2i7 z&A0gb;zo1)6Y}3@^Mkf`^mqSbwvzTAN4NbJTN@icO)mNV&us2&Ois=EbfmpF{o+4$ C7DC$q delta 2271 zcma)6OK%)S5dNxrrpK{kJ5CUr2UfV43tZrWcxrk#9>*I85X4p@V~HF9aR8(c1VW0Y zdnT*_p~TUOhY|$|i5xf^ao+agUBx&dHW5NZ`4Rj8B&uiE%WjebE6q+#RoCmQuWS3+ zFP>X@B%Qbl;4zqBN&s(`fomD?E6b`9Bg$hHOGCB^EabVG%t0GMni2j^*glgtlwrHe z312s5w8Zw|N}dhar0BQh1GYRJFrMe&*+60``x57$_S=^8Cay@JWMFJl;!1^Ouq=aq zpIX0<%?E6sskFaK8KPa8Mmt}R=$8-+@_e`B{Bu=FpmPO}K-5fB74pkMSBd&{7Ybc- zKzA|XLJ#@kVlo|{p`K4#7`W-!)mUGu;`$|3nMIP%76u*%#LgYvjNB*+ zI~iA1DUM9FQT(I6Wq`hNCeEGz(|A*X+i{$ zhb2EScp9tUh)+a1#~cL4tHiVe(=LvY7^YXF0SiJacDNIFrdu-_4L+=#MnYxWjSZ~> z#6M_$YPt+(1=N~m8{|3{)w8)WmZ>7IT7zX>k!%+&(?oiQ19}>{hU_JBT&U7VL}ZVM z1E8#AhD}Hy9wJ#6z)=V)he)z%OlnAPJ5K9t3)!aFrg}DI6GSc%3BPBkEo!=rmTlvL zBiVB86e?@uCS`Jk6&LBKbTot|%Za$7Nq&zyh~w@TVt|FyLpW{8Obd_^2wXM8aiEnAh-U;92MMl{-tMx7{YL99PbKG7pk~PSH)^;H&w{e#f zD^ca{j8MATheTwQ-M}Fqh)1g222SFbDB(d#m`z0zPH0Eq8*1@+mFXgGLB*7K=I$87 z(^nnszTZ)AdZ>l6o9K*$lk4fCu>D1sqSGaFz$fZ8lWq2z8O;#*hDwc)3*Ri7NJ|I@ z99wh)`_YmGC-f-p_zn!2mS!UQu02<5R}YrmC`gRq4<4aMY$u7*H#>zk_A;!zGnus3 zj`_~X^F?!!){Ui1m~mz-SHp|f2Pd%$hsrE-a1sjRBKvN%JRKx!9yU)lBf8H2-#6PK zsv*rBvUVKKjdS5ClZ+wp1ktpoFtqe7Y}s3b-FUc)S*il9B8c0=1x#>|dt$J@rMDPG zC;i@Q*{v>$9<7Ov+yEoGg`26PAAZx@@`l~MC*d|mX;vJCy>=gaY2SbRU?%tGUEYUe zZ5y@hHC)XMT5G@K!kP$Q$+F<(>{ifE>YbQr?@I6(dTgbK27_jNcSSqs1uow%0zex#KjA8Xs8J z^K#kEOHY)&NF((}C!hKk0|ofZ diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac index 7160811518e356c49576a8a832ff478e90bea579..e8fc151d7f638bdf57b37a847f897e7be0dc865c 100644 GIT binary patch delta 493 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 literal 15528 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 UyaEO1|3f%&=9l+BC1;rQKg_GD&j0`b literal 6545 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 bS#D^D_r@C#aQ?qU5HJ11hgclsmv;Xb4vfn3 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index f25115f104a6517611b80d639101d0db72b7c6f3..9b8a3f51a9652b83f10b2b4c2f4fd0f1cb269044 100644 GIT binary patch literal 14117 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 UWzR@lgHQaytGD^%vrj|*AE9it7XSbN literal 14149 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 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac b/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac index 4c21f3a7f939f18dcb2fbdf96230038b63b3f35f..4863755976cec6f43c9a653567d04ecebc1b77e4 100644 GIT binary patch literal 10965 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 S%Kp~?GidoI`A-8alk{IU27hG$ literal 8376 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 C@|_w0 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/save.luac b/dist/SCRIPTS/TELEMETRY/iNav/save.luac index 32ad15c874250573bd386d98dce0714e5b7c7189..b3f5de34f082510abea80cae85ed6e63338700a5 100644 GIT binary patch delta 270 zcmZ9HJxW7C6ot>dH!}}6;Inzy=^||AC;A|bT@Wm+Q@Mn9CxHy664D6)1s9S@qFI5Z z`>=FuZBFrV&VlcJq@(9f?{v}3#_t2r<-M{|Z?S|_?>ha95WG8h8#3qg)NAn#*SL@?biYz4?N zZaPug1fT`~8!Gp;)62o$#)IwZ(O>Vi{0z$~kkeSU1m1X1Pal}L^fYnTEAI^+2y_m` TX%)6oWA+GZ)|Yg@excPbjfX!a delta 294 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 J%(Kt0{2%V|r+xqc literal 6727 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 diff --git a/src/iNav.lua b/src/iNav.lua index 8820d458..e8c72c62 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -27,7 +27,7 @@ collectgarbage() local modes, units, labels = loadScript(FILE_PATH .. "modes" .. ext, env)(HORUS) collectgarbage() -local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, text, line, rect, fill = loadScript(FILE_PATH .. "data" .. ext, env)(r, m, i, HORUS) +local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, text, line, rect, fill, frmt = loadScript(FILE_PATH .. "data" .. ext, env)(r, m, i, HORUS) collectgarbage() loadScript(FILE_PATH .. "load" .. ext, env)(config, data, FILE_PATH) @@ -49,7 +49,7 @@ collectgarbage() local crsf, distCalc = loadScript(FILE_PATH .. "other" .. ext, env)(config, data, units, getTelemetryId, getTelemetryUnit, FILE_PATH, env, SMLCD, FLASH) collectgarbage() -local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_" .. (HORUS and "h" or "t") .. ext, env)(config, data, SMLCD, FILE_PATH, text, line, rect, fill) +local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_" .. (HORUS and "h" or "t") .. ext, env)(config, data, SMLCD, FILE_PATH, text, line, rect, fill, frmt) collectgarbage() local function playAudio(f, a) @@ -486,7 +486,7 @@ local function run(event) data.v = 9 end tmp = config[30].v - view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, SMLCD, FLASH, PREV, NEXT, HORUS, text, rect, fill, env) + view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, SMLCD, FLASH, PREV, NEXT, HORUS, text, rect, fill, frmt, env) if HORUS then data.menu(tmp) end @@ -494,7 +494,7 @@ local function run(event) if data.configSelect == 0 and (event == EVT_EXIT_BREAK or (event == EVT_ENTER_BREAK and data.configStatus == 34 and config[34].x > -1 and not data.armed)) then view = nil collectgarbage() - loadScript(FILE_PATH .. "save" .. ext, env)(config, data, FILE_PATH) + loadScript(FILE_PATH .. "save" .. ext, env)(config, data, frmt, FILE_PATH) end else -- User input @@ -523,7 +523,7 @@ local function run(event) view = loadScript(FILE_PATH .. (HORUS and (data.nv and "nirvana" or "horus") or (config[25].v == 0 and "view" or (config[25].v == 1 and "pilot" or (config[25].v == 2 and "radar" or "alt")))) .. ext, env)() data.v = config[25].v end - view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) + view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) end collectgarbage() diff --git a/src/iNav/alt.lua b/src/iNav/alt.lua index 355a325c..d92713d1 100644 --- a/src/iNav/alt.lua +++ b/src/iNav/alt.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local LEFT_DIV = 36 local LEFT_POS = SMLCD and LEFT_DIV or 73 local RIGHT_POS = SMLCD and LCD_W - 31 or LCD_W - 53 @@ -33,13 +33,13 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if SMLCD then if data.showDir then -- GPS coords - text(RIGHT_POS, 49, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - text(RIGHT_POS, 57, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS, 49, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(RIGHT_POS, 57, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) else line(LEFT_POS + 31, 48, LEFT_POS + 31, 63, SOLID, FORCE) -- Distance tmp = data.showMax and data.distanceMax or data.distanceLast - text(LEFT_POS + 29, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS + 29, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (frmt("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) text(LEFT_POS + 10, 49, "Dist", SMLSIZE) icons.home(LEFT_POS + 2, 49) -- Altitude @@ -136,8 +136,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.crsf == false then text(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) end - text(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - text(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(LCD_W + 1, 33, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(LCD_W + 1, 42, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) text(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) end line(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) @@ -157,16 +157,16 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(LEFT_DIV, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) end end - text(LEFT_DIV - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) + text(LEFT_DIV - 5, data.showCurr and 25 or 32, frmt(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) text(LEFT_DIV, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) if data.showCurr then tmp = data.showMax and data.currentMax or data.current - text(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or frmt("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) text(LEFT_DIV, 47, "A", SMLSIZE + RIGHT + data.telemFlags) end line(0, data.showCurr and 55 or 53, LEFT_DIV, data.showCurr and 55 or 53, SOLID, FORCE) tmp = data.showMax and data.speedMax or data.speed - text(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or string.format("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or frmt("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) -- Left data - Wide screen if not SMLCD then @@ -185,7 +185,7 @@ end tmp2 = data.dist_unit == 9 and (tmp < 1000 and 6 or 11) or (tmp < 1000 and 2 or 10) text(LEFT_DIV + 2, 30, "Dist", SMLSIZE) text(LEFT_POS - tmp2, (data.dist_unit == 9 or tmp >= 1000) and 42 or 38, tmp < 1000 and units[data.dist_unit] or (data.dist_unit == 9 and "km" or "mi"), SMLSIZE + data.telemFlags) - text(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or frmt("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) --Pitch line(LEFT_DIV, 50, LEFT_POS, 50, SOLID, FORCE) text(LEFT_DIV + 5, 54, pitch > 0 and "\194" or (pitch == 0 and "->" or "\195"), SMLSIZE) diff --git a/src/iNav/build.lua b/src/iNav/build.lua index 56011b6b..b06fa706 100644 --- a/src/iNav/build.lua +++ b/src/iNav/build.lua @@ -13,7 +13,7 @@ print("") local config = loadScript(FILE_PATH .. "config", env)(SMLCD) local modes, units, labels = loadScript(FILE_PATH .. "modes", env)(HORUS) -local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, text, line, rect, fill = loadScript(FILE_PATH .. "data", env)(r, m, i, HORUS) +local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, text, line, rect, fill, frmt = loadScript(FILE_PATH .. "data", env)(r, m, i, HORUS) loadScript(FILE_PATH .. "load", env)(config, data, FILE_PATH) if HORUS then local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_h", env)(config, data, SMLCD, FILE_PATH, text, line, rect, fill) @@ -46,7 +46,7 @@ loadScript(FILE_PATH .. "menu", env)() loadScript(FILE_PATH .. "log", env)() loadScript(FILE_PATH .. "log_c", env)() loadScript(FILE_PATH .. "log_s", env)() -loadScript(FILE_PATH .. "save", env)(config, data, FILE_PATH) +loadScript(FILE_PATH .. "save", env)(config, data, frmt, FILE_PATH) if buildMode == nil then loadScript("/WIDGETS/iNav/main", env)(true) diff --git a/src/iNav/data.lua b/src/iNav/data.lua index f59973cb..9da9e268 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -94,4 +94,4 @@ local data = { fUnit = {"mAh", "mWh"}, } -return data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, lcd.drawText, lcd.drawLine, lcd.drawRectangle, lcd.drawFilledRectangle \ No newline at end of file +return data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, lcd.drawText, lcd.drawLine, lcd.drawRectangle, lcd.drawFilledRectangle, string.format \ No newline at end of file diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index 3b4535ed..af943f39 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -1,8 +1,7 @@ -local config, data, SMLCD, FILE_PATH, text, line, rect, fill = ... +local config, data, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... local function title() local color = lcd.setColor - local fmt = string.format local tmp = 0 if not data.telem then @@ -27,7 +26,7 @@ local function title() end end if config[19].v ~= 1 then - text(data.nv and 180 or bat + 93, 0, fmt("%.1fV", data.txBatt), RIGHT) + text(data.nv and 180 or bat + 93, 0, frmt("%.1fV", data.txBatt), RIGHT) end -- Timer @@ -41,7 +40,7 @@ local function title() -- Receiver voltage or Crossfire speed if data.rxBatt > 0 and config[14].v == 1 then - text(LCD_W, 0, fmt("%.1fV", data.rxBatt), RIGHT + tmp) + text(LCD_W, 0, frmt("%.1fV", data.rxBatt), RIGHT + tmp) elseif data.crsf then text(LCD_W, 0, (data.rfmd == 2 and 150 or (data.telem and 50 or "--")) .. "Hz", RIGHT + tmp) end @@ -61,8 +60,8 @@ local function title() --[[ Show FPS ]] data.frames = data.frames + 1 - text(data.nv and 115 or 180, 0, fmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) - text(data.nv and 75 or 130, 0, fmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) + text(data.nv and 115 or 180, 0, frmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) + text(data.nv and 75 or 130, 0, frmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) -- Reset colors color(WARNING_COLOR, YELLOW) @@ -78,7 +77,7 @@ end local function gpsDegMin(c, lat) local gpsD = math.floor(math.abs(c)) local gpsM = math.floor((math.abs(c) - gpsD) * 60) - return string.format("%d\64%d'%04.1f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) + return frmt("%d\64%d'%04.1f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) end local function hdopGraph(x, y) diff --git a/src/iNav/func_t.lua b/src/iNav/func_t.lua index a443c50f..f70239de 100644 --- a/src/iNav/func_t.lua +++ b/src/iNav/func_t.lua @@ -1,4 +1,4 @@ -local config, data, SMLCD, FILE_PATH, text, line, rect, fill = ... +local config, data, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... local function title() fill(0, 0, LCD_W, 8, FORCE) @@ -18,23 +18,23 @@ local function title() end end if config[19].v ~= 1 then - text(SMLCD and ((config[14].v == 1 or data.crsf) and 105 or LCD_W) or 128, 1, string.format("%.1fV", data.txBatt), SMLSIZE + RIGHT + INVERS) + text(SMLCD and ((config[14].v == 1 or data.crsf) and 105 or LCD_W) or 128, 1, frmt("%.1fV", data.txBatt), SMLSIZE + RIGHT + INVERS) end if data.rxBatt > 0 and data.telem and config[14].v == 1 then - text(LCD_W, 1, string.format("%.1fV", data.rxBatt), SMLSIZE + RIGHT + INVERS) + text(LCD_W, 1, frmt("%.1fV", data.rxBatt), SMLSIZE + RIGHT + INVERS) elseif data.crsf then text(LCD_W, 1, (data.rfmd == 2 and 150 or (data.telem and 50 or "--")) .. (SMLCD and "" or "Hz"), SMLSIZE + RIGHT + INVERS) end --[[ Show FPS - Should always be 20fps on Taranis data.frames = data.frames + 1 - text(SMLCD and 57 or 80, 1, string.format("%.1f", data.frames / (getTime() - data.fpsStart) * 100), SMLSIZE + RIGHT + INVERS) + text(SMLCD and 57 or 80, 1, frmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), SMLSIZE + RIGHT + INVERS) ]] end local function gpsDegMin(c, lat) local gpsD = math.floor(math.abs(c)) - return gpsD .. string.format("\64%05.2f", (math.abs(c) - gpsD) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) + return gpsD .. frmt("\64%05.2f", (math.abs(c) - gpsD) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) end local function hdopGraph(x, y, s, SMLCD) diff --git a/src/iNav/horus.lua b/src/iNav/horus.lua index 215b5aa9..69a08564 100644 --- a/src/iNav/horus.lua +++ b/src/iNav/horus.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local rgb = lcd.RGB local SKY = 982 --rgb(0, 121, 180) @@ -29,7 +29,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local deg = math.deg local sin = math.sin local cos = math.cos - local fmt = string.format function intersect(s1, e1, s2, e2) local d = (s1.x - e1.x) * (s2.y - e2.y) - (s1.y - e1.y) * (s2.x - e2.x) @@ -240,7 +239,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end end if not data.showMax then - text(X_CNTR - 65, Y_CNTR - 9, fmt("%.0f", upsideDown and -tmp or tmp) .. "\64", SMLSIZE + RIGHT) + text(X_CNTR - 65, Y_CNTR - 9, frmt("%.0f", upsideDown and -tmp or tmp) .. "\64", SMLSIZE + RIGHT) end end @@ -326,7 +325,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Speed & altitude tmp = data.showMax and data.speedMax or data.speed - text(39, Y_CNTR - 9, tmp >= 99.5 and floor(tmp + 0.5) or fmt("%.1f", tmp), SMLSIZE + RIGHT + data.telemFlags) + text(39, Y_CNTR - 9, tmp >= 99.5 and floor(tmp + 0.5) or frmt("%.1f", tmp), SMLSIZE + RIGHT + data.telemFlags) tmp = data.showMax and data.altitudeMax or data.altitude text(RIGHT_POS - 2, Y_CNTR - 9, floor(tmp + 0.5), SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) if data.altHold then @@ -367,7 +366,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic line(RIGHT_POS, y1, RIGHT_POS + 9, y2, SOLID, CUSTOM_COLOR) end if data.startup == 0 then - text(RIGHT_POS + 13, TOP - 1, fmt(abs(data.vspeed) >= 9.95 and "%.0f" or "%.1f", data.vspeed) .. units[data.vspeed_unit], SMLSIZE + data.telemFlags) + text(RIGHT_POS + 13, TOP - 1, frmt(abs(data.vspeed) >= 9.95 and "%.0f" or "%.1f", data.vspeed) .. units[data.vspeed_unit], SMLSIZE + data.telemFlags) end end @@ -454,7 +453,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic line(x2, y2, x3, y3, SOLID, CUSTOM_COLOR) line(x1, y1, x2, y2, SOLID, TEXT_COLOR) line(x1, y1, x3, y3, SOLID, TEXT_COLOR) - tmp = data.distanceLast < 1000 and floor(data.distanceLast + 0.5) .. units[data.dist_unit] or (fmt("%.1f", data.distanceLast / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) + tmp = data.distanceLast < 1000 and floor(data.distanceLast + 0.5) .. units[data.dist_unit] or (frmt("%.1f", data.distanceLast / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) text(LEFT_POS + 2, BOTTOM - 16, tmp, SMLSIZE + data.telemFlags) end @@ -494,7 +493,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end local val = math.floor((data.showMax and data.cellMin or data.cell) * 100 + 0.5) * 0.01 - text(X1 - 3, TOP + 42, fmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) + text(X1 - 3, TOP + 42, frmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) text(0, TOP + 51, labels[2], SMLSIZE) if data.bl ~= val then local red = val >= config[2].v and max(floor((4.2 - val) / (4.2 - config[2].v) * 255), 0) or 255 @@ -523,13 +522,13 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(X1 + 9, TOP + 1, labels[4], SMLSIZE) text(X2, TOP + 12, floor(tmp + 0.5) .. units[data.alt_unit], MIDSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) tmp2 = data.showMax and data.distanceMax or data.distanceLast - tmp = tmp2 < 1000 and floor(tmp2 + 0.5) .. units[data.dist_unit] or (fmt("%.1f", tmp2 / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) + tmp = tmp2 < 1000 and floor(tmp2 + 0.5) .. units[data.dist_unit] or (frmt("%.1f", tmp2 / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) text(X1 + 9, TOP + 44, labels[5], SMLSIZE) text(X2, TOP + 55, tmp, MIDSIZE + RIGHT + data.telemFlags) if data.showCurr then tmp = data.showMax and data.currentMax or data.current text(X1 + 9, TOP + 87, labels[3], SMLSIZE) - text(X2, TOP + 98, (tmp >= 99.5 and floor(tmp + 0.5) or fmt("%.1fA", tmp)), MIDSIZE + RIGHT + data.telemFlags) + text(X2, TOP + 98, (tmp >= 99.5 and floor(tmp + 0.5) or frmt("%.1fA", tmp)), MIDSIZE + RIGHT + data.telemFlags) end -- Box 3 (flight modes, orientation) @@ -576,10 +575,10 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if not data.crsf then text(RIGHT_POS, TOP + 28, floor(data.gpsAlt + 0.5) .. (data.gpsAlt_unit == 10 and "'" or units[data.gpsAlt_unit]), MIDSIZE + tmp) end - text(RIGHT_POS, TOP + 54, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), tmp) - text(RIGHT_POS, TOP + 74, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), tmp) + text(RIGHT_POS, TOP + 54, config[16].v == 0 and frmt("%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), tmp) + text(RIGHT_POS, TOP + 74, config[16].v == 0 and frmt("%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), tmp) tmp = data.showMax and data.speedMax or data.speed - text(RIGHT_POS + 1, TOP + 98, tmp >= 99.5 and floor(tmp + 0.5) .. units[data.speed_unit] or fmt("%.1f", tmp) .. units[data.speed_unit], MIDSIZE + RIGHT + data.telemFlags) + text(RIGHT_POS + 1, TOP + 98, tmp >= 99.5 and floor(tmp + 0.5) .. units[data.speed_unit] or frmt("%.1f", tmp) .. units[data.speed_unit], MIDSIZE + RIGHT + data.telemFlags) -- Dividers color(CUSTOM_COLOR, DKGREY) diff --git a/src/iNav/menu.lua b/src/iNav/menu.lua index 796ddfce..0b093bfa 100644 --- a/src/iNav/menu.lua +++ b/src/iNav/menu.lua @@ -1,4 +1,4 @@ -local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, SMLCD, FLASH, PREV, NEXT, HORUS, text, rect, fill, env) +local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, getTelemetryUnit, SMLCD, FLASH, PREV, NEXT, HORUS, text, rect, fill, frmt, env) local CONFIG_X = HORUS and (data.nv and 10 or 90) or (SMLCD and 0 or 46) local TOP = HORUS and (data.nv and 107 or 37) or 11 @@ -192,11 +192,11 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, text(CONFIG_X, y, config2[z].t, FONT + ((config2[z].p == 1 and HORUS) and CUSTOM_COLOR or 0)) if config2[z].p == nil then if config2[z].l == nil then - text(CONFIG_X + RSIDE, y, (config[z].d ~= nil and string.format("%.1f", config[z].v) or config[z].v) .. config2[z].a, FONT + tmp) + text(CONFIG_X + RSIDE, y, (config[z].d ~= nil and frmt("%.1f", config[z].v) or config[z].v) .. config2[z].a, FONT + tmp) else if config2[z].l == 0 then if config[z].v == 0 then - config2[z].l = { [0] = string.format("%10.6f %11.6f", data.lastLock.lat, data.lastLock.lon) } + config2[z].l = { [0] = frmt("%10.6f %11.6f", data.lastLock.lat, data.lastLock.lon) } else config2[z].l = { gpsDegMin(data.lastLock.lat, true) .. " " .. gpsDegMin(data.lastLock.lon, false) } end diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 2f85d9a7..bb0b0fe6 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local rgb = lcd.RGB local SKY = 13660 --rgb(50, 171, 230) @@ -29,7 +29,6 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local deg = math.deg local sin = math.sin local cos = math.cos - local fmt = string.format function intersect(s1, e1, s2, e2) local d = (s1.x - e1.x) * (s2.y - e2.y) - (s1.y - e1.y) * (s2.x - e2.x) @@ -242,7 +241,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end end if not data.showMax then - text(X_CNTR - 60, Y_CNTR - 10, fmt("%.0f", upsideDown and -tmp or tmp) .. "\64", SMLSIZE + RIGHT) + text(X_CNTR - 60, Y_CNTR - 10, frmt("%.0f", upsideDown and -tmp or tmp) .. "\64", SMLSIZE + RIGHT) end end @@ -328,7 +327,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Speed & altitude tmp = data.showMax and data.speedMax or data.speed - text(41, Y_CNTR - 9, tmp >= 99.5 and floor(tmp + 0.5) or fmt("%.1f", tmp), SMLSIZE + RIGHT + data.telemFlags) + text(41, Y_CNTR - 9, tmp >= 99.5 and floor(tmp + 0.5) or frmt("%.1f", tmp), SMLSIZE + RIGHT + data.telemFlags) tmp = data.showMax and data.altitudeMax or data.altitude text(RIGHT_POS, Y_CNTR - 9, floor(tmp + 0.5), SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) if data.altHold then @@ -369,7 +368,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic line(RIGHT_POS, y1, RIGHT_POS + 9, y2, SOLID, CUSTOM_COLOR) end if data.startup == 0 then - text(RIGHT_POS + 13, TOP - 1, fmt(abs(data.vspeed) >= 9.95 and "%.0f" or "%.1f", data.vspeed) .. units[data.vspeed_unit], SMLSIZE + data.telemFlags) + text(RIGHT_POS + 13, TOP - 1, frmt(abs(data.vspeed) >= 9.95 and "%.0f" or "%.1f", data.vspeed) .. units[data.vspeed_unit], SMLSIZE + data.telemFlags) end end ]] @@ -474,7 +473,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic line(x2, y2, x3, y3, SOLID, CUSTOM_COLOR) line(x1, y1, x2, y2, SOLID, TEXT_COLOR) line(x1, y1, x3, y3, SOLID, TEXT_COLOR) - tmp = data.distanceLast < 1000 and floor(data.distanceLast + 0.5) .. units[data.dist_unit] or (fmt("%.1f", data.distanceLast / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) + tmp = data.distanceLast < 1000 and floor(data.distanceLast + 0.5) .. units[data.dist_unit] or (frmt("%.1f", data.distanceLast / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) text(LEFT_POS + 2, BOTTOM - 16, tmp, SMLSIZE + data.telemFlags) end @@ -523,7 +522,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic bleft = 170 bright = LCD_W - 1 local val = math.floor((data.showMax and data.cellMin or data.cell) * 100 + 0.5) * 0.01 - text(bright, btop, fmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) + text(bright, btop, frmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) text(bleft, btop + 9, labels[2], SMLSIZE) if data.bl ~= val then local red = val >= config[2].v and max(floor((4.2 - val) / (4.2 - config[2].v) * 255), 0) or 255 @@ -542,13 +541,13 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(X1 + 9, TOP + 1, labels[4], SMLSIZE) text(X2, TOP + 12, floor(tmp + 0.5) .. units[data.alt_unit], MIDSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) tmp2 = data.showMax and data.distanceMax or data.distanceLast - tmp = tmp2 < 1000 and floor(tmp2 + 0.5) .. units[data.dist_unit] or (fmt("%.1f", tmp2 / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) + tmp = tmp2 < 1000 and floor(tmp2 + 0.5) .. units[data.dist_unit] or (frmt("%.1f", tmp2 / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")) text(X1 + 9, TOP + 44, labels[5], SMLSIZE) text(X2, TOP + 55, tmp, MIDSIZE + RIGHT + data.telemFlags) if data.showCurr then tmp = data.showMax and data.currentMax or data.current text(X1 + 9, TOP + 87, labels[3], SMLSIZE) - text(X2, TOP + 98, (tmp >= 99.5 and floor(tmp + 0.5) or fmt("%.1fA", tmp)), MIDSIZE + RIGHT + data.telemFlags) + text(X2, TOP + 98, (tmp >= 99.5 and floor(tmp + 0.5) or frmt("%.1fA", tmp)), MIDSIZE + RIGHT + data.telemFlags) end -- Box 3 (flight modes, orientation) @@ -595,10 +594,10 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if not data.crsf then text(RIGHT_POS, TOP + 28, floor(data.gpsAlt + 0.5) .. (data.gpsAlt_unit == 10 and "'" or units[data.gpsAlt_unit]), MIDSIZE + tmp) end - text(RIGHT_POS, TOP + 54, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), SMLSIZE + tmp) - text(RIGHT_POS, TOP + 74, config[16].v == 0 and fmt("%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), SMLSIZE + tmp) + text(RIGHT_POS, TOP + 54, config[16].v == 0 and frmt("%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), SMLSIZE + tmp) + text(RIGHT_POS, TOP + 74, config[16].v == 0 and frmt("%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), SMLSIZE + tmp) tmp = data.showMax and data.speedMax or data.speed - text(RIGHT_POS + 1, TOP + 98, tmp >= 99.5 and floor(tmp + 0.5) .. units[data.speed_unit] or fmt("%.1f", tmp) .. units[data.speed_unit], MIDSIZE + RIGHT + data.telemFlags) + text(RIGHT_POS + 1, TOP + 98, tmp >= 99.5 and floor(tmp + 0.5) .. units[data.speed_unit] or frmt("%.1f", tmp) .. units[data.speed_unit], MIDSIZE + RIGHT + data.telemFlags) -- Dividers color(CUSTOM_COLOR, DKGREY) diff --git a/src/iNav/pilot.lua b/src/iNav/pilot.lua index 1b6e7643..dddc9edd 100644 --- a/src/iNav/pilot.lua +++ b/src/iNav/pilot.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local LEFT_POS = SMLCD and 0 or 36 local RIGHT_POS = SMLCD and LCD_W - 31 or LCD_W - 53 @@ -153,7 +153,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if SMLCD then icons.home(LEFT_POS + 4, 42) tmp = data.showMax and data.distanceMax or data.distanceLast - text(LEFT_POS + 12, 42, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + data.telemFlags) + text(LEFT_POS + 12, 42, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (frmt("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + data.telemFlags) tmp = (not data.telem or data.cell < config[3].v or (data.showCurr and config[23].v == 0 and data.fuel <= config[17].v)) and FLASH or 0 if data.showFuel then if config[23].v > 0 or (data.crsf and data.showMax) then @@ -163,13 +163,13 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(RIGHT_POS - 2, 13, "%", SMLSIZE + RIGHT + tmp) end end - text(RIGHT_POS - 7, 19, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) + text(RIGHT_POS - 7, 19, frmt(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) text(RIGHT_POS - 2, 24, "V", SMLSIZE + RIGHT + tmp) if data.showDir then - text(RIGHT_POS - 2, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - text(RIGHT_POS - 2, 49, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS - 2, 42, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(RIGHT_POS - 2, 49, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) elseif data.showCurr then - text(RIGHT_POS - 2, 42, string.format("%.1fA", data.showMax and data.currentMax or data.current), SMLSIZE + RIGHT + data.telemFlags) + text(RIGHT_POS - 2, 42, frmt("%.1fA", data.showMax and data.currentMax or data.current), SMLSIZE + RIGHT + data.telemFlags) end elseif not data.armed and data.startup == 0 then text(LEFT_POS + 19, 24, "Spd", SMLSIZE + RIGHT) @@ -238,7 +238,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic line(LEFT_POS + 1, 32, LEFT_POS + 18, 32, SOLID, ERASE) text(LEFT_POS + 1, 33, " ", SMLSIZE + data.telemFlags) tmp = data.showMax and data.speedMax or data.speed - text(LEFT_POS + 19, 33, data.startup == 0 and (tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp)) or "Spd", SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS + 19, 33, data.startup == 0 and (tmp >= 99.5 and math.floor(tmp + 0.5) or frmt("%.1f", tmp)) or "Spd", SMLSIZE + RIGHT + data.telemFlags) lcd.drawRectangle(LEFT_POS, 31, 20, 10, FORCE) -- Altitude @@ -283,8 +283,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.crsf == false then text(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) end - text(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - text(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(LCD_W + 1, 33, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(LCD_W + 1, 42, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) text(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) end line(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) @@ -305,17 +305,17 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(LEFT_POS, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) end end - text(LEFT_POS - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) + text(LEFT_POS - 5, data.showCurr and 25 or 32, frmt(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) text(LEFT_POS, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) if data.showCurr then tmp = data.showMax and data.currentMax or data.current - text(LEFT_POS - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_POS - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or frmt("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) text(LEFT_POS, 47, "A", SMLSIZE + RIGHT + data.telemFlags) end line(0, data.showCurr and 54 or 53, LEFT_POS, data.showCurr and 54 or 53, SOLID, FORCE) icons.home(0, 57) tmp = data.showMax and data.distanceMax or data.distanceLast - text(LEFT_POS, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS, 57, tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (frmt("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi")), SMLSIZE + RIGHT + data.telemFlags) end end diff --git a/src/iNav/radar.lua b/src/iNav/radar.lua index 80ddf572..f48d35a3 100644 --- a/src/iNav/radar.lua +++ b/src/iNav/radar.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local LEFT_DIV = 36 local LEFT_POS = SMLCD and LEFT_DIV or 73 @@ -34,12 +34,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if SMLCD then if data.showDir and (not data.armed or not data.telem) then -- GPS coords - text(RIGHT_POS, 50, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - text(RIGHT_POS, 57, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(RIGHT_POS, 50, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(RIGHT_POS, 57, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) else -- Distance tmp = data.showMax and data.distanceMax or data.distanceLast - text(LEFT_POS + 25, 57, data.startup > 0 and "Dist " or (tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi"))), SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_POS + 25, 57, data.startup > 0 and "Dist " or (tmp < 1000 and math.floor(tmp + 0.5) .. units[data.dist_unit] or (frmt("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)) .. (data.dist_unit == 9 and "km" or "mi"))), SMLSIZE + RIGHT + data.telemFlags) -- Altitude tmp = data.showMax and data.altitudeMax or data.altitude text(RIGHT_POS, 57, data.startup > 0 and "Alt" or (math.floor(tmp + 0.5) .. units[data.alt_unit]), SMLSIZE + RIGHT + ((not data.telem or tmp + 0.5 >= config[6].v) and FLASH or 0)) @@ -150,8 +150,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.crsf == false then text(LCD_W - (config[22].v == 0 and 24 or 25), config[22].v == 0 and 18 or 20, "HDOP", RIGHT + SMLSIZE) end - text(LCD_W + 1, 33, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - text(LCD_W + 1, 42, config[16].v == 0 and string.format("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(LCD_W + 1, 33, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(LCD_W + 1, 42, config[16].v == 0 and frmt("%.5f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) text(RIGHT_POS + 8, 57, data.crsf and "LQ" or "RSSI", SMLSIZE) end line(RIGHT_POS + (config[7].v % 2 == 1 and (SMLCD and 5 or 7) or 0), 50, LCD_W, 50, SOLID, FORCE) @@ -171,16 +171,16 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic text(LEFT_DIV, data.showCurr and 17 or 21, "%", SMLSIZE + RIGHT + tmp) end end - text(LEFT_DIV - 5, data.showCurr and 25 or 32, string.format(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) + text(LEFT_DIV - 5, data.showCurr and 25 or 32, frmt(config[1].v == 0 and "%.2f" or "%.1f", config[1].v == 0 and (data.showMax and data.cellMin or data.cell) or (data.showMax and data.battMin or data.batt)), DBLSIZE + RIGHT + tmp) text(LEFT_DIV, data.showCurr and 34 or 41, "V", SMLSIZE + RIGHT + tmp) if data.showCurr then tmp = data.showMax and data.currentMax or data.current - text(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or string.format("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV - 5, 42, tmp >= 99.5 and math.floor(tmp + 0.5) or frmt("%.1f", tmp), MIDSIZE + RIGHT + data.telemFlags) text(LEFT_DIV, 47, "A", SMLSIZE + RIGHT + data.telemFlags) end line(0, data.showCurr and 55 or 53, LEFT_DIV, data.showCurr and 55 or 53, SOLID, FORCE) tmp = data.showMax and data.speedMax or data.speed - text(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or string.format("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) + text(LEFT_DIV, data.showCurr and 57 or 56, tmp >= 99.5 and math.floor(tmp + 0.5) .. units[data.speed_unit] or frmt("%.1f", tmp) .. units[data.speed_unit], SMLSIZE + RIGHT + data.telemFlags) -- Left data - Wide screen if not SMLCD then @@ -199,7 +199,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic tmp2 = data.dist_unit == 9 and (tmp < 1000 and 6 or 11) or (tmp < 1000 and 2 or 10) text(LEFT_DIV + 2, 30, "Dist", SMLSIZE) text(LEFT_POS - tmp2, (data.dist_unit == 9 or tmp >= 1000) and 42 or 38, tmp < 1000 and units[data.dist_unit] or (data.dist_unit == 9 and "km" or "mi"), SMLSIZE + data.telemFlags) - text(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or string.format("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) + text(LEFT_POS - tmp2, 37, tmp < 1000 and math.floor(tmp + 0.5) or frmt("%.1f", tmp / (data.dist_unit == 9 and 1000 or 5280)), MIDSIZE + RIGHT + data.telemFlags) --Pitch line(LEFT_DIV, 50, LEFT_POS, 50, SOLID, FORCE) text(LEFT_DIV + 5, 54, pitch > 0 and "\194" or (pitch == 0 and "->" or "\195"), SMLSIZE) diff --git a/src/iNav/save.lua b/src/iNav/save.lua index 761c6e23..2a7bfa52 100644 --- a/src/iNav/save.lua +++ b/src/iNav/save.lua @@ -1,4 +1,4 @@ -local config, data, FILE_PATH = ... +local config, data, frmt, FILE_PATH = ... local fh = io.open(FILE_PATH .. "cfg/" .. model.getInfo().name .. ".dat", "w") --[[ @@ -9,10 +9,9 @@ else ]] if fh ~= nil then local floor = math.floor - local format = string.format for i = 1, #config do if config[i].d == nil then - io.write(fh, string.format("%0" .. config[i].c .. "d", config[i].v)) + io.write(fh, frmt("%0" .. config[i].c .. "d", config[i].v)) else io.write(fh, floor(config[i].v * 10)) end diff --git a/src/iNav/view.lua b/src/iNav/view.lua index ce66bae3..441b93f2 100644 --- a/src/iNav/view.lua +++ b/src/iNav/view.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill) +local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local RIGHT_POS = SMLCD and 129 or 195 local GAUGE_WIDTH = SMLCD and 82 or 149 @@ -30,7 +30,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end local tmp = (frac ~= 0 or vc < max) and ext or "" if frac ~= 0 and vc + 0.5 < max then - text(21, y, string.format(frac, vc) .. tmp, SMLSIZE + flags) + text(21, y, frmt(frac, vc) .. tmp, SMLSIZE + flags) else text(21, y, math.floor(vc + 0.5) .. tmp, SMLSIZE + flags) end @@ -47,8 +47,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- GPS local gpsFlags = SMLSIZE + RIGHT + ((not data.telem or not data.gpsFix) and FLASH or 0) tmp = RIGHT_POS - (gpsFlags == SMLSIZE + RIGHT and 0 or 1) - text(tmp, 25, config[16].v == 0 and string.format(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) - text(tmp, 33, config[16].v == 0 and string.format(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) + text(tmp, 25, config[16].v == 0 and frmt(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lat) or gpsDegMin(data.gpsLatLon.lat, true), gpsFlags) + text(tmp, 33, config[16].v == 0 and frmt(SMLCD and "%.5f" or "%.6f", data.gpsLatLon.lon) or gpsDegMin(data.gpsLatLon.lon, false), gpsFlags) if data.crsf then text(RIGHT_POS - (data.telem and 0 or 1), 9, data.tpwr < 1000 and data.tpwr .. "mW" or data.tpwr * 0.001 .. "W", SMLSIZE + RIGHT + data.telemFlags) else From 804096764a28e2c1564905f7feabb25db4451c15 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 1 Sep 2019 17:11:16 -0400 Subject: [PATCH 14/34] Added RSSI/LQ --- dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 14117 -> 14761 bytes src/iNav/nirvana.lua | 17 +++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index 9b8a3f51a9652b83f10b2b4c2f4fd0f1cb269044..6cc3797f9226ce663d94f4b929d0b4ac88f044d9 100644 GIT binary patch delta 5892 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 data.rssiLow and max(floor((100 - val) / (100 - data.rssiLow) * 255), 0) or 255 local green = val < data.rssiLow and max(floor((val - data.rssiCrit) / (data.rssiLow - data.rssiCrit) * 255), 0) or 255 @@ -385,8 +385,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic data.rl = val end color(CUSTOM_COLOR, data.rc) - lcd.drawGauge(0, TOP + 110, X1 - 3, 15, min(val, 99), 100, CUSTOM_COLOR) - ]] + rect(LCD_W - 32, TOP + 20, 15, 88, CUSTOM_COLOR) + local h = math.floor(max(1, (min(val, 100) * 0.01) * 86)) + fill(LCD_W - 31, TOP + 107 - h, 13, h, CUSTOM_COLOR) -- Calc orientation tmp = data.headingRef @@ -521,7 +522,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic bleft = 170 bright = LCD_W - 1 - local val = math.floor((data.showMax and data.cellMin or data.cell) * 100 + 0.5) * 0.01 + val = math.floor((data.showMax and data.cellMin or data.cell) * 100 + 0.5) * 0.01 text(bright, btop, frmt(config[1].v == 0 and "%.2fV" or "%.1fV", config[1].v == 0 and val or (data.showMax and data.battMin or data.batt)), MIDSIZE + RIGHT + tmp) text(bleft, btop + 9, labels[2], SMLSIZE) if data.bl ~= val then From 2bb0f1f87152e679f8ae99ba1037b576ff2ee8f2 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 1 Sep 2019 17:24:52 -0400 Subject: [PATCH 15/34] Scaled map to fit --- dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 14761 -> 14770 bytes src/iNav/nirvana.lua | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index 6cc3797f9226ce663d94f4b929d0b4ac88f044d9..ce906b21d67b1e394c37aef4c1fe21da64b54361 100644 GIT binary patch delta 1707 zcmZuxT}&KR6h5<11}ZZZcJC}ucNbW8XLl!nv}rV3+wS_%#UK=AFR{`l#?+T4xC;Fh zEqBwz=?nGea%oJhJ{o<|h;RC^Bxc8i;zQX>VhF|<{~oAKXi{ygt!H-Wwl$sPCimw% z=brQ3@0(92znuJ{sa5xO!-xG~`TA7(TP*$UogV0(SPx!&Z zfH0E5^&l-J0s@o_c@;8LC^?s_ofBf z1Mf;=1q3VSKup5Lq(u*mZDKrW$v@hjnfB(i^hht{c`p=~b5NIk7M8rT=GybjQ)mWN z_r9j3m*bH4J^}?VY?)j3nh(W|yo`AsujZ-7b2lFM{}=C`FEsbTw8FPSdZZ5q)!}V< zyASM191^6TJumvAha2Mb=)U+^&7J5f1jI3L*n+dE*kK*sblh1q-pv8!c# zn~P5YL*D9KPSW)%oL}D17rZJc*$znKuzeGaaM6dC6(Y>eZt!c5?QJHLRgN-Z0&F_T z_XXOT=myfgXxT{Xs1S*_B|jPnQv~Ei7gTm~P$bX63?gP|y>%(eJofA)II|P*LctgJ z7aEz3bEkA29N%KRjm^gWsT#(7%qaL6Q8AZJ#9~JBp95AmB2{@ER5Flg1%b#~hA5*f z5w|R|ietbU!dh&}lfh@Y{%|vF1@b%d0V(1;s^l186$-BFG1k=RG5$#~s0dyR?(@(M zu7;u>x`X$If(qwDp^#QO2CLbMhMW?ABeYW|yWrxcV)Aqs|2h;U;&@ePjyw*BQDn%* zjgaN>o#5g2E^R$SE<=VaCWfe3=j(w^exiN6{p!|K(|WZuapEDR1$cXhsjTz-M zp<`^iFy7=ZC~oIOquHjlSx{6Iy-I|#;uG;h{VeWhE;G=epebC#RK<>lxGVNF8e*6d zjA!NemJ}@;LP0}p-)v8jJuq4?;+RX-sEiEC8#@1{Gk}%+88HSN-$__?r2_TLDIKWH z(Nj+LB$UfQjb+ZAgnQwC={6bk6y-3ip%mPG^lo&J{LOcVJ2mjll1yO8y%5re-NTN98rqu#VWs?`_Y5sXQ8WlGqGvtcCmIaSfI$fzH<h{k#)WY>Jj!aE?2%0p>X_r3;vYwhW-kzvZ1A;6eS?^S z_v9;9xmUA!_7uL;5BPQpk~xL%d5fFTo;~zdG)0(h%PBxlTYl`x7H?J*h+OC8Qk=%pv}qb?@a_ z#z JuRFip@*m?C8dd-R delta 1694 zcmZuxQEU`d6uq+xoo($5w!3epEpE4EyF0r(p{0R@Py}ZEU~B4@>h9Z!g&%`IB&E_? ztbp`wNF0BP%G*a`5dAdzqp_d*vHjU0mij?EB&Mk`#-K@wq%;8yir(2R1tK3WdGqeM z_uYHmIrGi<7voJ@KIsQT2Vljkv6)EgPm-kZ2W^olZ3M!U`DJn#TCI_k4n78i zkqmxk>0&A@K+1>_$WS3^l%$UILrO1iLJZWW-3Zu-b1>dwxu(v5&C>0#L;<{;X5H=Z zp-arLVAUFkNqLww>4xETj4w_3r&}{q{DhKT=!Rmj2P(NysLQ_u^TCp_{0j4xn?Y9j zD8`c*e+J4y*nDXrXgn2{dmV8-8+A7FgKsM7+>Za{d-2(eJ77xU4Uk^g0a4uH1x8M+5BWJ&Tzl53U+Y7Xn~BOGl|*3F~lxa@ogU7 z0*1WRd7PvJGF-^rQD=iPNcm1kWBfq4 zt;t;lhs>Ea(pnHA^&aKN!%>QWqUeI!$tYCF%P@_IX&NxE!gICL;q+V`h zHtwDL8lKH1+gK^7TYknuOe=>Nk+GIa#9W5*U&7{gM9OpxWHOLy1%b#-3{hH5BG?vL z!ZlzHVlOu3eeExH{pM9@0CJOsfK>1uWibxeg@oS$%rz8uoPXZlE)ia7Kj3p$xg3f6 z++N-jX_tb0FcMMnZ^2T&rXeTKPe*pDVi#OqS4`2}#lMZj37OasnnNexD2fc(xEnEj zr3oJG=u%cPv(vB>yTJkCVS*)8x9koClwif2Y=q< znAKU0=FlX*(~tOe5_9rrP^tI15%1pT-j7>^sWv?W=xI~OnQU^lrat*G2Rn%|5l4+-;?vutBuvFkGG&jku1ML|A}YlF&HNJuy{dQ?0ZZz zy*y&HpD=zioJ?R1Yn=fvT9 z@vq7VYn&JSh2)gt9)L8l0KKLbDgPm9)Ia E2P6Lr7ytkO diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 58cc3b99..575b97b8 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -441,7 +441,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.gpsHome ~= false then -- Craft location - tmp2 = config[31].v == 1 and 50 or 100 + tmp2 = config[31].v == 1 and 65 or 130 d = data.distanceLast >= data.distRef and min(max(data.distanceLast / maxDist * tmp2, 7), tmp2) or 1 local bearing = calcBearing(data.gpsHome, data.gpsLatLon) - tmp local rad1 = rad(bearing) From 2b50b516406d9ada8e8c016d04b7b9df6e6ded76 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 1 Sep 2019 17:35:01 -0400 Subject: [PATCH 16/34] Format GPS coords for Nirvana/Horus --- dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7506 -> 7559 bytes src/iNav/func_h.lua | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index ad6c8feb49b6450b1d7aa1831125c34508fac2f1..f4c8fcebade59fbfcdfb62e5f748455358034752 100644 GIT binary patch delta 164 zcmca))o#6kiI352GBcmMlpCWXV>BZJgLnf&gQFuOL$o81%>ZOKPWIumbZQ2RGcrNN znSg4bYzM{$DTW4!d?QRAsP7;XgP0>DlRP5>qdY?c1JC5+eA?{H3=9l;Wek%)@(ByD l@c}uiDGsVB>Z%5&dPb8O`E|HJ3K$p|IT#r?oAS%@0RVPP9lZbm delta 113 zcmZp-zGSt5iI34>GBck$lOyBg6h2F*Ch-P_2FFH5hG<6y25|6hi|< zo{O#31I#$Ry9mz$nkqz`!;6KA-kvA%3CB=KPu*Obj5v$gw$#UzQI5Z7db0 diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index af943f39..f89b7f59 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -77,7 +77,7 @@ end local function gpsDegMin(c, lat) local gpsD = math.floor(math.abs(c)) local gpsM = math.floor((math.abs(c) - gpsD) * 60) - return frmt("%d\64%d'%04.1f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) + return frmt(data.nv and "%d\64%d'%04.1f\"" or "%d\64%d'%05.2f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) end local function hdopGraph(x, y) From d13d2e2588bbe8a896984113785b3793b503292f Mon Sep 17 00:00:00 2001 From: teckel12 Date: Mon, 2 Sep 2019 16:53:23 -0400 Subject: [PATCH 17/34] Fix for Taranis x9d+ 2019 version --- dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3263 -> 3314 bytes src/iNav/data.lua | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index 5d366b27b928a86dea862603c461366c4196b3eb..0ad1a69a8b20c8dddd3f4853f15a2c6364ccfafa 100644 GIT binary patch delta 957 zcmZuw%W4!s6us4z?$#s*5oM-{dF)(>Ft`u`3N@*jQChb`LO_j(Amjr=Hd8YdGbHgf z&O#*yH@>oy#He{_deSD7A5f5(MK*qbU*M_k=^+6dF1OCPr_R0IRlVW;^`7*wfoktL zW>>HEFibFx2rvj$7nV?2C;A9bH%S0v1qP-GXX|c&uM5C>;#)lp<&)?PiHm zf~mBSJSD)DBrvHEe8?1~RjhS3C3O!%3lFjsPdo}%j(%rVvF(saHuqnXLODkxO%q{E zOjAW_YBNW3hQ}bgglsq~A9IBDV4k+idD<&0BD`8Qw5dlE^N2q%S{4><>Xv3YOGN_d z92Nk_b%?b?SLG3^@P_Sc{jj2={Ah{`a97-h+_C3jj@sjj-hqZ!6`I!hQEKur)-m=J zhB!k^MWQA-XNJLK5f`>LKCOAy#Su6@iwd$ca*P}jgC=*#K*u`ldmc}6EScnm!2u_y zIa%$4b?S6ob~Wq#Wm0F~yXYsMbZh(8#9h2hcp{O!QCtDHC-`lId8U@X-=F6wfQzLvvrGHd$hfPd^x}0K80MlKiaX4+}PUha2!Fd ubG!2uzIz{jhw0j%Hran%I5zI?_`ujbG7CIu;kZcS19#4z&n#WAr`><)Lk$W5 delta 906 zcmZWoO=}ZT6uoa=W~L@>K}3?FwsolsL6?HUBri!}bm^k8SlWe)LYFSYO%B%7r&t!f^F>=Cl&8VN^OzbjMEsL;2D zB;sTgg-PRzm_xj+wG4Pn=-~_*)x&@4VLcT<%q==2hNz`_rl-`67VqnPv&mg>Q+7Y> zoA+T3?pBL`K#i|RH0`P(O86M_eGzsfh9D**O~S3}VK7+43Fz{%VJ9NOcq5E`|EO_l zX22oLMXm!5d^qXMZ^x6QSl!V$;AAC}-HqyEB-Q(Yaqy6?v+^i?=2z`l$L~eDaFqO? z#+6xVbVWAZ@;UtU>(?g+eobUSE8RvLq zj_hl5*(&nX`|sH%a?700^^p6OA34i%$!^XMKft+8;ybi_%M>F8*Rt_;FP~goxO8!C I!Mtw&2DUr^x&QzG diff --git a/src/iNav/data.lua b/src/iNav/data.lua index 9da9e268..5bbe86e8 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -11,7 +11,7 @@ local function getTelemetryUnit(n) end local tx = string.sub(r, 0, 2) -if HORUS or string.sub(r, 0, 3) == "x9e" or string.sub(r, 0, 6) == "x9lite" then +if HORUS or string.sub(r, 0, 3) == "x9e" or string.sub(r, 0, 4) == "x9li" or string.sub(r, 0, 6) == "x9d+20" then tx = "x7" end local tmp = tx == "x9" and EVT_PLUS_FIRST or (tx == "xl" and EVT_UP_FIRST) From 5e6263d255472c50d9f8d0d804151ed567f9c792 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Tue, 3 Sep 2019 21:43:06 -0400 Subject: [PATCH 18/34] Center flight mode on Horus --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11340 -> 11344 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11340 -> 11344 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7559 -> 7705 bytes dist/SCRIPTS/TELEMETRY/iNav/func_t.luac | Bin 3474 -> 3474 bytes dist/SCRIPTS/TELEMETRY/iNav/horus.luac | Bin 15484 -> 15488 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 14770 -> 14774 bytes src/iNav.lua | 2 +- src/iNav/build.lua | 4 ++-- src/iNav/func_h.lua | 14 ++++++++++++-- src/iNav/func_t.lua | 2 +- src/iNav/horus.lua | 11 ++++++++--- src/iNav/nirvana.lua | 11 ++++++++--- 12 files changed, 32 insertions(+), 12 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 3d5ae7e9504ac9eb0c0190e21041f56deef96019..d957e548063f9b7a37a168f4464fa85d5752cd51 100644 GIT binary patch delta 51 zcmX>TaUo)YEaUc#a-B?y44e&|4U7jk85kM38h9PJ82B2v8u$)yG4L~RH}KExXxw~+ HsY4S0fl&@r delta 47 zcmcZ*aVBDdEaSF~a-B@F4U7$(42%aj8+aMG82B8x8u%Kx82ArxHSo{vVBCCysY4S0 DTT>0c diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index 3d5ae7e9504ac9eb0c0190e21041f56deef96019..d957e548063f9b7a37a168f4464fa85d5752cd51 100644 GIT binary patch delta 51 zcmX>TaUo)YEaUc#a-B?y44e&|4U7jk85kM38h9PJ82B2v8u$)yG4L~RH}KExXxw~+ HsY4S0fl&@r delta 47 zcmcZ*aVBDdEaSF~a-B@F4U7$(42%aj8+aMG82B8x8u%Kx82ArxHSo{vVBCCysY4S0 DTT>0c diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index f4c8fcebade59fbfcdfb62e5f748455358034752..3bb63125b5f84f3d381de2f3cfb3f7469e8545da 100644 GIT binary patch delta 950 zcmY*XO;6N77=GT)w9^_k1P;4v(C9_te~?3$?m{Ty84n)NL?wPk@ahgsZ56*Dt1$*Q z>R~TNz3hRLv7`$d)GJ&zcr*S7Pfm-FZIjNt^E}Tx@5j8+xi@30C+fuw0Hcs*%K(0l z17{R4&4AEz5h+*13ulbckE$29H^m8i5 z1@#;m=*ySG{=l5|1y&FHIT0in;Xp}3Qioxrs%>bS^M0SO--m)6_b9CAf|;1C)-V}t z*-IT0d+M-a^*Hn3!#vTCJOaTlQ8{bm70P5K+;NwzkKigt=B{4V>|J)jLMi6rP!8-Sl9cJ zz4@%vxGSWOpRYr$jl5|QdFMq}SJu;sr%$k{2GC2Z)WvKj1GpG7eU~AR^lT=t*P5PJ z|L@=xa6EN@Zc#FWh+RlqyxvOEuBf+J3)4U@WQ!4Ef@pb^cC6V_>8_fR!Hk(S!C|>v zT9Qllj)9$m#F!p(%hb!wJ6CSN651M{U%WMUxBbQVL}&HrtjMC5-aUvQ2z~8~t%B$-VHe%9 z2M>bxAYN1A4|dnHm!7?O^X5e-*|H?&@bc#S=9~FucyDh^uWwx*cJ=|R0PdgxyuStf z90M%|0^dVuGiBJ&JO_4j)|(b|+GlfH;)(E6>*-8*iU~hB*89Ro){bkO)2MQ`#>K-L z8B6hTP;JayX>6ZWxo{K=} zUEf(wY+nR^fRR-wHW21tRpjx@67zKxdsSk24SOAm(R+nCkIb>Ad7>GXgt%UlNu=mj zCFq9uKQ8Iqx4;`@1AJ` O#6+Y?k(2zsvhol4wZ?z| diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac index e8fc151d7f638bdf57b37a847f897e7be0dc865c..a76943a5a63cbe03cb879d87dfc798d1c23efffa 100644 GIT binary patch delta 139 zcmbOvJxO|kjGM3!0|SE^Lj&tlCI*J5P7DmH%?u3Q%nS@m4>K@$H8VFXWo87@%?(SP zK{Rt?12Y5b0pg{OCOdMkW@O*|mb(tb$>CK401q}CcmMzZ delta 139 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 literal 15484 zcmbt*dvIIVncsH-5|@(jARZL>5G@G+A5zw?lk8?Un{0HU2QMWOpzu&^S!QiYqHHCS zsYsL^dz1J;UJJ^DpzyGEb{#d@cD8?{ozDKz&U8D|>7{HF2_=%k!^uu$cH~L7Nt!m} z-F9ZDo!M!B-?{gKq$DSQlrzvh_k7>^zVCeRa{%>?U!F>n($?12K|N*9*50jT|0xb9 zh6DKQBvN*gkN^e$^5?jNC`iXY1pZ>1M%9DH7UfN%_UUx@VLo z5e9xCKME=GDc?hiT+YaS7R9E#XN zy=r2K)VU+Q-HfM^`0glq8Gmkczjx(_OWtjedkk`a8=qJLW5|DGS-)|_lfUt8j92Ey z+}~RE-1rvWZ{vLlFz-s$yW}a{*j6A)7RKCLlinLi%xz5;ZXED}xR<&OF9mNFNSR+5 z>o>fjn|u^p!~5#W?SAr!Zp{Z%_$V;xBc*?y$hWFKHiqZie8GKW-gl$0>h%?TzMV(r z=Wl!)^DCJD)~fHuGUiu&^ERr88t?9j*U+moKzkXxssQ*Uw`dF`89OJoNTZ`sg z7)%yHll7OA3Y(USWC-m_`3lWht*yZV?f z=DwSzT|6fOw0mo*w27aT&0M$JS{LbK+UB~5wJvI}_im9U`**kOAfdH|g$ z>k+h~lSQF?a8yLXg5jd;QECj6u9f(|oP9{_2l=2Cu(4oT~t++dE znCpdK?1mpkc)hpYX{{aGkqi`LiF!3=uMcZJ(MwB#FalEt&mQACZ0>EzVA25pKxwz0 ze$;xFoq78=$-Z3ECGX9$o9k`fQg)4HxA;D^cbl)d=S^}OPE&5V-rBphp7(C+Zhh|$ z)6n5F(0e55FGi$)z&_n#5&Kt!^dtBJVA7}Z7%#wwpJuq|6NvBaI${|6izVyVWBnyk z?012!JaH=i;#hxwenf&8%>SMVpX3OxzB} z^&Tq^CyxaN67N^{0zbOg#kias6s89p8jv_|m0}O#Bm(8w_k;iN`aRVDF!i8F+=+%o zx9Bm7^I;0%>HpI({D}fWwQZS)jq~ZTfw|I{v{@B4llIJv4SLFBgCm&)T@8*?e_A*n zxvs81ysn`?xGpq;ct(ES3Oei`5AiQNf{ynAI=@N&!XxDOJ|Mq0y`|DafwwDCZ71aKUh0_RxYYdAHJ?g$ zP8LZy!L`L8F;YYSR$PhL^ArB%NUr9ke$;@t-$!fLh2l-!+MU2B2fyE4Y!irM_XDn-d+%FXZ9yEUp_UqY@yO%?5;dUR>SdmCyjsfs^9$(ruX zr_z)!7L~=~QKkjjqUNPFWtlSjtQIKPcY^=`(ryVx!kuDeL_hbW#3(T7L71a#P?ma^mx1fmo5tS6BU z{D5`jPali<>aLi#bS$<8e?WT_?WJqq3nPG5YRBBYhQBkc`9;ltgl!lN8!o1$_J}y* z9z99jO?{RiPQfk3Ag5Psxt3C{(#)7uOe4m7Pt%(=8RrzyxBqvl-6nj;dq`gU4` z9oJyLu-GDM#q?(0^pwdv9bV^M_if;vwrGaec^l@MT%g;WW8M~>T-usr-lgt!-pGfB zU#Rfm&Sa_P6?m@Ht6mrK73Xxw=e*zf-(I)lORqgmdH->mFJ__~H+t$gO{DHbICj)p zhGb7@{Gm{b$IUTe>`$6w?XyCy9jB-18PvuzXu}lhv-Is zI9l?%eeex$J!|?zfVxNO$PcBT#`5VDRRhQAdOa{OU(XIq25{aekr|tyiQd`AbubeU zKBfU*=!V{clc>uRfl@4)F1hjEZD8&u=2p^Iqw}DZC;?VqjUgW}EKETPtbsOgXuhrv z6iNXf=DRT;T*JE6Kxv?Wbq4V5IdA4_bTv?x^M(4v01g7EzizQof5zQopw1fGP}8Z) zSH2zbG_qzN5yTlfc+aUfN`t7&F(W9tC`8*e)WB|W8@&U1e}oP1Dc9Ue{S~3ec|jtc z?V}S}E0;CBl+0GVYeAv(%R1gJ^K8DDr9#mkS*>L~%QgQG=8zkTsbkUknk!l;9z%~! zO0QP@Gp^-@V#eJo*xsnaehO9n_ncMq?%woIBFWM{@68m>_q7w$L;m@&wjDl_f`9n` zeOPn}HT5if0fMId5l`w^#6Nm0@(gwSHOt>?Jc}3(vJZ9Xz+;(`#bRV0GR+nJKS*Gl zO1&SMs9lXDYt2YMWYYZ9o%c@?yb3v9$`fAk9|_z9>}{?YsPR`(GxDiP^mdb^22!M_ z(=gBnW}dJ2ujl!|W5m927rBtvPvSFC%SVJCw)Vph@IIgNLmx#q-n$9Dv4%Ns+7(&F z8rB)=Koqgau&@@OKtFr~IJ8>JM^|bnQ1A`R2m9e0zO+Ba=N^J@*mFtHVi|aTrPzp~ zPQj*Jr>-GaD56)OkHbDeC#0u8aEbs$;ajLp3?Lp*jJaQo<*%9cj@fmx#bXn#K$1=b*iRLafDHLkgYu;#93RrZpG}jC{X1TAt@Ers zXXPm9g!k{i?<^F@-7EftPwu~!&(P~(zlqd+H|*)ho@AZDUS;m6rQVM|sy1)lAMR9& zN07&K=+I~Jt2%SVT`hh0Xy3fa7co7?eVnu0LiV4U8@QrP^HaFsUkXe@w*uqk;vMOy zkR|L5d>CMzZ}bIUdMbvqm>YUu&rPKdIXAtNLrv+g7p?5~#`T#rzc=k+@??TE=-t;Xm_q?!&)5g78L(gd9!Y1PqcNtGF>efgaeYV6$pKZ~;nmXCS zXWE6D?pv-+0AKfQ#9yydxbL&q`pva2vKGNPf!6n?S2T005FHqa{&&VZA&>i=0( z`aFD0zSoM2H(?Xr!zAit0`;mN?>caCw}JWxUo5J0g5!k!5^?7n^+$ZgQ=Q4$DW4BH z&g=L4Cj6&63wWPE{z|6&KJZoz>;bYz67>mpp!hZvnlTt9+EtB@XCOMGQgDm`6{?^CJ!P-kIPa!`qOf zt9A6(rKN!$1GQM|71i_^Qp;y(1$Fvvy>t`t5E_AfM3A=iXVAyv92{>9QV!4E8Mp8@ z&$vDH;4o@(mmYe7^4S-tP#N1Z*9`6{HqYRx@6juj;e6!`CGnhSmWH_wCz{RS{tEOL zpy3`ZkJ^tshO;v2dQ9L9Y~bmAA2ETm@>QIF`*BwGHmgH=vqpMlY4~Wivh2@>hT#vx zVFNiX1UV7wSi23licPD~T=BMOz4bzi);d1+1^ivX|M@!ayGQ7Qd^gYIAnpKsjlf_s zP{!@9sfVi##4q%KcQx5~!7Y$SRvNk+^kO3w(1#3wJA3FC=AME$CuLrA7lI$e7Rtlq zs=x+K*Z{Hv&q07E%BT;GUwDlma&z_!d79bbHQYU@p$w^^it^)NW$3|m)jId0KSh1$ z7S+-{X+!vxd2bTfL(h)lUWH?GbdT%@)eL%7BQVH)z7Y^z;JaN9q91KsADqZs8_Z>p zSIa`tf}(S+B$V%_&Gk9l(HH@0Qyb`aGtUsiRsz=su%26%fquxTL2ePGZo|4WnJ)*1 z<{H_dNx%@7gC-ok#3SGu;ED2W=#hNYGWJnk8hYBO4zXY3UgUf1>#L1yZ2j)VMaf2a za2?j%1e?RXOs^>YEAAPAtAYnIQ{nP?;24?#x} z>@5meV(cUF&<!RVSkc01j0B3xL4*)(0 z_#ogz68_fNN5R+ETW~#eoO+C34)fkM#A+VzbIt6YNyK12^d-tyD#{lTpF2hc;;D^s zw&X%PsR}%`>q{{1#9orLo(%V+woonu;?bj;9 zpr_7NZbw%_zw%NSb&kAsl=8=(qr_Wp?Zy5aW}X{E%ygi~L#&|=UQK`5x?e#Im44;U zm0+LxCr~fW5$7a3j}h`*GX38H{~cN=;Y-0Fwf`9T>ydc%58b&s@GLrZo=m12?p)yU zht@M(Nk2~U(&Ln?KTe)%)f-ozKuqBdNA_%O$eAyZ+PH(fd1UZ7m2o$T?^;SPnQ+8g zwf<`}KE)#Z3HPpn8Q}j^;`cH>dId+WnQ}c3c)omOs8BA~kCw}W6XlNvInT&5J@U^ztEMlMo|Lq8;Oph3 z!5%FLdTj!$ye3knby>Wq{A7wFs@1p~MH=ux4BJ&k*0eV_! zz$Zfj^>K!Bl~2kuYCO9~){3<>wXy9OUvKU8xqea{WR0Ho0s2QArcsIHmT&qB_S$y0A$ zY@NUL&?Q=fZe1b7u2ug$p^jD!WZTYVE_tivF$dQ=u8nH>5@DupR7U*pdb{>qwPk`sxDuTb*Y6N~xR_~Ax&dT1w6~yljf?pXl z_dM%ef!-C|U1;zTfxC?=_*N@Rdsdp2f#vKE_b6|<=q7UPhWVfK{M}}yKHm)OS%6P* z4$i@+7G?i|dL6{Q72Do`?aQ<9tyz2*!tt>=*KG2U;AQ$CO@mzLs_Dy|M=hT?51$YN zoAO5J$qoMSdn9|5-(=gyWp5S!e9!X7h2Uq_zfZ}0M)pOf&0jWcPFvx#vu4kNd%c)ju@VtiJbFOhr_KoNnJJ;Zwn|j6#_RvGPW8k z=pjafgDqW@U-4FhiHCJj9%o&2Zp<-y7WXvvej2ZsF@a0;O?wM|mG5jUoqu&*=jE?@ ztBvu8`82-jZQUDT|F-V$Wz2Yk3|o}YXA#f1H+mrFZInmuCvz(%P)DnoS5cdTO11pI zht%w===(#8+I)4m+ZZ2aeYireZHPD2Db9}#+yQYs!KR>vd(!*Pxy);^<#Ni4J5J;xE(!jkp;}~J+1n0{P#^9$0<@pji*}}AOMk&Q68qLAE z%=1`}v!s=y8I~-k26CCt(L%XpLPM*~=AM*YlG_8@w*+vrUOWlceS33VW5G!o8HA}88*Vm}FfeL%{Iwdf6SjziCy`MR0w z;a3agKQhM#Y7B6Yi@&$pXbvqm{&ACxeI4w#+*drDmn5IY^uS#38{UP?7dH7K?_2W! zE&B!yXQDhYu(4OpWj?*0m(XL)m4k>Q^enhD(XrnX94FX=j{TfqeX)EQOFr}j9^@!# zL#a!d`=s624hHgsTKPuH$JORHa3OBSwi4QB#y05jeCy25w%yPpY4Cx$#yR-FuVk+x z^$RQ*_Zp8UG-=@~x74C#!N4$gYcuXLUmhq&J@Q!40zhvFnnD9Fm{LaU~$EAN`{lKHw zk0Tdq(sy7Nx02Oh!_X!^tvJWNEtv)^A8~t{sZF@{9yZ=Pao<=#Kd?~NXt5DQ3{{7` zO?}h4b^YV6)V{mIUAd))j(E^Ph0K2MLPJA7aUhTIy%jlIxEY+irOxnONic5WX5#Wb zePe#-pXRz0B3By`ojY~f9HjOA)Q$DdD_=VmUFiy5DvnthR6xVNP< z=Vo}4LBL zlP{3DSBxe6!r9qVFQ#YC;q=Uai##$hc74Yd{-gh7t@&u5luoXp_CNnK{`>2FCQzKw zByehW>ZMPa#HLQ2g2)WU=rwb6=_?l@iZ%DD#Y%k9VkI;Uzkw!t*#giL<~zvnw2e<> zi*{CXc>p+YER&r`Ja=GXd?IZxjoCEEY~&7m5Hdy0OpG5sXrq5tllmAxtdC~(^r7RX zA!et~O`o^7`lEeP@Ke)gZ5`1UY?5CvT&Mzc>BX5>5-^mh6YZ!Cj%ae}z!OiNF}I?T z#LpzgGl!o!WHL)LZ*zF*!t^wZ%RVx7Zuac#<8}FyjUV^`! znr59#Pp~J(r!K+I*d#oYo`%{vu%<4aXT9?L3l}bp&YYhn#S8?zj!(^w&mh{QcY>@X z1AWp|K~pSHd0lh`Kb8R@no=cZmj z7GO2mJ|xw|o5#fH%sFu9{hXUQ^<_&?`jjo`A!}gR$?W;__DtFu&_R19V`|~}q4Dtv zScZw3F(fnX48&$BtWBF9`j7elb?+y+#=iDX%fFxPYyS`bywdrvfACYwr|9>z_CGrK zFFtqe=HKj-_JW}=&R)JirUhuP)_#Wn{%h3qe#Vy-v?3-=+hB0uGO{vb9-PQ#54Cbf!lG$RSp$(Uz5Yp?mTm#)ust|# zik&_5baqqT(&kMMVYl5FtKa{(W+Z(1ycq%K&)T$~)TC?gACDgxv*rX0f**hr{?p2? zET^#P*^955Zl5@OP-Yx!lXeEsj@g2>(xp8k>|JTL2Ymmsh5XS4)ALSEa{-aAi3~Dw zdAgM#f8Rtn!&A~PPF=hNCuIxqTzcviGceB_N+z z`2{-|=?^Vw48#EwW@)4y|2Xt-^bcSA6SHa!Jn^YBUo@EwJn=~$GVaN#S!r`A8^72Z zJZv&O2`QHE@L#7jamvD=l)1HwmoA+(Y4K=$1{-3+{K7&=tw@N>NSwq@+YN{Ilu2_u zW$GrK$s8sb=@%_^^1=fbSu?!wqRm^Ju(nJi>xmoA3Gd|aKZVisOQv5-g_!S_;6}@^ z&=)5~RtLHz_UrRAr>74iEpT?W%mHh$D?JrYCl4p}O};87Ozs?eBNwMz2KltPt8C&hKEc}15bPgdzP7N zs^t!8GZ~yieJ~@(fbE#^_<@7ZJ!Q?2-S1sTT(IKd0RM!u3vX;UKA*s+joeS+p(;42 zCu!g6c!Zc1l}b+)-s&m^Kp#;r+L6z_@Kq_ zRnS!(hO(+$aq{{qXz}|B-d7iL4%Gn}9FSqZqs@0kY2*33O3tb7*A#ufp~!j16^Fhb z{PshhD_7bkuH@QyzSE(!9fF(W9gq(+C$9)4dBtcuu3d44sa+g$h)u8r!;D-TUvSEG z;86vS^>vOmKFG^;8(_Syhpu29iG!f|oI@yBugu*toRe2bc@yL1TUy&qJfDL++~l+E zq(vX>8$Yrg>c;eDJ%3X*}M<=RFW61*cN{dlSR=@SHbD z!MuY1$mci&*qe%QOyWQE_2-EAKlZUPS18ADes^MC@#V;x!#D2+zTw5!GJs=~IfZ{I z+pdT<;5yy}{v_}xazYv%bD(d{fe*%x_warbIP-X}fS2b=PD$)n90feza|q{gy3)?K z06gvy7~^8*JqN)MtZbeKU&8^Mt)kaZL>M>Oy_!StFJ%F1cO5X=yM;!KJMxave&PV1 z)G>B0w6E~tv>8sUIk?b1a?oJ7Q?51IO#Unj&@7(P5g?b#`^JJZ z`A)p;O(&^uJ3$}3%1%LVTf9J*7M-_1_g4F|^G{UJb+D27bkmNH{QKBb!0(z-`qb#* zELuoj^FW8c=@8KJ4|H%GzmI6onH~PG8YxdIPbfQ;$COVhF=bGRC{d+H*@JnX;#Gzi zYvbPtUT~QJfAZ>hyb1Z2NuyQGU|&+^g{FK{&Jz_34L$`zib8*(c?ImOz_zp+UvSPL zhzq$mY^mh<*QoC)_=Us50{lpEhQ&6#g9CyjaVzeebKIh3JY5HFIY!>N|6NBrd;_>Hrt5m+T}Pi~Q{{k@mK|@jyC4@oA)Dj-^mnhb zU4z)WW!KMY4;(VdKGd~ZPYP)ka_e*#v1fMK12Ub!G_|ZQ54BzNd9!1C+2-96;`ePT otz$4cf#2X9+yyDSl)Z3`eg&QaJN77CK{x#&m>==Svkyc5ANWbn-T(jq diff --git a/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac b/dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac index ce906b21d67b1e394c37aef4c1fe21da64b54361..f4ea2e10dc2bbbbc2e4d7f06f65b6f3ef42c872b 100644 GIT binary patch literal 14774 zcmbt*eQ;aXmEU;)iAPBUKskyYYiQ2udPA5g(LknYCz&vSdq^ zL(z6@Z{rKa7Gx&`1(2YkV?^^xx?o|)rE{PTDgfAEpt_Cw&8j?{PK8L6GGzlvw3x4U5;&*Bf~8$x!X z8k(30MTtfyh?t$cMSIaI#bi<)%rP4!OJ*WMH?YpH+8DDle{nfNvlApWF#B~sBbJWV z&<*VOV|#j{hKkEQbj$v6Q)$`$*5tCiDR=Z}QwDn`?MIuk6ZW@OFyBmPkki55L&t~? z?PTN!693iDPe8_rkDKJuQHnT@QKOp8a(>}h4V{YV{KDB9a>g9HyR$f7?33M@>@h0h zGg)#p7qLfn9-~{1$>s^nha4oW;~bEkvhPe3w(!87Ej&QC!UO!a@PIr;e10E~5_n|n z$7oQEG;KZ~bX>35nVaj7c2ZNuzDSwq@uqsdP9?VcD0A@j_K$BmV(%Px{=iPsBIMrX zAo{maj3NIg6ASNs5|!WIl_iSBmTGs#vhVGT$?qS>{8)D3y==C}c`WOA{|A_tfPc4? zeXj)AyCui_AA$}!sX=v;r+Jbj=VbURs*^P^%!e@Vo1FU!!(4MxJ=KwW-AU5yB+;a^ zX3rv?_ByBi6X*5!94987j_b~rPn>n{@45~-0N;7y`g>8pW7j8JcAltvzx#GKu{yR# ztD_cju_o2Ub`RZVmU+N2-=n&yg}G?A=A!0xz)#h2yIR>j{$v&w$@Mg4@X=hX<=tG} z`^Q#t??w81n=<$S_Q<;~mw@@Hj&-kq7ifZ33n^^3s!;RL3U~pI`5w$$n8KPgg?6t4 ze#&L=;!n;i4_^3a3fuc`9&}gp??vL^g%4nXcNImz{OS&N>IC+{RzgmyVW;|yxu7Xm zXo>S+-KTNZ!fgsVkKEvA18jGK9^o+Li@onE?k)U;Z2G>v#=gJ}PFvp>F!lw_eSH3* zgOTcD-mAG@(p+rkP(PFI!Pb5xo!H7T_bKEg5wHD-S1vF1q;oaYm&@&KP>Xy0>M+Cp zn#{^#Q_;25B(ENCj;t;=IpRvtp6>}pl-}lyveXpI=Y!GwLhx$7mxlVu>eq(YVHYDo zpKNfPcM5(@Vz7f>hCV?j$n^+X!Sx)Ip6+J>KjV1j+YS#I0u`LntM65o#9js*KhFk_ z?P+ZA*j@&mhk@IMhpww#jO(F+_hrF<^5oL>l;`~3*WM(q=~Uvq%Q zVpD?(8OTwQL8k%!`TX7@?DFt_E_*L{ySB(4&G!i2TV>bxo4keWDwo~h`_S1=1DT=y>8jR1zd zt$ZzC!`v*uaShs1tEfFwHS~0xwffa+L1P1dQ^zN24ZL+Lp5JHL=Buv$aF8E$8c$CAxIwPS3T6$ zJPlcCDkNl`Mh#2qYr@GInoM}w$wL9G3o;LDeI!}K$cuem*4kVksh;(8a@_zX0~TUl z)}eW+m3*wD`)-u3&h%1qidp@viU}V2+8Vw#Tb}ADm6g`z!a^6;2fM{uo*N`i4{NAZ ztnp5T9$d4Wp9-~je)Hxj)PFxUuts$`=x6n;K~-{o9IQdjzwd`X!9KESOL+=;#ogO# zPxK0#MeZ!N3VXVH+a?mdZS!}cWSj1#**LRqyKk!J;eAs*5AO5MBgY{>?*tw09}n?& zY(ppe0G;0@zhfKuvk%ChU45s}z?2_S1ooss+?)#hdxLJph zT#Q6b(wr>2aLlbDw=?ALMs_XB<5F{x&$$|Nt>;L($7_p5Y(9tn&2=ka!f)l415(^c zv#0@cIVTO_nO(WLcNrfEe*fpWDuy_Q&sVYB>QeAY9;=`OKlnF1e>SMMf_~KkKcL1H z;E@xApU~#RmJ6p;Qgz|xL$+eTnfnzbP%zKJ|S+W8-|Y4uodXL zG=(Y1rvfkC@lq4dN6fTzC0 z4&iwg@>x&2{`;G-k?{HA%9F6+AUWfMLGH`N+#uarSqgA}&cHUJPt(4|GAo1nm@r2C z=>6L_S;qAg>eW-ISKq*Rkof*a-eagO+()a5z{~lkM4U|Y9}N^&Zc(v+F;LGI(EHS* zt`E}f{#>B6;>y|c3xPT%Z|8OwJ&Q(6x4$bS?4_D>C2%XA3~u&^+e*H6626g*Cv~4t zs9`>jm|gvwknE0A#63uL33sbAk!)R8a0kef9xtHzX`JeKZ9?4CaT@T22I$SR4&SHv^v~VPQV)g_Y7fQ z-&DTUfqkf(6<8Lu`lhA?+>uDNHfnj)#99_}->Ypsn0)or)ZEC@J)=BsFTeAMyI?i2tItk@B!N zYNJBlNc^5Pf_^%?dM{8?o_03Jap&%T8cN7r_p3hmQ9t~{^_PC;#rSFDRK)j+D=@K= z4CEG)fu~r_Uvc>x)gi>NoBNQjh;>}1k}Dr@LMFSS{A3y9m6f%?EmtN`>R$`YLMF{c z4RU^n>eU|PT_I0>Z1tGC8Fp;q@s7G{gHOn-L+Jni6=hcYsfZj_&py?2Z~QA8xi|k6 z;=XVKIgRh3rA`I(ISP8Va3>+Sd|00Omi@P+h9q%AlNDO)x z^$K*n#nn%(Wz!%LByTw8TxS#iMv{6p`Sn>d-sqdUUoLJn!o1yRuQ)o@g(XE zNvF8JHR7-x>D4`?8FgrL{V6J^D|KiKul~~;ylUctm*!%%oY!U^TWIBDbWhIJaeawoF;KUgTC%t9m;ZTEWhmJ`r62U=+|)G<&}eW z*k9o?@Vtbxid@sbx)$87zHU7q-i!1fN8am!4xI)+yqi)Usn`d1l|S>VcG&lqxGU8% z(L<`WSj(z37u7pfKXG$EB=}QQSr&c`S?aU-U%I)@H~Y@y>Tn2k&91@6;1_x>Q~nmY zEdO)qP7}?pq~R~j+YMV^oqCp<6HLNfMy?4k+!HkT5^_thdkwuZdQaf_`px(d&pq4V zgV-O${)h0Dx&gn)tUQa@A3*@%PNx!sZwdRPdt}<`3nP{LeI_?T(1UDS9pOG3j45Y$ z3e?3 zY_3-1F`StcoY~6rrC;T~6hF)RfItyAIdPUss4LeY_oQ-G_*WWqn$g2G#dSK8(n^qh z2kaft6bed-I)eQzJ5^P<%)edV0eCgOY@ z_j}RXuKXOijr{!n3A#Se4M=xFGz-3y@#jL5`R78-3gdYY`GeJTgI-MeG&r&PD@PW& zYffqBy=s8_6LP*a({m1W{~QUKp<6kA&dAHqGi(fA^%2BSEPqYtO2wSVR5o7|npiz& z*6{iw&-<`lY4z{L{g=mY*w%sf%lKqEXs*~nvio_^j^O?oW%3kw@><4uCInB!KXmOT zIht4sWfNuR9C|gIr=R<@g~L@hs}*qccpToH>?eED)6Vf#sOQD06)Gkc+Zr_7SJg&V zOgvBW^z&45Pq*E^GxcYP18+BCgn8Jm<|LCO+*QNLI!fdDNV1kWQnzdEcRZcsC10fc zJY~EuP&U=uHBt6-EKN;@18lH}s9_Qx!tfR2d5h6!0*12 zNh_P`b5>~0yimCto9n@A7hm7v`SqLp+zo0^JAZ%9$8Ha`JJ;OpF}DYATy;HMO@co3 zfVmu7`yaK?OKWL*p%(O7y9=NX8GyGo&}aIYJS4}GpVelkKW&|x-bXesY>c$)(!t+65 zJBBbu+_dX>)c$So@Xz*WveynhI*T5hBe~e|BwOgZ2kdXg-n&tUGHzJ}Gnui9gUo{n_N zPILI!@D2s*tf*%~pUaSMcY<|recBVARsmPVdmkr<#S-ogE+^h`*l`}Gt}|9ecz**O z;T;ZzAWJLvk#J!*t=~yoRro9SmHAYRhTwmg%goE#;j10cW{2vd&a04P9`9#>=j%DX z4fuB8+kx-U@fWwlZ`!ZpBi=z6=pV#;BNefl!F(c>>>5H0X1p&_rcjUu5T8HpVTh+H zhBZ6V2RSpbi=g-FyU1VLu1h=%I*(T9n0Ycb#rFgLzcTC&Q3}v9;0aFgfpFajEYm}$=v*mRjhdDJ0vHU@j2c;NYicn9Z1nVrsEmLi7)i{ zREzK@i4~{DNcP+l>l^ucb!(4My7PrYN}?7dAE7ipMGt6sz)K6UViL3vBZJyB@-=8B z(I0S}Dzl>Jgg$0A?)x&qm*6*TnH2f}FV?^|8SmwaZ8C*1DyA-zJaC4Zd^%p5snP8V zndE^lfIGgg2pi9oyv@f6P`#j6h1vl1aGwXR=)H$CFLq@iUlHs0SoXmdIA;mxx(@iH_pFGE zH0U?Ox0?)Kmb~aqyy#8z_pP1M0D6-G?@hda&t=8)R~qVs4RIaujw6RK31_JR|MqC= zf3;y>`yB49HpDc~FZ`TRp@!2Gvd!VT&10!A^{dWoYN@>sXXWQ3yq67Q-9%vp@y|LW zUptxaZ4EoOM^ayiGY_f-;TI9u{1mr2d?eyMp^stzaO!b7Wt=CR@=`QaXv-9OEc2*K z+@8|(*JyqX{oeFK$NV(jF|7T(L&p9l!++%RIGOs8%ikeqd9>54SCjp}>M-OHe#ekQ ziiHKCW4x;pxna)xb-HKppG$q6a! z3mt9ei>5B3sWN=Nw{oVU=M~=LB1hx9mgJI%AH2swKHu=QSRwaWCbeYx*=N7k&#;#J zYy)}GJ8$x_)UrXt8z^Fp@UH>nhW|hR`UmvBpH+OT@XG&_Z@~`!BIM$-l*-<~viIXI zX+Rcw+<+H8qKF}Q7j*_ z*pUCxcUd?b{ttNBp&>@?14-99YLe_rpzh2_cM+4eyU6#*JN5zJzQ_#TZ*#vOiAAwC zGw=(_3>@FzsQUJE|9N^qziWkYKE9sw*dkZ?N%Te}}O(sy;{aT#2aeiDZ}5xycYI& zd9SSNqWr%d#X|I9U3izdE?isA?K{2cJg@5Ui0`wvoGtY#f489P{MxG1`3tReN)7SRZt5MNM*alv!#5DIsyKkmW*s5^aIGeDEH&VWDohZE4x?KLy(VQZS zT*f}Hp4WsP%lBF*y#K{9=lvF;udoRksf0np&*TE`OkDr4g`5(1CiFM_`!w!%|2&eSE#`eY_hRU{(X)34AB;UBGwg_>0@&H|^K)GHQ=rFL00YzM+pH zhpuy0EBpg+Y2XiaoglWm5#u7hx99|MQdp=(u7N+jK`Z6|x-}PUTFc)%$>qTfTf_hA z)j`A{YDxJG)Z_mn>SJGO3HQ&!&jxvK03VkNF~U_AeFCxX_Yi#_uEFJurv8N2Yvigo zKnJx;MXy!(6TNo9m*&cUq>n*^uPK!aKfRS&>st2y^A;Iz)No(jJ}>EfPPR>?{@F2C z_~R`;$j>eK|DJP$hBfNFxTVKSm;ZQEUV0pTLjkda_{F_5g7b>L0B4BcJR&!7`BFyS zM9(vU93^a+;&CH#AJ5Uk4jS@=?E7BDx8;HF;RSH7em9u;_NLzPdt36ieWpg_Vt!^p ztNaCQy11z~zM1-zHl&r%cis+3Nt zpiw{^s3hIBRQlV>`pSD9lEYrSA2ZjNRnbpx&e8m*o>dZ&t%`^)jGWO2@yJ1{27u^i zpQvJRfBbLt0VNCw(NP0J=ki93LIKJUTK?HvWUyXP+Zo4HygjOXtT&&c!cX zxS)$L#z*>!mLHnJfBx6Tp3k2U(uqA({i8qSe}DOej$~(5fgBzme(`ag*zm{*MCNFW zUe`yLzcU6=4A^T1D>h)TVybGxPjl%N13{1KbCBU+b3Ku2!%r>gP%4q^i#~IxueUF5 z?g*NsjvE82F$W%9!bD&1(ZlBQZ>mBKy+UjpsxS%(F>y&%@cn7gphY+^t`DW z`nE~(+nS-81F8+lo-Uue^lB7_GN3V4Yz-ZF^sIgY_$yzQi1sFqK6ONA7U#Up9eFt>p- z_r=%|W6Ax~Iv@cG9FaJwKVx{-Vt(fQWjNKyC|9hoy9wwWzC3QwK%Ewv<*4{5w9Uh4 zcqHFJ11rba9j<-R&{$9Ukw!gxKO@a;G&3J*M029A9l5A*|{H+HDS=P;GeC zPiJ3x<(c!QYN)OlGGqnvl3LAd|0_(6umlq_?*Zw&JwLE?+*cYn+dIFTJ`k ziSp#c&ml0}bizozhYmkuIt%@Qev*-~%SOP2bXPcYP$%Eg(%Y|(;)%pj9XD19%RxiJ z`+{RTzWXD_;JWDq+6%gi!kNd$Uq%Js9t1-OqnKkefdgJyaOh>!0`AWTd&7s0 z>)^wE$>fnr7K<9Zv|(ewqIzgPO2&~R20}ey4iI$QRgy=ZOm4}b>ZIvz*e|0ClNaE_}KxSTIj%Ie8_#`+2QeVv4l&`C%UGd1(W3^ z{#U0ndA7o&TX$4mHeh9#nVVz;qtO?2zu;tzIqCY)Oc!McdtH{t&W3fbxOnNz=ut#9 z&%}V{q#nP-#=gwWbdu()6m$s+dV07YjLj$*8S49>vLSQ3tjKB0M zMCN+Di16p4Umiy4xp01b6p4q6d+yAomke_Bb%PxBsKWJ;gS*coqw_QD-`}!-zgckq zn-Prk4c(qShx<+#MA*^F-Y}04p4>nOW25BpBe&_iLkIo^4lmlkVY5uIxSpdgAoCmQ zJZXycqA@uAya`F_mWN5d%7c_2G>Fdue5$DSBp$M)Qbf|o5tb~GuqtK3niNZ?Elzz- zm=m98BvmR(nv|WBtbLe^_1Mete4Yub1UyXwUs(@Yd|m`y*`i6eq$^gwzX)1+R=s#!drfjpv%hkk_%KiK_!Zu-alC$L1AMcOYN zkoNJ}=D$ZViQr=)WfYIM@%e}tk%TKG{y&T1M|e(ZBmpkrUw&DR0Qa`UEJG50?v^Gx zf+sg-iP9X;=T^WaXPOKczV6lVwW6jl;Bm;b#DA_?EwL)BwY-h>Ls;LJX2R%zfxZC) zAB-&@VLppBlX#ZE%YG#-MGs1rES?`(n01h@RP$F@eB8h=rdo^%hTzKPaPZYEShJHg zY7*l==V(+dcyqIZP`$Mhz)FFPY#@ISny?&5^2ifp8+^Sls3NL`F zG%NNTo~!OYtZ_WP3dLTnO6SjI!7_uVa0JLD_Q$>-u6o-_@(nBKgV&Um(G7za=+gX$ zbJe!0o7KzKw`9<@a3k|HUX73V`_iWVYkHg0B9+BT`9%$IN^z`V%c-q{i$>v<} z(_@kzmmZZ`q&?CfNUc)46qG_zqtpesQ*uZheAVW^qnHffV{^ABR4S`M*czf|>vT literal 14770 zcmbt*eQ;aXmEU;)2|zLd5FZcVhiJ(p!B5MH-K0&jyYYiW5tK-P!k27XVl9fIEZLIj zP_&)c-S|R@39nOv0!T=0w9KUcbSCLcrhl}5Z2#E@B_383mb> z^QoJPLdNLv#`5%WvacMc26E*%KgH#s#+c-%#2mEh%r)9#*q`gffk^BGW$_uz^uyM3#@!5S1Ht z?hiV~7RkqTsPAJ9k>xuSaV|B~aXgLK$9>Gj@s}5GyIjZn-Th8degL_b@HrpF81lax z?YsGIG<$OiW0&i0%^j!f<{i90k|Ww5>$@3?^||-QayR?&o&)?u&UG_~xf8kE&F{I0 zbQh~5H}h@gNLkI5n#fJ{8s3{`NO8}EAJy>A+$^ZOnRnhz%J2-)p!=Oie}L!ms>}KA zs{7`Od&a#oICJpb)tQ@1n0LMJa^7**-gMT^xLqgRhwiwq-?UxtC9ReYvRZafucb!v z(1E7+nPm#|ct1!Uc2M)MM&@A$<}u$`%k64qxA>D;m_5GO5W$Ce=+KGy^_%=QW zfEPZ@OU)+|`J4L--kWwWc;SP&mJ{o8E~xEejVG}Nwi0rZgEhvDcR|y>MN8}lcz>Co zL)@mI^Vn&=H_UyUU}8@9vd2!W7k2RzvdMML#=4f%oVHvi=CBSj$#op(doH9Q52?NJ z0fG+pH^rH93$_j-;kfd5yp705B3?a+S1vEsgyRl!$34yU6lo4>BaA%E5y|&AX4m=~ z%lV}P_CkN-il@-B9A9j)uP+^ltoJv%65dv4qOY|#F+fdmvIg~GR^?$N=#!1rvwg*& zt}w_DD8qK3)57%#TCMYWrW}Yto)$v3BV|F5wAHC;CF>`XGX_ft~OL5vW=4tS88Tglx(n zX@Gyi+nj}69$wF7=e+aHJ7sq!76tF!vdi@*Zy~$JWjFXfw0D!Q-19EEb*q$HtT*;< ztmk_-b+^6uhiPQtGthfWF79a&{sa5eQ3U%}nD8U`0${CtTwd#MRT2(*mcx-o5Z}Qp zVi@}i<-DHIaDf!_T}NCa$F>H^!pKL#h!3$nyVMr*<=dKONx|ASJLa&qjpK40%||U9 zR?i07MD0mB=s<$nf?Bnpu?5$UNVu=YfLnLNHE$b_2~IOMd%`DZ>IO}pQ?5ZgDhVgS zUvfOo4Yz)0*0#xI)x9AhYYH_i zC2OD0;n<-`uvMMHcNL&ZUjTL>JxndzSo$l)feydI3^4y?sdca{4r{aAGXFA~v-S_?O ztwz-UAa>tC(bgcVWA#+H&No$0-hUN@KWScOH*Hyljmzsxp=Iyg5Vx6qw!cl-^Mj?f zsPAsu)NGU%k^?lHVAeg?B^DoEmt1^c9jQ}@XZXT?(1CwE%ztGMIQ_K-jJ zfc&w-zGA&rxb;OkSn)1Dw3nD~dC$Epcw<~Ad+y~yJ?_+@Jsu-blh6>v-nru?cp6Pt>oe_M;SnDaC7XiLfCreV~8Ox#UPc*fR_G*9DG ziaTi}U&Ro|@cAkhFATIk%VQOE;0HhA`Lmt|TZ5W~`$2skaO4Ex=b3d2-AYJ5&lKF; zUafqOXV?DWt;pJ-taVxygS_^f=cIEbf7eZ3+80isAu(#=te4fAG#JKB1*U`xwG=?D z>s>!dQ{Fg5k?V)!%wmtPk=@geT!NaZ+fXy9A(D?%2DOyeT=BjZr<`ZK#(1}f<6g?G zExXJ41eMqFiVZY-LDLEPz_DPBJqCP^Q(E(q-J8UxpnQnh`yj48o|Lv=0j7BD6wdo7 zv*x46;wmFAQzPCK#S(>ZBX+tPvH*Fwa`2E1u^RBHu5U^1h11$8#)dnM}dAV^O6_&RKQE?D&6C7W5+oDy2;RnA!k81h>$Z6#M?npC4R+6Y6K)+(SF+FDiyXr9EabBu^8AmtOrOuL z!81KWv>N}Yh5K?gKSVS6ffnx15!gobY5F%!*Bc#okS;yzlH1-zVpPQ*#n^ULOJewDJG{+2qe54}$v%VN!SkEbP<&tG4T_qDvg zmUlvaRroUEMcO~#D(t11?}cXgL(5KoxW1mR8H8`d5*yMdysU02ftX!?E>vERlifE& z?|WxMtBH-!yccJH0?Bv*P4u(1yf)2xsg~1#FQ6na-#mP4CgBa`3SKAP>&S;Q2IgF| zw$@e9nqCJikq+s=2MqObro4jYu`h2K?IJx^Np!r#V z`B|urP=~Rnk5ls8RhmPNnq!KXXT&mdjdaVXqZz-Oa&vxnlb_*Hvz22WJBW~B$Hd+4GVqnZYt+Z(mf!~FKdJ*yr4bZq@} zOU`@7y&1=uJAMWm_FNBY0mgF+{Nt~JOodOKfiEDw^ZDlJ+D3DHaijS;&GDbO{0-VB zV%P^CVrmw6T&CQbr)4$1;apzx{A3#A{93AI#$!ism4fe*!aS_5oFAq-S`_^i&_uvd|5 zJnN~}z3S`k{o!83v(${f6gqTEe)+Ps3a zmHY`G_d^|H=lX!~LC6w}6-I>b?ev|&^-qusy-w)8PB(Lz_Z)Ir;TNU#MjBqrz+XtU zp|9+nJx819F@R@Bu4&eAPGCOPqQjSLbLf>*=#^179)R;cJ+ueB1?yX}{vr5Q-GE<2 z*3KdJN8#)^)4@Jx`lNlr4m<7kg;Ck_z;==RC^6V!VQmyXyV&CLp64;toK2jUwr8+! zp>;ck*IVfn;)nM;(+Njt9=(aVe#P?%Vw1TdSbLiL4c3Oep&hk3L{sQ%_?m2f3^k6Q zS@)w}jq?13+9l4w0oX!yCGtxV?i$I%GDElJ_(dZxL(i}=Xaw!(?OX|m&=vL*l(qgH(EMAmZw+%<;N)Pt-1?C!4vThU8DbV`UXO=WW}AC4bTF5 zHTblJ&%@_y#Jo?=+x&4_#`%)Ne}SBxO|DVa*WX^xa9-6KST^}0m1ke1+y}n)>$AQe zAr4dfNqrajq+_ zzTXv1FLv3}YFDKABDwH%7kynWRdqYlsV;t&g?yd$%r4H{pn>x&Y+CU`p|>!V|LfZ|E$q)KF_5VYe28f zRs?;>0JycDF3UanaNV8yv?exprY$q~I4x|PB%2BwKz86+K-cc{->r#lTy`_)u$+34 zmQx#@^UzJ%pQQ4}oN{Bs-}&IWtdIAm&p}r7nZA#O4bgYD^H|UL4%1)uQM-uCzQcgw zW_uRBE1LxzvF)P(OOSSEUMd#)^8Z_U(<2?lU`OB$$ z)^cjG(^Wjv5i8#9m`{;K^cmXhbpyu%zv^(M7dyhLlQQ@$6r%(@E9#lJE1HIUA14TR zF1YLW&V|Ih#_xTYo6os?vmIQ{W$ysKEnse`Ggbv1wLnL$*jp=P32`4$iU(-^gN&6_ z-2cK?rqmcUrJ;9~+2Qvc@YN0-_c#<_oxQlrnZo@H;J_E~cEH;K?*P0*z;9gH3%@MHGSA(`nE-cPX6;TQ)^ zxeq>fm2jR_Qja0eK8Bb8EkAhaA(l;n7Gh+G`H`6u%D$?&bxWnId|VFTl^vf#2K&J*)eXw`*7y5L6M5g-SyIuP z6nSr={wH>Vzu1+F{z}S9#ZHv6;Oi#9BT}P(qrUk@3&o2yel~6}vqX4%> zrV;`@rnu8Dbj8$x4mbA7_lNZk1$K$1$FRSWeu^5?m?u6~$*HRFk3P#(1^poGS(^O{O>LmxL#>@k;f`Uhr?U*dy2pJC z>&qLHWa^{5@hw{2_*JJ_uLk2Ubnf&!>~~)_y(n~yyDE`CGU`|9mcc)h{wjQLQRp6Z zygLY=`#6nr7}QpV%%)G4i?43woO0z=8itPc@e)j1f^)t}nK3lKP;motc$JAw$MspVQq<1+tKf%aSV=o2M&%-6i-o*W-@)Px<`yVsU8@G4O|c(V1Rs z-^&+w`AJHgb4AUJ;GC-?A34*N5c)w^R!vwI;BV-=EPNjR-xe)aTnu$-IlWOkkD63g z(fd@2$_>Qi0`iV6fSyUc(QQA4`|SYtUxhhOZPZ3ieS|u)^mqf^c%1vsfm8CVr37&H z2R`SqORkM)(Hk)#SJokFq9>?}?>8K`q>hH(m=JMfA#sE-L@al}$$<)KF)mkB*z)hY>u6cT|3dmZTd~Z2P}pbgtg#*@2OG35L%vn4Usl(< zl^frn@P|&?+{joXAHG4Sx!>#fUM0XB(;pVQW=^FJ=K=$Vmji+B)l(aXR|0nrE6+G7 zjL+1~C=H+D-|KOF+>N1+)B{vAdBj`F{0*oA*z$zz?>XxvZKH>s5V6R8{Y6t)k?Wqj|_ z4Udz>nrM0re)T5hD`UHJ!46!0?^NCx+P3@Lx6!kHgxEzb*?1H2{EwnOy43-kKZ`#b z;=KWUyqtu>SmyD-T-Z|~P@{-I0f72FC{~uST_-DI(k?&jR>5uFiG^|eb@7i|uc;U*Q z?Z`_{p>HT6ju5{%``gpVpQ?-vJN6@T6PGV-%rGjF5>$Z_4nP@03(@?PC||c=%#=Fhw0w<0=h*`mmZ?KE5G{1J+YBr&6)=P zH1jCx2-nY64J+b1M5Bg@eZUvx9`R#DBd3;k;QWF7D(*IrBWk!Eku&U0HQL7gV;WCg zrCs+V625G}m%k7mt^A(bvt}93o%bwT@r(VKv<%zVEW-zO;&M3e!(*uHQG@d>hVQLc0h zqYIbE`6QS8%B7c$!N|AeVC39YIhYtRHg$gN1vzuoL>?Un4!$g>OD|83OE9)Dg0-DZLIn1X(63hL)Ab0*Zl9Vo|Zs% zK@-4{$&r_zlEg+vMn zq}lN6N;;ZOrUs+W9~~SROqeTLO;Y{FfE?z)FC|P44jk_>(Z8+~cT*GxQfKvkv$&E}v(nkgnX ziG6WvCFSE8k_=g|fqm$*xeT1SQ^t-NDEH6Gi6kg+K=K*+jNw^>_w$#o!n;PtxQ2xT zm=gmdS0@b`sP{s}9F!P?+Ic*UOkCmW+iTKlSRybv zS3yV4Q}yTn{^UzPeEoM%SGynikN@^N<+Z1UJ}w~4g(jj(iP4h zk>n2@8bG_q86}d*;}SNp6`w#=85X#^Ac?1o}(TMd8d7ldqx_a1VkZ zgi*|~naMG~g>dv$6b0_jM+U-2`{i`cU@CQNE1g9RUiyeJU{M*GUnXPA5d)x|GzSPe z?kcHc&!%>zQf)^1Dvu#tbByt_W#+ctSI4&O|IZ}C zg&kACK|7s?6Nc)l-#*%_fCwBNoo6f4Mr#5 zFf{P~8=A->MhI*tj>%VEhsa!yR}lVO^s6ICJ(n*{jv?`IaW9@9f5jk2Up2^4pC()% zIk@){GCJSG;lqaxA2uuRe>Z}Wz9#M2*E4w1Ai|Dstqt=C;mHkjFg8ja-*UU;9eU!Q zV)LR695KrTOUN938JXWu=QE~QFB^liFPbwcX?d9ROFT&VMjykc8=oqwc?J)=g8%8G z=;R73mPlArvSD3`Wil4Gd?&mUf6pqKQdV>&S5mBlco+Cs%i;Vz8`cPLngM(ZAGG*; z8FcLyU0GGGS^4@hXz}+Iyswrr7P|#9SRlg@OO^YYQpM-rS29-n5lx94(G@Xoxn_wR z0ly=V=i0TZ!E2c+K3{85s*XWtSqtO?&EaeKwdXaxYDl|g4N^5bW?{QvQ4Z5HRs0(| zu?{@S;IX~VQpHc*V%-iHUsq4pu#Q*{Xg+UY3f3#rw{`3AHB#Qjc=@(gHIL`>kVka! z(64ae2iw5UO#it5G*E}`cvh86szDMNG&Pj1W=%5XS;w_;v#XULet*S$KvR@A)=aBMQ8@Skf| zE368*mbZaF4E(_i6Gq1z=o@q3gR$j3yw3w?2G14na$d_Q(Ibi_hv$11W*wqy)%-e( zkLwx6RD&_W5M0@O9(;8RaQ5S;Qwrlh=V;I@jQ?B{uxi^;y}FKR;!3Rd=X&+&qqqVf zV!hT<_2v-<9%Lgcu70dk#jLDKw_;6Csk*mE=Wwf7t5-?>To#}iJcT1bF0nrLy>Qjr zRm_Rky2`t>3qUu7w+!r}1ih#NQWo_g|5j?wP*hDfEc^ zfb&4-zN@)MAI8(>9^E$Q;>JgLQu&f{NI9rHrG%7rrA28~8k8=~yA_wx!LfG!_2MOo zkA+-^@OT?yFOx>An$BHFnPHmp7h)d&i%ZwwN+6^t^lw-dgLxI0lvcwf>oj6FmkGm! zN`~Ley{9l`rBs6ZDB>6Ra03e=Hlnw~)@jRaTE^3M^tPq 0 then if data.doLogs and data.time ~= nil then - text(data.nv and 187 or 340, 0, data.time, WARNING_COLOR) + text(data.nv and 184 or 340, 0, data.time, WARNING_COLOR) else lcd.drawTimer(data.nv and 202 or 340, 0, data.timer) end @@ -109,6 +109,16 @@ data.t6_id = not data.nv and getFieldInfo("trim-t6").id or nil data.lastevt = 0 data.lastt6 = nil +-- Remove spaces from front of modes to center (if center works on Taranis this can be removed) +for i = 1, #modes do + if modes[i].f == 0 then + if string.sub(modes[i].t, 1, 1) == " " then + modes[i].t = string.sub(modes[i].t, 2) + end + end +end + +-- Make sure widget is full screen if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then data.widget = true if iNavZone.zone.w < (data.nv and 280 or 450) or iNavZone.zone.h < (data.nv and 450 or 250) then diff --git a/src/iNav/func_t.lua b/src/iNav/func_t.lua index f70239de..966ad020 100644 --- a/src/iNav/func_t.lua +++ b/src/iNav/func_t.lua @@ -1,4 +1,4 @@ -local config, data, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... +local config, data, modes, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... local function title() fill(0, 0, LCD_W, 8, FORCE) diff --git a/src/iNav/horus.lua b/src/iNav/horus.lua index 69a08564..b9fa7264 100644 --- a/src/iNav/horus.lua +++ b/src/iNav/horus.lua @@ -18,6 +18,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local BOTTOM = 146 local Y_CNTR = 83 --(TOP + BOTTOM) / 2 local DEGV = 160 + local CENTERED = 4 + --local TINSIZE = 256 + --local VERTICAL = 16384 local tmp, tmp2, top2, bot2, pitch, roll, roll1, upsideDown local bmap = lcd.drawBitmap local color = lcd.setColor @@ -532,7 +535,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end -- Box 3 (flight modes, orientation) - text(X2 + 20, TOP, modes[data.modeId].t, modes[data.modeId].f == 3 and WARNING_COLOR or 0) + --text(X2 + 20, TOP, modes[data.modeId].t, modes[data.modeId].f == 3 and WARNING_COLOR or 0) + tmp = (X2 + X3) * 0.5 + text(tmp + 4, TOP, modes[data.modeId].t, CENTERED + (modes[data.modeId].f == 3 and WARNING_COLOR or 0)) if data.altHold then bmap(icons.lock, X1 + 63, TOP + 4) end @@ -542,12 +547,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.showHead then if data.showDir or data.headingRef == -1 then - text((X2 + X3) * 0.5, TOP + 18, "N", SMLSIZE) + text(tmp, TOP + 18, "N", SMLSIZE) text(X3 - 4, 211, "E", SMLSIZE + RIGHT) text(X2 + 10, 211, "W", SMLSIZE) text(X2 + 78, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) end - local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, (X2 + X3) * 0.5 + 4, 219, 25) + local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, tmp + 4, 219, 25) if data.headingHold then fill((x2 + x3) * 0.5 - 2, (y2 + y3) * 0.5 - 2, 5, 5, SOLID) else diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 575b97b8..8a75f1ce 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -18,6 +18,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic local BOTTOM = 146 local Y_CNTR = 83 --(TOP + BOTTOM) / 2 local DEGV = 160 + local CENTERED = 4 + --local TINSIZE = 256 + --local VERTICAL = 16384 local tmp, tmp2, top2, bot2, pitch, roll, roll1, upsideDown local bmap = lcd.drawBitmap local color = lcd.setColor @@ -552,7 +555,9 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end -- Box 3 (flight modes, orientation) - text(X2 + 20, TOP, modes[data.modeId].t, modes[data.modeId].f == 3 and WARNING_COLOR or 0) + --text(X2 + 20, TOP, modes[data.modeId].t, modes[data.modeId].f == 3 and WARNING_COLOR or 0) + tmp = (X2 + X3) * 0.5 + text(tmp + 4, TOP, modes[data.modeId].t, CENTERED + (modes[data.modeId].f == 3 and WARNING_COLOR or 0)) if data.altHold then bmap(icons.lock, X1 + 63, TOP + 4) end @@ -562,12 +567,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.showHead then if data.showDir or data.headingRef == -1 then - text((X2 + X3) * 0.5, TOP + 18, "N", SMLSIZE) + text(tmp, TOP + 18, "N", SMLSIZE) text(X3 - 4, 421, "E", SMLSIZE + RIGHT) text(X2 + 10, 421, "W", SMLSIZE) text(X2 + 78, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) end - local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, (X2 + X3) * 0.5 + 4, 429, 25) + local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, tmp + 4, 429, 25) if data.headingHold then fill((x2 + x3) * 0.5 - 2, (y2 + y3) * 0.5 - 2, 5, 5, SOLID) else From 7bdc7669f99b73717aa3d748ed9f950ffb486d7f Mon Sep 17 00:00:00 2001 From: teckel12 Date: Tue, 3 Sep 2019 21:59:17 -0400 Subject: [PATCH 19/34] Multiply instead of divide, probably ever so slightly faster --- dist/SCRIPTS/TELEMETRY/iNav/pilot.luac | Bin 10965 -> 10965 bytes dist/SCRIPTS/TELEMETRY/iNav/radar.luac | Bin 8316 -> 8316 bytes src/iNav/func_h.lua | 2 +- src/iNav/pilot.lua | 2 +- src/iNav/radar.lua | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac b/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac index 4863755976cec6f43c9a653567d04ecebc1b77e4..78908520010c651503c8fee0d5e01dfe11399231 100644 GIT binary patch delta 2384 zcmZ`)TWB2T6+W|<`RB5;nptUQb|tNqX6u+bU{g%ff~h^Tl4fQ#mek5|o5Ytqn7ELn zgf`GZAEJK?mPT43*ZH9j74AzO3wbf*A(XH~<=v4-t0X1yi&5K9nmz*9|KXWse;O*((Jh*z4;$QDpdbNp!Ys7nEJRWcYCdGR zY{B0?iiWx^e;6&yK@{fzWXL~|)(mb>;s#7esJF|MNVD*QJ&Q5MDB; zuDPXs)PYQMwoG*@gVB+x0Sf5OeGys;f!a%`I|De~a5lfu7djC;Dm_Kraqp zydzO=8~J&7I3y_w3EaZkx-t7f_KbY!$==S^WwaaWKFE4sOLeYpOH|{Lfq;HU8;nyD zvuAQAzKK?z-`7)~!g*ud7O7*)|-%TgJRL5l1z7<+!iUe2EqcGzbA*?hAB-8J?>zFs}(Fkn~1C3vB; zq+9kVc9?ycUn~s+@%HV-p+3@d*k$p#j6@g{&y`lPfaT#I=zC$WAjpLMRXim$S&5w1 z;;!8C4IDia#3oxH77yyKu~*57(hf4dGhgzs^9#*2;}*icLmI*w`~R4xiq;g;W*(GbR>|;S`RszDPd+M-c$B( zrHsu})QjJLl4pvJY{ySM5uHdEhczpMjJZ8h+LJ!RS!eI6p2j8d*pb9y)qfl|H6Q+2Zb>}$(~rgGy*R3zPeOgDXa6d^j8n3tosp3VP0p4$vNp}< znuM?5&Onjx%t-voU@N81b&9g9C|ivGHrN*F25w<`K^Q4s7aaClaiXGbTDU<}rKF>R zDefZP#(c%yz5CnZn;9o);MXhAS2wKvIhyGxK(yc^#ZfI-NpPi-d8-$=&<`T(P8)>V z!Shy>81U;vwYumlZm=a|O9u|gMy46jtags9TBHAsP*M|(eZ=Nk4 z(3||2)625fIVagRE6_3da67>_jsOD_TEQvkwvq7*gQSPu%8G3piouNO1rNYW*e|VH zLc&TFB=`}m_9IxB=n)ossWOH3zo;zA?HsJCpJB(@A1kjdBhiBhln@oyE}1cnwqsVP zXIdSB9{e^7?IKL@vhffLDjB>3e+ST1RdL!`SiuY<{4W-KaMO0vYQ_r!K)$hg`hKk@=}puMMK|Qy1W=!^-fWAm@1M+IZ>`JauS4evrvO$7`5L zapFh91~VtW&VDm-THBqe^l)Q%FWe3GVB(Ax;Nd`TapNakVosjc5)q;R58J?IY4WUq zLpnKy&vz#;BG%6)>g;%JEI-hntDQHo0|$H4#o_2BeG3PivD(vU{$8yq b``C@4;y=f}m-);2yXU7ygu6d{>Mi9fGPRFG delta 2386 zcmZ`)TWB0*6h5=FJJ+4f%qF|Dn{=Dnr7c!yk>Ul4?d&$0na$)z5G^S9 zVEz@_OfqY0`-2aL`r@PDOTh;b*~MgM(=qXa?MsPT#QGqJi1<)JJpb$_X`vD_JNuvS z|IRtzx$O0$*N?tO4jmqCDUt4m4cn{($>L8yXlS3$Fd zv~#`+$Am84X;&|OxpPK31O=<2nDE(iLg}K%FFsFI*{e7N8 z|KUC@q7Tun>5gB667m+or%Yx}qSq4pIG_HTC_ln5lBdTxxRE~Vdl;7ogH4GrY)eYP z&7MdtUxbU8Tid5k^ZVqDoAfeYmJ!#peZe~qFk5F-wviJkIeH=WP)e>syGFlAm5b{Y2CS+-4bL>Eb<^s{3e!8O zscg>?E8l9z*ZXP?JtjPw=m?Yw2eLK~m>&LtzUqf*Zdsr|3wt=3X2rdl-@h602N|-WDBBp?jp$_`EEg1=PLh8t8jv}u!cN{eApOQ;9n--GTw8yb8LvZ{>{aH)GhD~5QW9u zye%xB#4PW{#bf7I5Hk!dcNq0xO56v-c>G~#N+64KA&7G$S&S^pYD)i7a#%b?J@VxJ zZpQ4Wc4ymt*+uC{FK4A2F~g&zp>zwQrk|*e#!fl|nBp%7aGXdm?+qd zs~=|0CMs$bzaEDbwPCJ}kwjAgQS-i0Dyj+R101Pn!VFa#R=m)>5&(C}d&+D@2D~4s zW*hGc<8<0s;8gm%@z_>1-hifQ@dStVdp5M|9C)7|%I;2eue_cu?+9=O2YnzkTv!_e zzNwHt(R&dly^4Z?aQI!!1oX4){vCm>R6GOf(QaTa#Re|mba$a^<6+uKuYl8_7y7r- z$NRO~MiBQnPqW|`yxv+@%Q2HMUX2s~U&e#-wKjzFi@9&d=#Bngjd|2o`7I})Fk&!~ zw*$I5;9>HExu}Hs9P9B{)EvxuFTL*3g0Z4VVscZ2R#ix&b5GU`a)@os<<(09y>TtKr06!nbVu@rSIHNMlQ)|jS^sV3 zf(#6?v~dx0k;V8`Vqe0vNF8DJq1$L@;3tKdYhLeWz5 zriG*ZdGQI1>rU~_8O&GvN-2~)lIZ@9y987sO-8s(qXB54SMDnv?D3;e@_^r9Wved2 zRTtr^LoJ?V%xu-EC%azRs`GHwVP?2cP;*>$0j|0TR~_O9*CY93u!NChhF;*t=^I03 zeE(o*uhtkTgg7&-8umE7F|9WxsrGZq}exP(Pk2P4IoHn*c7_FGt;*^%QBmC1+xd;8B^pSFxIoNupXZU;T;j2@_ P5|{Yt;MK$1&ME%^#9D9w diff --git a/dist/SCRIPTS/TELEMETRY/iNav/radar.luac b/dist/SCRIPTS/TELEMETRY/iNav/radar.luac index 709a780c8cf04e5ebd2c413ba703f43cc3fd2b62..c38c724e6186dd0afdd2fcf12709b965b937a486 100644 GIT binary patch delta 1538 zcmZuxPiP!f82{ev?t7EX&deq;yV=B~SW5~`r6q*~QfPLv?!4)SG$5ojrm=XiLJwX% z2vx`n!FdU#rtuvFLn?Tv2caHv5WKi+$-J~78?>OcG3wcZM}^XZ-`h=_7Cg+GdEejP z_kF)_o)n)HZwRuyGGCr6IeC#3yJG-(AVN@J+fgY^bOL;qgtY)HBdZ6mx9(bKBR~+D zgdT3}@mnX+E(L-?>b#V$v43heAEaP4Xxhz3DR3j&+KlgKh)w}#0q_yd2*R~H8G}}w7-Q++p2K7XxUN8VQGRS<`O=1& z{n~v=V94Xl4J5~6wp_`_LF2QG*flz_%?j+W#YQc&49FhVfxuugQWfjakbxVGJKI4m zW8hv403leSP^2pj*s%o-8IGk{+PG5>YU&GXjPeakxS>vXWpzB!a&XP5HE%$Dl$b~x zNOH@)&V6-1(NC)CapF}x`;zZJuUbtWOLITN?4N+yWwnz$--eD-bFa!oW=&!fi)tu! zk(885^%J4KOPwM`^>^wJ7TZW5`4pHWJ+wl!x=e>%5h9}!O(q2;^))@;+vv{&H!`vL z1y9R!Ko>c%@Ip3NRDG<6gldG15~;4TfjMI(rwszvAc*m<<(Aj**qqK5ZSZ;*fp|8{ zI-#H4LmNSb_kx}M=KtDN(QccUS_>ernI3zg@AQQGRNl0pj?+>{?Ec=SdNQmzGy7^E z)lO(Px#FPGzahtN7}xmcva^?V0G8mfHndc2Kg3h;l$FTTjA1GbFF|0BHK@eHF_^JUNFpX)aP3u_xlSCz@42HG zndVP+Cg8UKT=UDV1<9w$)p))S^;hzz@w}BkZ3-}}g2~jQd^f4C)2<`L`g2qrFHBib OT)$cf$ok#x_0)g9biD2W delta 1545 zcmZuxPe>eB82{ev?t8QA&djQH*VSrhDh4#gU_ik@+%YII55ygfFL{$ z?OfaAyNsh<90Y^Jw3N2CKeAh-30U)Lc8gvDY@aqn@qITBR)j^C1+!lq%*$t^$AlU`V>*~1hJr2_6Rv2(t_krXEUDbFO zJ@XicPayP*upjJN)qsAy5>V@oH*Q__$E{p})?x(XR)DcW`oLm*0=S%jwu1an$8xy| zv-R3tNnpU?%=S3PVjkF%l_13b3Stk@iIpc{pOvFp<`|GetOJ3;l&2<)Qv({VSF$Sp zURuMw<^e)5M84qHU%#VCpTCV@JL+d+|IldtTA?$zN>Ui;oy}<`7X-tDJE{lvSDURKmwjts2#z93lKLWfx+dCwF8VpSkq<_ZqOR2{a8LccT>)7B{7GZC5$vdM8wV^NJ6=$xjHY)DT$J~l`Z4%M(~7#C^YZh&S1FuGvZI1vjV3T}1xhU1smUdjNY_=~| zE~O>zlEm;++3o?BfFo8SQ`4HMw0Ipnb0ne?FOI;hsY4PmdBU|r?PgnW48LX1U}Ty* z*FxY|4{ZI(-KO!Q Date: Tue, 10 Sep 2019 15:04:27 -0400 Subject: [PATCH 20/34] Updated readme to include FLYSKY Nirvana support, removed XM and XM+ from compatible receiver list --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4e301536..b6728c4e 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -## INAV Lua Telemetry Flight Status for Taranis/Horus/Jumper T16 - v1.7.3 +## INAV Lua Telemetry Flight Status for Taranis/Horus/Jumper T16/FLYSKY Nirvana - v1.7.3 -### FrSky SmartPort(S.Port), D-series, F.Port & TBS Crossfire telemetry on Taranis, Horus & Jumper T16 transmitters +### FrSky SmartPort(S.Port), D-series, F.Port & TBS Crossfire telemetry on Taranis, Horus, Jumper T16 & FLYSKY Nirvana transmitters [![Build Status](https://travis-ci.com/iNavFlight/LuaTelemetry.svg?branch=master)](https://travis-ci.com/iNavFlight/LuaTelemetry) ## Interface -#### [Video of Lua Telemetry](https://youtu.be/YaUgywuT1YM) +#### [Video of Lua Telemetry running on X9D+](https://youtu.be/YaUgywuT1YM) #### Horus/Jumper T16 view @@ -41,7 +41,7 @@ * Pilot (glass cockpit) view which includes attitude indicator as well as pilot-familiar layout of additional data * Radar (map) view shows model in relationship to home position, can be displayed either as launch/pilot-based or compass-based orientation * Altitude graph view shows altitude for the last 1-6 minutes -* Horus and Jumper T16 transmitters show all views at the same time, and include additional features like roll scale +* Horus, Jumper T16 & FLYSKY Nirvana NV14 transmitters show all views at the same time, and include additional features like roll scale * Bar gauges for Fuel (% battery mAh capacity remaining), Battery voltage, RSSI strength, Transmitter battery, GPS accuracy (HDOP), Variometer (and Altitude for X9D, X9D+ and X9E transmitters) * Display and voice alerts for flight modes and flight mode modifiers (altitude hold, heading hold, home reset, etc.) * Voice notifications for % battery remaining (based on current), voltage low/critical, high altitude, lost GPS, ready to arm, armed, disarmed, etc. @@ -58,8 +58,7 @@ * [OpenTX v2.2.2+](http://www.open-tx.org/) running on Taranis Q X7/Q X7S, X9D/X9D+, X9E, X9 Lite, X-Lite/X-Lite Pro, Horus X10/X10S or X12S (OpenTX v2.2.3+ is suggested) * Jumper T16 requires [JumperTX 2.2.3+](https://www.jumper.xyz/jumpertx-t16) (May 23, 2019 or after release) -* The OpenTX/JumperTX firmware on your transmitter needs to [includes the `luac` build option](https://youtu.be/nYeB0IXT-10?t=283) -* FrSky X, R9 or D series telemetry receiver: X4RSB, X8R, XSR, R-XSR, XSR-M, XSR-E, RX4R, RX6R, XM, XM+, R9, R9 Slim, R9 Slim+, R9 Mini, R9 MM, D8R-II plus, D8R-XP, D4R-II, etc. or any TBS Crossfire receiver: Micro, Nano, Diversity, etc. +* FrSky X, R9 or D series telemetry receiver: X4RSB, X8R, XSR, R-XSR, XSR-M, XSR-E, RX4R, RX6R, R9, R9 Slim, R9 Slim+, R9 Mini, R9 MM, D8R-II plus, D8R-XP, D4R-II, etc. or any TBS Crossfire receiver: Micro, Nano, Diversity, etc. * [INAV v1.7.3+](https://github.com/iNavFlight/inav/releases) running on your flight controller (INAV v2.1.0+ is suggested for full functionality) - Also compatible with Betaflight (with reduced functionality) * GPS - If you're looking for a GPS module, I suggest the [Beitian BN-880](https://www.banggood.com/UBLOX-NEO-M8N-BN-880-Flight-Control-GPS-Module-Dual-Module-Compass-p-971082.html) @@ -85,6 +84,7 @@ * [Team Black Sheep](https://www.team-blacksheep.com/) - Sponsoring TBS Crossfire telemetry support * [FrSky](https://www.frsky-rc.com/) - Sponsoring Horus transmitter support * [Jumper](https://www.jumper.xyz/) - Sponsoring Jumper T16 transmitter support +* [FLYSKY](https://www.flysky-cn.com/) - Sponsoring FLYSKY Nirvana NV14 transmitter support ## Setup From 995b7dca331d94098ea137f3141995ef65c94d6e Mon Sep 17 00:00:00 2001 From: Tim Eckel Date: Wed, 11 Sep 2019 11:42:45 -0400 Subject: [PATCH 21/34] Updates to issue templates --- .github/ISSUE_TEMPLATE/Bug_report.md | 10 +++++----- .github/ISSUE_TEMPLATE/Feature_request.md | 8 ++++---- .github/ISSUE_TEMPLATE/Question.md | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md index d55a7885..9e9802c1 100644 --- a/.github/ISSUE_TEMPLATE/Bug_report.md +++ b/.github/ISSUE_TEMPLATE/Bug_report.md @@ -7,20 +7,20 @@ assignees: teckel12 --- ### Describe the bug - + ### To reproduce - + 1. Go to '....' 2. Click on '....' 3. Scroll down to '....' 4. See error ### Expected behavior - + ### Screenshots - + ### Radio and model settings ### Additional context - + diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md index d5ee5e13..aa2968a7 100644 --- a/.github/ISSUE_TEMPLATE/Feature_request.md +++ b/.github/ISSUE_TEMPLATE/Feature_request.md @@ -7,13 +7,13 @@ assignees: teckel12 --- ### Is your feature request related to a problem? Please describe - + ### Describe the solution you'd like - + ### Describe alternatives you've considered - + ### Additional context - + diff --git a/.github/ISSUE_TEMPLATE/Question.md b/.github/ISSUE_TEMPLATE/Question.md index f66dcb48..d50ec8c4 100644 --- a/.github/ISSUE_TEMPLATE/Question.md +++ b/.github/ISSUE_TEMPLATE/Question.md @@ -7,20 +7,20 @@ assignees: teckel12 --- ### Describe your question - + ### To reproduce - + 1. Go to '....' 2. Click on '....' 3. Scroll down to '....' 4. Should it be doing this? ### Expected behavior - + ### Screenshots - + ### Additional context - + From ac760c552b31a98123b4cadd38c5f7e8f959c3b7 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Wed, 18 Sep 2019 19:19:29 -0400 Subject: [PATCH 22/34] Better centering of text on Horus, compass table (dir) --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11344 -> 11354 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11344 -> 11354 bytes dist/SCRIPTS/TELEMETRY/iNav/alt.luac | Bin 7992 -> 7985 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7705 -> 7749 bytes dist/SCRIPTS/TELEMETRY/iNav/func_t.luac | Bin 3474 -> 3475 bytes dist/SCRIPTS/TELEMETRY/iNav/horus.luac | Bin 15488 -> 15194 bytes dist/SCRIPTS/TELEMETRY/iNav/modes.luac | Bin 879 -> 983 bytes dist/SCRIPTS/TELEMETRY/iNav/nirvana.luac | Bin 14774 -> 14492 bytes dist/SCRIPTS/TELEMETRY/iNav/pilot.luac | Bin 10965 -> 10742 bytes dist/SCRIPTS/TELEMETRY/iNav/radar.luac | Bin 8316 -> 8309 bytes dist/SCRIPTS/TELEMETRY/iNav/view.luac | Bin 6681 -> 6679 bytes src/iNav.lua | 6 ++--- src/iNav/alt.lua | 4 ++-- src/iNav/build.lua | 6 ++--- src/iNav/func_h.lua | 15 ++++++++----- src/iNav/func_t.lua | 4 ++-- src/iNav/horus.lua | 27 ++++++++++------------- src/iNav/modes.lua | 4 +++- src/iNav/nirvana.lua | 27 ++++++++++------------- src/iNav/pilot.lua | 9 +++++++- src/iNav/radar.lua | 6 ++--- src/iNav/view.lua | 16 +++++++------- 22 files changed, 65 insertions(+), 59 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index d957e548063f9b7a37a168f4464fa85d5752cd51..40d143ac57bc9d0e500d86810d25226e6ee759ea 100644 GIT binary patch delta 773 zcmZutJx^0n7=E5}@427S7Q_|={K8U-B>EGM!o7S=ZX~25tMMQ38ZAK@6Otw_hB!Gn zkvh0}O>6^BP7WrF4*CO(qi>@U6PeEQo^#&k>(l0!&4X!k`|Z&cpF7LsuFY_m33jt( z6c)n^xIpaZY&S&!d)O8hRszML-iM0Jp?z%fC_`&ikgqO7BJlmO1!A$!qjlk*REu3l#18o8Nes?Xz6oFx| zM^8h%SW^teCm{-Lr+N~PIW>N&?I7NgNQWVLtd9wl*d>}QL8(Zjq{Wq8DrHGgIo)Fr zBpGJb1@#2jUI$+717AM^^_1A&AUYjje7-Py;i{0PC=iQ@nPKN1iXKVX3DV#lHdOOcg|mVbb9BXHydp+vGo zmy#MG3qi*sVJkpGMS(<_f|d$VaW|j{iD-&BGjr$M^WCq#&%ONxb?x=bMVB^RqD05& z$BZOi1#8f|fd)L*&$Jh%8oEDVV$GgtU+#VDLG|?`B*s-I(%Xlc&C^l6k{=CgAioHtO*<_ z6#ox%+J80@g8r%9{F6NJPiZE(kCSsK%_19eB#KgL3L|8ORqYUZTc&UzQ`nX%WR%qL zQ6(S)yRqYAy(1c;KltE~^_St!jQHsTnNAwq6P}Qbl@{`tnUk33tU;a)=Tn0MA}$;Z zxAZiO@vXx+3W53>aDNwg{t-AbgnF0IeFCgS(f-<}-TjU6FV$648YlWew!QM-)~Y3d zE|8`b3Q18!hGys@%~6G#qrLi~D$R~x)F0DLUg3l%=-Di|!$~?p;`~IRpdBv6 z4*LTK!Ng&uT@GUx#eoYmaoK2%sBd8s`yPGEh{472kL91#UV_kML|4cq|1XaxM6(po nB|1lCa)h-ad{t`DBAussAwNTB=`z)+Max9AKue?RR~x?pD9@kx diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index d957e548063f9b7a37a168f4464fa85d5752cd51..40d143ac57bc9d0e500d86810d25226e6ee759ea 100644 GIT binary patch delta 773 zcmZutJx^0n7=E5}@427S7Q_|={K8U-B>EGM!o7S=ZX~25tMMQ38ZAK@6Otw_hB!Gn zkvh0}O>6^BP7WrF4*CO(qi>@U6PeEQo^#&k>(l0!&4X!k`|Z&cpF7LsuFY_m33jt( z6c)n^xIpaZY&S&!d)O8hRszML-iM0Jp?z%fC_`&ikgqO7BJlmO1!A$!qjlk*REu3l#18o8Nes?Xz6oFx| zM^8h%SW^teCm{-Lr+N~PIW>N&?I7NgNQWVLtd9wl*d>}QL8(Zjq{Wq8DrHGgIo)Fr zBpGJb1@#2jUI$+717AM^^_1A&AUYjje7-Py;i{0PC=iQ@nPKN1iXKVX3DV#lHdOOcg|mVbb9BXHydp+vGo zmy#MG3qi*sVJkpGMS(<_f|d$VaW|j{iD-&BGjr$M^WCq#&%ONxb?x=bMVB^RqD05& z$BZOi1#8f|fd)L*&$Jh%8oEDVV$GgtU+#VDLG|?`B*s-I(%Xlc&C^l6k{=CgAioHtO*<_ z6#ox%+J80@g8r%9{F6NJPiZE(kCSsK%_19eB#KgL3L|8ORqYUZTc&UzQ`nX%WR%qL zQ6(S)yRqYAy(1c;KltE~^_St!jQHsTnNAwq6P}Qbl@{`tnUk33tU;a)=Tn0MA}$;Z zxAZiO@vXx+3W53>aDNwg{t-AbgnF0IeFCgS(f-<}-TjU6FV$648YlWew!QM-)~Y3d zE|8`b3Q18!hGys@%~6G#qrLi~D$R~x)F0DLUg3l%=-Di|!$~?p;`~IRpdBv6 z4*LTK!Ng&uT@GUx#eoYmaoK2%sBd8s`yPGEh{472kL91#UV_kML|4cq|1XaxM6(po nB|1lCa)h-ad{t`DBAussAwNTB=`z)+Max9AKue?RR~x?pD9@kx diff --git a/dist/SCRIPTS/TELEMETRY/iNav/alt.luac b/dist/SCRIPTS/TELEMETRY/iNav/alt.luac index 09e446c67e07e001b92414ef6e0db8bc286c9a0a..2deec7b8ae8d3e43ffc3a5312c4d58cf3215d413 100644 GIT binary patch literal 7985 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 literal 15488 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 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/modes.luac b/dist/SCRIPTS/TELEMETRY/iNav/modes.luac index 7c082957bf900982dc3c07862826311bdacd8dda..a0e9212b9ba429aacf068798b25755164d73f179 100644 GIT binary patch delta 170 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 literal 14774 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 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac b/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac index 78908520010c651503c8fee0d5e01dfe11399231..07b31ddd0d56a4067685ddda37a2a0e848fff6bc 100644 GIT binary patch literal 10742 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 DopWJ4 literal 10965 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 literal 8316 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 Tm@@x0Ko45}iT~3;%Ow358}WgN diff --git a/dist/SCRIPTS/TELEMETRY/iNav/view.luac b/dist/SCRIPTS/TELEMETRY/iNav/view.luac index 8543a27cdf4f3fadbc9b266b2f3fc477a45ccf73..8f86bb2e2e8a7e78fcf3708db3874cd9c450d22c 100644 GIT binary patch literal 6679 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 GU-=8{AXB*j literal 6681 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 J%(Kt0{2%V|r+xqc diff --git a/src/iNav.lua b/src/iNav.lua index f1ea24b5..ec61160f 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -24,7 +24,7 @@ end local config = loadScript(FILE_PATH .. "config" .. ext, env)(SMLCD) collectgarbage() -local modes, units, labels = loadScript(FILE_PATH .. "modes" .. ext, env)(HORUS) +local modes, units, labels, dir = loadScript(FILE_PATH .. "modes" .. ext, env)(HORUS) collectgarbage() local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, text, line, rect, fill, frmt = loadScript(FILE_PATH .. "data" .. ext, env)(r, m, i, HORUS) @@ -49,7 +49,7 @@ collectgarbage() local crsf, distCalc = loadScript(FILE_PATH .. "other" .. ext, env)(config, data, units, getTelemetryId, getTelemetryUnit, FILE_PATH, env, SMLCD, FLASH) collectgarbage() -local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_" .. (HORUS and "h" or "t") .. ext, env)(config, data, modes, SMLCD, FILE_PATH, text, line, rect, fill, frmt) +local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_" .. (HORUS and "h" or "t") .. ext, env)(config, data, modes, dir, SMLCD, FILE_PATH, text, line, rect, fill, frmt) collectgarbage() local function playAudio(f, a) @@ -523,7 +523,7 @@ local function run(event) view = loadScript(FILE_PATH .. (HORUS and (data.nv and "nirvana" or "horus") or (config[25].v == 0 and "view" or (config[25].v == 1 and "pilot" or (config[25].v == 2 and "radar" or "alt")))) .. ext, env)() data.v = config[25].v end - view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) + view(data, config, modes, dir, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) end collectgarbage() diff --git a/src/iNav/alt.lua b/src/iNav/alt.lua index d92713d1..e66e5064 100644 --- a/src/iNav/alt.lua +++ b/src/iNav/alt.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) +local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local LEFT_DIV = 36 local LEFT_POS = SMLCD and LEFT_DIV or 73 local RIGHT_POS = SMLCD and LCD_W - 31 or LCD_W - 53 @@ -82,7 +82,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic -- Orientation if not SMLCD and data.telem then if data.showDir or data.headingRef == -1 then - text(LEFT_POS + 12, 29, "N", SMLSIZE) + text(LEFT_POS + 12, 29, dir[0], SMLSIZE) text(LEFT_POS + 25 - (data.heading < 100 and 3 or 0) - (data.heading < 10 and 3 or 0), 57, math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) tmp = data.heading else diff --git a/src/iNav/build.lua b/src/iNav/build.lua index a8a2c819..e956436a 100644 --- a/src/iNav/build.lua +++ b/src/iNav/build.lua @@ -12,13 +12,13 @@ print("--------------------- COMPILE SCRIPTS ---------------------") print("") local config = loadScript(FILE_PATH .. "config", env)(SMLCD) -local modes, units, labels = loadScript(FILE_PATH .. "modes", env)(HORUS) +local modes, units, labels, dir = loadScript(FILE_PATH .. "modes", env)(HORUS) local data, getTelemetryId, getTelemetryUnit, PREV, NEXT, MENU, text, line, rect, fill, frmt = loadScript(FILE_PATH .. "data", env)(r, m, i, HORUS) loadScript(FILE_PATH .. "load", env)(config, data, FILE_PATH) if HORUS then - local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_h", env)(config, data, modes, SMLCD, FILE_PATH, text, line, rect, fill) + local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_h", env)(config, data, modes, dir, SMLCD, FILE_PATH, text, line, rect, fill) end -local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_t", env)(config, data, modes, SMLCD, FILE_PATH, text, line, rect, fill) +local title, gpsDegMin, hdopGraph, icons, rect = loadScript(FILE_PATH .. "func_t", env)(config, data, modes, dir, SMLCD, FILE_PATH, text, line, rect, fill) data.lang = "en" data.voice = "en" diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index d57a041a..7860290c 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -1,4 +1,4 @@ -local config, data, modes, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... +local config, data, modes, dir, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... local function title() local color = lcd.setColor @@ -59,9 +59,11 @@ local function title() end --[[ Show FPS ]] - data.frames = data.frames + 1 - text(data.nv and 115 or 180, 0, frmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) - text(data.nv and 75 or 130, 0, frmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) + if data.nv then + data.frames = data.frames + 1 + text(data.nv and 115 or 180, 0, frmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) + text(data.nv and 75 or 130, 0, frmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) + end -- Reset colors color(WARNING_COLOR, YELLOW) @@ -77,7 +79,7 @@ end local function gpsDegMin(c, lat) local gpsD = math.floor(math.abs(c)) local gpsM = math.floor((math.abs(c) - gpsD) * 60) - return frmt(data.nv and "%d\64%d'%04.1f\"" or "%d\64%d'%05.2f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) + return frmt(data.nv and "%d\64%d'%04.1f\"" or "%d\64%d'%05.2f\"", gpsD, gpsM, ((math.abs(c) - gpsD) * 60 - gpsM) * 60) .. (lat and (c >= 0 and dir[0] or dir[4]) or (c >= 0 and dir[2] or dir[6])) end local function hdopGraph(x, y) @@ -112,11 +114,12 @@ data.lastt6 = nil -- Remove spaces from front of modes to center for i = 1, #modes do if modes[i].f == 0 then - if string.sub(modes[i].t, 1, 1) == " " then + while string.sub(modes[i].t, 1, 1) == " " do modes[i].t = string.sub(modes[i].t, 2) end end end +modes[4].t = "ACRO" -- Make sure widget is full screen if type(iNavZone) == "table" and type(iNavZone.zone) ~= "nil" then diff --git a/src/iNav/func_t.lua b/src/iNav/func_t.lua index 966ad020..eaa8b14c 100644 --- a/src/iNav/func_t.lua +++ b/src/iNav/func_t.lua @@ -1,4 +1,4 @@ -local config, data, modes, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... +local config, data, modes, dir, SMLCD, FILE_PATH, text, line, rect, fill, frmt = ... local function title() fill(0, 0, LCD_W, 8, FORCE) @@ -34,7 +34,7 @@ end local function gpsDegMin(c, lat) local gpsD = math.floor(math.abs(c)) - return gpsD .. frmt("\64%05.2f", (math.abs(c) - gpsD) * 60) .. (lat and (c >= 0 and "N" or "S") or (c >= 0 and "E" or "W")) + return gpsD .. frmt("\64%05.2f", (math.abs(c) - gpsD) * 60) .. (lat and (c >= 0 and dir[0] or dir[4]) or (c >= 0 and dir[2] or dir[6])) end local function hdopGraph(x, y, s, SMLCD) diff --git a/src/iNav/horus.lua b/src/iNav/horus.lua index b9fa7264..718de7a7 100644 --- a/src/iNav/horus.lua +++ b/src/iNav/horus.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) +local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local rgb = lcd.RGB local SKY = 982 --rgb(0, 121, 180) @@ -262,10 +262,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic for i = 0, 348.75, 11.25 do tmp = floor(((i - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 2.5) if tmp >= 9 and tmp <= RIGHT_POS - 12 then - if i % 90 == 0 then - text(tmp - (i < 270 and 3 or 5), bot2, i == 0 and "N" or (i == 90 and "E" or (i == 180 and "S" or "W")), SMLSIZE) - elseif i % 45 == 0 then - text(tmp - (i < 225 and 7 or 9), bot2, i == 45 and "NE" or (i == 135 and "SE" or (i == 225 and "SW" or "NW")), SMLSIZE) + if i % 45 == 0 then + text(tmp, bot2, dir[i / 45], CENTERED + SMLSIZE) else line(tmp, BOTTOM - 4, tmp, BOTTOM - 1, SOLID, 0) end @@ -389,8 +387,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.startup == 0 then -- Launch/north-based orientation if data.showDir or data.headingRef == -1 then - text(LEFT_POS + 2, Y_CNTR - 9, "W", SMLSIZE) - text(RIGHT_POS, Y_CNTR - 9, "E", SMLSIZE + RIGHT) + text(LEFT_POS + 2, Y_CNTR - 9, dir[6], SMLSIZE) + text(RIGHT_POS, Y_CNTR - 9, dir[2], SMLSIZE + RIGHT) end local cx, cy, d @@ -535,9 +533,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end -- Box 3 (flight modes, orientation) - --text(X2 + 20, TOP, modes[data.modeId].t, modes[data.modeId].f == 3 and WARNING_COLOR or 0) - tmp = (X2 + X3) * 0.5 - text(tmp + 4, TOP, modes[data.modeId].t, CENTERED + (modes[data.modeId].f == 3 and WARNING_COLOR or 0)) + tmp = (X2 + X3) * 0.5 + 4 + text(tmp, TOP, modes[data.modeId].t, CENTERED + (modes[data.modeId].f == 3 and WARNING_COLOR or 0)) if data.altHold then bmap(icons.lock, X1 + 63, TOP + 4) end @@ -547,12 +544,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.showHead then if data.showDir or data.headingRef == -1 then - text(tmp, TOP + 18, "N", SMLSIZE) - text(X3 - 4, 211, "E", SMLSIZE + RIGHT) - text(X2 + 10, 211, "W", SMLSIZE) - text(X2 + 78, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) + text(tmp, TOP + 18, dir[0], CENTERED + SMLSIZE) + text(X3 - 4, 211, dir[2], SMLSIZE + RIGHT) + text(X2 + 10, 211, dir[6], SMLSIZE) + text(tmp + 4, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", CENTERED + SMLSIZE + data.telemFlags) end - local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, tmp + 4, 219, 25) + local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, tmp, 219, 25) if data.headingHold then fill((x2 + x3) * 0.5 - 2, (y2 + y3) * 0.5 - 2, 5, 5, SOLID) else diff --git a/src/iNav/modes.lua b/src/iNav/modes.lua index 03bbdefe..9a02f1c9 100644 --- a/src/iNav/modes.lua +++ b/src/iNav/modes.lua @@ -21,4 +21,6 @@ local units = { [0] = "", "V", "A", "mA", "kts", "m/s", "f/s", "kmh", "MPH", "m" local labels = { "Fuel", "Battery", "Current", "Altitude", "Distance" } -return modes, units, labels \ No newline at end of file +local dir = { [0] = "N", "NE", "E", "SE", "S", "SW", "W", "NW" } + +return modes, units, labels, dir \ No newline at end of file diff --git a/src/iNav/nirvana.lua b/src/iNav/nirvana.lua index 8a75f1ce..4f1402cd 100644 --- a/src/iNav/nirvana.lua +++ b/src/iNav/nirvana.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) +local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local rgb = lcd.RGB local SKY = 13660 --rgb(50, 171, 230) @@ -261,10 +261,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic for i = 0, 348.75, 11.25 do tmp = floor(((i - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 2.5) if tmp >= 9 and tmp <= RIGHT_POS - 12 then - if i % 90 == 0 then - text(tmp - (i < 270 and 3 or 5), bot2, i == 0 and "N" or (i == 90 and "E" or (i == 180 and "S" or "W")), SMLSIZE) - elseif i % 45 == 0 then - text(tmp - (i < 225 and 9 or 11), bot2, i == 45 and "NE" or (i == 135 and "SE" or (i == 225 and "SW" or "NW")), SMLSIZE) + if i % 45 == 0 then + text(tmp, bot2, dir[i / 45], CENTERED + SMLSIZE) else line(tmp, BOTTOM - 4, tmp, BOTTOM - 1, SOLID, 0) end @@ -410,8 +408,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.startup == 0 then -- Launch/north-based orientation if data.showDir or data.headingRef == -1 then - text(LEFT_POS + 2, Y_CNTR - 9, "W", SMLSIZE) - text(RIGHT_POS, Y_CNTR - 9, "E", SMLSIZE + RIGHT) + text(LEFT_POS + 2, Y_CNTR - 9, dir[6], SMLSIZE) + text(RIGHT_POS, Y_CNTR - 9, dir[2], SMLSIZE + RIGHT) end local cx, cy, d @@ -555,9 +553,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end -- Box 3 (flight modes, orientation) - --text(X2 + 20, TOP, modes[data.modeId].t, modes[data.modeId].f == 3 and WARNING_COLOR or 0) - tmp = (X2 + X3) * 0.5 - text(tmp + 4, TOP, modes[data.modeId].t, CENTERED + (modes[data.modeId].f == 3 and WARNING_COLOR or 0)) + tmp = (X2 + X3) * 0.5 + 4 + text(tmp, TOP, modes[data.modeId].t, CENTERED + (modes[data.modeId].f == 3 and WARNING_COLOR or 0)) if data.altHold then bmap(icons.lock, X1 + 63, TOP + 4) end @@ -567,12 +564,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.showHead then if data.showDir or data.headingRef == -1 then - text(tmp, TOP + 18, "N", SMLSIZE) - text(X3 - 4, 421, "E", SMLSIZE + RIGHT) - text(X2 + 10, 421, "W", SMLSIZE) - text(X2 + 78, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE + RIGHT + data.telemFlags) + text(tmp, TOP + 18, dir[0], CENTERED + SMLSIZE) + text(X3 - 4, 421, dir[2], SMLSIZE + RIGHT) + text(X2 + 10, 421, dir[6], SMLSIZE) + text(tmp + 4, BOTTOM - 15, floor(data.heading + 0.5) % 360 .. "\64", CENTERED + SMLSIZE + data.telemFlags) end - local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, tmp + 4, 429, 25) + local x1, y1, x2, y2, x3, y3 = calcDir(r1, r2, r3, tmp, 429, 25) if data.headingHold then fill((x2 + x3) * 0.5 - 2, (y2 + y3) * 0.5 - 2, 5, 5, SOLID) else diff --git a/src/iNav/pilot.lua b/src/iNav/pilot.lua index b8734893..ecc85105 100644 --- a/src/iNav/pilot.lua +++ b/src/iNav/pilot.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) +local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local LEFT_POS = SMLCD and 0 or 36 local RIGHT_POS = SMLCD and LCD_W - 31 or LCD_W - 53 @@ -137,6 +137,7 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic for i = 0, 348.75, 11.25 do tmp = math.floor(LEFT_POS + ((i - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 2.5) if tmp >= LEFT_POS and tmp <= RIGHT_POS then + --[[ if i % 90 == 0 then text(tmp - 2, 57, i == 0 and "N" or (i == 90 and "E" or (i == 180 and "S" or "W")), SMLSIZE) elseif i % 45 == 0 then @@ -144,6 +145,12 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic elseif tmp < X_CNTR - 10 or tmp > X_CNTR + 9 then line(tmp, 62, tmp, 63, SOLID, FORCE) end + ]] + if i % 45 == 0 then + text(tmp - (i % 90 and 2 or 4), 57, dir[i / 45], SMLSIZE) + else + line(tmp, 62, tmp, 63, SOLID, FORCE) + end end end fill(RIGHT_POS, 49, 6, 14, ERASE) diff --git a/src/iNav/radar.lua b/src/iNav/radar.lua index d17fa4d1..ae487a80 100644 --- a/src/iNav/radar.lua +++ b/src/iNav/radar.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) +local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local LEFT_DIV = 36 local LEFT_POS = SMLCD and LEFT_DIV or 73 @@ -67,8 +67,8 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.startup == 0 then tmp = data.headingRef if data.showDir or data.headingRef == -1 then - text(LEFT_POS + 2, 33, "W", SMLSIZE) - text(RIGHT_POS, 33, "E", SMLSIZE + RIGHT) + text(LEFT_POS + 2, 33, dir[6], SMLSIZE) + text(RIGHT_POS, 33, dir[2], SMLSIZE + RIGHT) tmp = 0 end local cx, cy, d diff --git a/src/iNav/view.lua b/src/iNav/view.lua index 441b93f2..867d669f 100644 --- a/src/iNav/view.lua +++ b/src/iNav/view.lua @@ -1,4 +1,4 @@ -local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) +local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGraph, icons, calcBearing, calcDir, VERSION, SMLCD, FLASH, FILE_PATH, text, line, rect, fill, frmt) local RIGHT_POS = SMLCD and 129 or 195 local GAUGE_WIDTH = SMLCD and 82 or 149 @@ -20,11 +20,11 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic end end - local function drawData(txt, y, dir, vc, vm, max, ext, frac, flags) - if data.showMax and dir > 0 then + local function drawData(txt, y, d, vc, vm, max, ext, frac, flags) + if data.showMax and d > 0 then vc = vm text(0, y, string.sub(txt, 1, 3), SMLSIZE) - text(15, y, dir == 1 and "\192" or "\193", SMLSIZE) + text(15, y, d == 1 and "\192" or "\193", SMLSIZE) else text(0, y, txt, SMLSIZE) end @@ -63,11 +63,11 @@ local function view(data, config, modes, units, labels, gpsDegMin, hdopGraph, ic if data.telem then local indicatorDisplayed = false if data.showDir or data.headingRef == -1 or not SMLCD then - text(X_CNTR_1 - 2, 9, "N " .. math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE) - text(X_CNTR_1 + 10, 21, "E", SMLSIZE) - text(X_CNTR_1 - 14, 21, "W", SMLSIZE) + text(X_CNTR_1 - 2, 9, dir[0] .. " " .. math.floor(data.heading + 0.5) % 360 .. "\64", SMLSIZE) + text(X_CNTR_1 + 10, 21, dir[2], SMLSIZE) + text(X_CNTR_1 - 14, 21, dir[6], SMLSIZE) if not SMLCD then - text(X_CNTR_1 - 2, 32, "S", SMLSIZE) + text(X_CNTR_1 - 2, 32, dir[4], SMLSIZE) end drawDirection(data.heading, 140, 7, X_CNTR_1, 23) indicatorDisplayed = true From 57842e24f064db8488fa3cf8cbf749953094d675 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Wed, 18 Sep 2019 19:30:40 -0400 Subject: [PATCH 23/34] Satellite count sanity check for Crossfire --- dist/SCRIPTS/TELEMETRY/iNav/crsf.luac | Bin 2768 -> 2784 bytes src/iNav/crsf.lua | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/crsf.luac b/dist/SCRIPTS/TELEMETRY/iNav/crsf.luac index 4fac00fbab006e43663d516286d3b4e5ca55359e..349b5bdaeb3275663722db188a75693ed1f688d0 100644 GIT binary patch delta 40 wcmca0`apEUWhO?s%~zPxnMB+goEh93PBOGR_%Iwiz{n8W(7?Fao^>KC04juA(Svrc3M0CATG;Q#;t diff --git a/src/iNav/crsf.lua b/src/iNav/crsf.lua index 51b2de62..f6946c85 100644 --- a/src/iNav/crsf.lua +++ b/src/iNav/crsf.lua @@ -54,7 +54,7 @@ local function crsf(data) data.fm = getValue(data.fm_id) data.modePrev = data.mode --Fake HDOP based on satellite lock count and assume GPS fix when there's at least 6 satellites - data.satellites = data.satellites + (math.floor(math.min(data.satellites + 10, 25) * 0.36 + 0.5) * 100) + (data.satellites >= 6 and 1000 or 0) + data.satellites = math.min(data.satellites, 99) + (math.floor(math.min(data.satellites + 10, 25) * 0.36 + 0.5) * 100) + (data.satellites >= 6 and 1000 or 0) -- In Betaflight 4.0+, flight mode ends with '*' when not armed local bfArmed = true From 698e44e21f778e97b29a6d2d07a070a89e8b12cb Mon Sep 17 00:00:00 2001 From: teckel12 Date: Wed, 18 Sep 2019 19:38:16 -0400 Subject: [PATCH 24/34] Correctly center heading compass values on pilot view --- dist/SCRIPTS/TELEMETRY/iNav/pilot.luac | Bin 10742 -> 10742 bytes src/iNav/pilot.lua | 11 +---------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac b/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac index 07b31ddd0d56a4067685ddda37a2a0e848fff6bc..9c2772076e9b5383bf7c2a50a009597e919275d7 100644 GIT binary patch delta 22 ecmews{4IEbC8PaDt99%w5)2N)o8Pc=DFFax)dzh5 delta 22 ecmews{4IEbC8Nhit99%wvpE?UHosx#QUU;K4F|sf diff --git a/src/iNav/pilot.lua b/src/iNav/pilot.lua index ecc85105..04fe11fe 100644 --- a/src/iNav/pilot.lua +++ b/src/iNav/pilot.lua @@ -137,17 +137,8 @@ local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGrap for i = 0, 348.75, 11.25 do tmp = math.floor(LEFT_POS + ((i - data.heading + (361 + HEADING_DEG * 0.5)) % 360) * PIXEL_DEG - 2.5) if tmp >= LEFT_POS and tmp <= RIGHT_POS then - --[[ - if i % 90 == 0 then - text(tmp - 2, 57, i == 0 and "N" or (i == 90 and "E" or (i == 180 and "S" or "W")), SMLSIZE) - elseif i % 45 == 0 then - text(tmp - 4, 57, i == 45 and "NE" or (i == 135 and "SE" or (i == 225 and "SW" or "NW")), SMLSIZE) - elseif tmp < X_CNTR - 10 or tmp > X_CNTR + 9 then - line(tmp, 62, tmp, 63, SOLID, FORCE) - end - ]] if i % 45 == 0 then - text(tmp - (i % 90 and 2 or 4), 57, dir[i / 45], SMLSIZE) + text(tmp - (i % 90 == 0 and 2 or 4), 57, dir[i / 45], SMLSIZE) else line(tmp, 62, tmp, 63, SOLID, FORCE) end From 97287a0475a63150ca72198ea93f3ba365a28519 Mon Sep 17 00:00:00 2001 From: Tim Eckel Date: Thu, 19 Sep 2019 13:08:31 -0400 Subject: [PATCH 25/34] Updated readme to list support for the Jumper T12 --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b6728c4e..562487d9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -## INAV Lua Telemetry Flight Status for Taranis/Horus/Jumper T16/FLYSKY Nirvana - v1.7.3 +## INAV Lua Telemetry Flight Status for Taranis/Horus/Jumper/Nirvana - v1.7.3 -### FrSky SmartPort(S.Port), D-series, F.Port & TBS Crossfire telemetry on Taranis, Horus, Jumper T16 & FLYSKY Nirvana transmitters +### FrSky SmartPort(S.Port), D-series, F.Port & TBS Crossfire telemetry on Taranis, Horus, Jumper & Nirvana transmitters [![Build Status](https://travis-ci.com/iNavFlight/LuaTelemetry.svg?branch=master)](https://travis-ci.com/iNavFlight/LuaTelemetry) @@ -14,27 +14,27 @@ #### Pilot (glass cockpit) view for fixed wing pilots -![sample](assets/iNavQX7pilot.png "Pilot view on Q X7 and X-Lite")   +![sample](assets/iNavQX7pilot.png "Pilot view on Q X7, X-Lite & Jumper T12")   ![sample](assets/iNavX9Dpilot.png "Pilot view on Taranis X9D, X9D+ and X9E") #### Radar (map) view -![sample](assets/iNavQX7radar.png "Radar view on Q X7 and X-Lite")   +![sample](assets/iNavQX7radar.png "Radar view on Q X7, X-Lite & Jumper T12")   ![sample](assets/iNavX9Dradar.png "Radar view on Taranis X9D, X9D+ and X9E") #### Altitude graph view -![sample](assets/iNavQX7alt.png "Altitude graph view on Q X7 and X-Lite")   +![sample](assets/iNavQX7alt.png "Altitude graph view on Q X7, X-Lite & Jumper T12")   ![sample](assets/iNavX9Dalt.png "Altitude graph view on Taranis X9D, X9D+ and X9E") #### Classic view -![sample](assets/iNavQX7.png "Classic view on Q X7 and X-Lite")   +![sample](assets/iNavQX7.png "Classic view on Q X7, X-Lite & Jumper T12")   ![sample](assets/iNavX9D.png "Classic view on Taranis X9D, X9D+ and X9E") ## Features -* Works with all FrSky telemetry receivers (X, R9 and D series), all TBS Crossfire receivers, all FrSky Taranis and Horus transmitters, and the Jumper T16 transmitter +* Works with all FrSky telemetry receivers (X, R9 and D series), all TBS Crossfire receivers, all FrSky Taranis and Horus transmitters, and the Jumper T12/T16 transmitter * Compatible with Betaflight using FrSky X or R9 series receivers (with reduced functionality) and TBS Crossfire support with Betaflight 4.0.0+ * Launch/pilot-based model orientation and location indicators (great for lost orientation/losing sight of your model) * Compass-based direction indicator (with magnetometer sensor on multirotor or fixed-wing with GPS) @@ -57,7 +57,7 @@ ## Requirements * [OpenTX v2.2.2+](http://www.open-tx.org/) running on Taranis Q X7/Q X7S, X9D/X9D+, X9E, X9 Lite, X-Lite/X-Lite Pro, Horus X10/X10S or X12S (OpenTX v2.2.3+ is suggested) -* Jumper T16 requires [JumperTX 2.2.3+](https://www.jumper.xyz/jumpertx-t16) (May 23, 2019 or after release) +* Jumper T12/T16 requires [JumperTX 2.2.3+](https://www.jumper.xyz/) (May 23, 2019 or after release) * FrSky X, R9 or D series telemetry receiver: X4RSB, X8R, XSR, R-XSR, XSR-M, XSR-E, RX4R, RX6R, R9, R9 Slim, R9 Slim+, R9 Mini, R9 MM, D8R-II plus, D8R-XP, D4R-II, etc. or any TBS Crossfire receiver: Micro, Nano, Diversity, etc. * [INAV v1.7.3+](https://github.com/iNavFlight/inav/releases) running on your flight controller (INAV v2.1.0+ is suggested for full functionality) - Also compatible with Betaflight (with reduced functionality) * GPS - If you're looking for a GPS module, I suggest the [Beitian BN-880](https://www.banggood.com/UBLOX-NEO-M8N-BN-880-Flight-Control-GPS-Module-Dual-Module-Compass-p-971082.html) From fc4739739f21d8ebd890553a66aead3b798d6a44 Mon Sep 17 00:00:00 2001 From: Tim Eckel Date: Mon, 23 Sep 2019 10:11:48 -0400 Subject: [PATCH 26/34] Readme updates --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 562487d9..d91ff514 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ * Jumper T12/T16 requires [JumperTX 2.2.3+](https://www.jumper.xyz/) (May 23, 2019 or after release) * FrSky X, R9 or D series telemetry receiver: X4RSB, X8R, XSR, R-XSR, XSR-M, XSR-E, RX4R, RX6R, R9, R9 Slim, R9 Slim+, R9 Mini, R9 MM, D8R-II plus, D8R-XP, D4R-II, etc. or any TBS Crossfire receiver: Micro, Nano, Diversity, etc. * [INAV v1.7.3+](https://github.com/iNavFlight/inav/releases) running on your flight controller (INAV v2.1.0+ is suggested for full functionality) - Also compatible with Betaflight (with reduced functionality) -* GPS - If you're looking for a GPS module, I suggest the [Beitian BN-880](https://www.banggood.com/UBLOX-NEO-M8N-BN-880-Flight-Control-GPS-Module-Dual-Module-Compass-p-971082.html) +* GPS - If you're looking for a GPS module, I suggest the [Beitian BN-880](https://us.banggood.com/custlink/vvGD6DZWyg) ## Suggested Sensors @@ -72,19 +72,19 @@ * INAV v2.1.0+ is required for TBS Crossfire support (some telemetry missing from Crossfire: HDOP, GPS altitude, variometer and heading hold notifications) * INAV v2.0.0+ is required for FrSky D-series telemetry and proper GPS accuracy (HDOP) display -* If using pilot or radar view or a Horus transmitter and INAV v2.0+, set `frsky_pitch_roll = ON` in CLI settings for more accurate attitude display +* If using INAV v2.0+, set `frsky_pitch_roll = ON` in CLI settings for more accurate attitude display * INAV v1.9.1+ is required for F.Port compatibility * INAV v1.8.0+ is required for `Home reset` voice notification * OpenTX v2.2.2 (release version) is required for compatibility with Taranis X-Lite transmitter and Crossfire telemetry -* Betaflight compatibility is mostly complete, except for some GPS and flight mode information missing from Betaflight -* Use the OSD to control VTx band, frequency and power (Betaflight lua script can't be run at the same time as INAV Lua Telemetry due to limited transmitter memory) +* Betaflight 4.0.0+ mostly works, except for some GPS and flight mode information which is missing from Betaflight +* Use the OSD to control VTx band, frequency and power (except for on 2019 series Taranis transmitters, Betaflight's lua script can't run at the same time as INAV Lua Telemetry due to limited transmitter memory) ## Special Thanks * [Team Black Sheep](https://www.team-blacksheep.com/) - Sponsoring TBS Crossfire telemetry support -* [FrSky](https://www.frsky-rc.com/) - Sponsoring Horus transmitter support +* [FrSky](https://us.banggood.com/custlink/vG3D6Kiprr) - Sponsoring Horus transmitter support * [Jumper](https://www.jumper.xyz/) - Sponsoring Jumper T16 transmitter support -* [FLYSKY](https://www.flysky-cn.com/) - Sponsoring FLYSKY Nirvana NV14 transmitter support +* [FLYSKY](https://us.banggood.com/custlink/GmGm0GZcpt) - Sponsoring FLYSKY Nirvana NV14 transmitter support ## Setup From 1a3c465b878483736ad46f4cb41760d8fbc195db Mon Sep 17 00:00:00 2001 From: Tim Eckel Date: Mon, 23 Sep 2019 13:12:26 -0400 Subject: [PATCH 27/34] Readme link changes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d91ff514..caceac2c 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,9 @@ ## Special Thanks * [Team Black Sheep](https://www.team-blacksheep.com/) - Sponsoring TBS Crossfire telemetry support -* [FrSky](https://us.banggood.com/custlink/vG3D6Kiprr) - Sponsoring Horus transmitter support +* [FrSky](https://www.frsky-rc.com/) - Sponsoring [FrSky Horus](https://us.banggood.com/custlink/vG3D6Kiprr) transmitter support * [Jumper](https://www.jumper.xyz/) - Sponsoring Jumper T16 transmitter support -* [FLYSKY](https://us.banggood.com/custlink/GmGm0GZcpt) - Sponsoring FLYSKY Nirvana NV14 transmitter support +* [FLYSKY](https://www.flysky-cn.com/) - Sponsoring [FLYSKY Nirvana NV14](https://us.banggood.com/custlink/GmGm0GZcpt) transmitter support ## Setup From 2df70a870700946a82fe436a326432acb89a6961 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Tue, 24 Sep 2019 21:03:46 -0400 Subject: [PATCH 28/34] Show script usage when testing, builds Horus on Taranis, added Nirvana screenshot sample --- README.md | 4 ++++ assets/iNavNirvana.jpg | Bin 0 -> 53692 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7749 -> 7799 bytes dist/SCRIPTS/TELEMETRY/iNav/func_t.luac | Bin 3475 -> 3590 bytes src/iNav/build.lua | 4 ++++ src/iNav/func_h.lua | 7 +++++-- src/iNav/func_t.lua | 2 ++ 7 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 assets/iNavNirvana.jpg diff --git a/README.md b/README.md index caceac2c..194fc6c7 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ ![sample](assets/iNavHorus.png "View on Horus transmitters") +#### Nirvana NV14 view + +![sample](assets/iNavNirvana.jpg "View on Nirvana NV14 transmitter") + #### Pilot (glass cockpit) view for fixed wing pilots ![sample](assets/iNavQX7pilot.png "Pilot view on Q X7, X-Lite & Jumper T12")   diff --git a/assets/iNavNirvana.jpg b/assets/iNavNirvana.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6928253f4e516cb10ec029074dda0385f16f0a5 GIT binary patch literal 53692 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%0At*_(b8<>~P@7 zfLk|+W_aUiJ!GjaR6}ShoTk@E6Frn|ErKHEI<+D0KFtv}0WDqc63@S;4ww30rXe~q z)nLC5`etJ)?*RC0v8?D9=b^01HAnOGmeO*|5eJA1cLrOOX*CbE%B`-03*`hoZL|Cw z)G8x<0}*D6Jr8qn>)~yt0Xzl9nRdtN{bZSyjLN9QvvB`=UPBsCMoK{UiDOAD2QP*Y zEBKPn(4(W_&H)<9GwB0T?I3-v*rD_d(9gQ!a~4Ws*5+d_?u0hky?mCWx-(ToF%ROx;tKvs@b>)vK5)wQH5ddK&xArmvtHI2WYV^_~7T9;`rA?V)&$ zq<0jhf|+7V`lf63iSP9uTloRwek6N^f_B@Wa`dPM82hAld^F9^R~icFGQD5kpolK>0xUU=bKQh$t)xm}b@lOEvQ^>E=EE&;)SSW$G@c;z@%&4${$FDlWz z?3|Xt2yzU@4h^9+gAZ+CKh>>_|OFkJ)cR|O6d-a}9kxYz+n%`UBbOy+*y6jeS= zBg|K{dMxZ>P@~@?$&(D}WDkrKL71anbN8=jU`GG194`%KnM^{&M%RY)=#wfMSSY#9 zO+8j(+8xXy=ZYUUAFyr0bR0)DVA+Wq7M^KL;%D7JH18io<63$-!5n_dwpY15<(EBhO_O+&-Psjbd4iwuQDz!fqRig)N zAHNt&@rcKtXo`V-GwyorRJs*l#0&sJkpAcJ8iHyyF8MH1b!vZbZfcREVbrYeF-5D0 zus&*?EBvtMkw52Sceg@JWQ^$eA9smsNIn8dO|iP1 zlOt_6J*g;=M5ta_5QcVPjYnVKW0_)R4RZ`TrcWU>=IGInA9N*0F#{*+xwQRq*V{#3 zs^IRoa&^u2$@tZ%v0HG%*=g7 ztB+9ek++c&7inpkv2t#w;Mi<8 z&a}a|6LvI+h+t_7f{Jd)IQQ;&e=8qX&H)buhm#xK=BHw%pNoSl#FyAI;THqN=h7_$=deFF8dGH2 zofS>W31SQ0W(28?#JhW}Nz+W`G2#OH84|p2yIi~6C@1cqVlH!!fs7uReV%dIwh=Kx zgAPK0*%&6eQ8#rIYt22=EWAqjX2u=JQg@XMkrRo($grhv<86El>Yro~=!G#jvEFK| zHFJ@nu`S=rRvk)#$CQS{vYH}=&kf&UGZ?8x;zB-<+eAnfi@FcSp2g!8=g zaX*lC7oYwk7Ed>{n|9-{Z!-{YlBvijYL`^G5A!cWd!8-m`<^vE9Mb#R&yM!Qfkzf^hwbXUUU4Q9WaKpl(s90HB2dt6m z+~?%>-D~e?$Ua~#zq7Y8MGhiSLgsvoh*u~I#-8)&a-FwnCaNT3`d==^y9X#J#j4A> zAScw}Tua-u-ooI~?*?Hy^}D_(Y|T*|T>fLAZkVEiU6q9k-M>Juejh)3FUmK^jY;t< zWa?7?h9U&;b|Cvpww>)=%wvm%?fO_B4*2N-Nwr|{5NC?;FS_kx!6E#%Z6;rs#YfQS z(MfA13u4%Ip$^xGM8qnZRq`Fyqb4I8Rz+TL8(*zH`H_2_;rXGm+xnm2U{&huRfA&YhRgs!axRE*_{AaI>n9Vamc4W%ur>9aX-KPnQ1p#z ze#F_gYxnHPm9+F_ze^(LNkDB9}G;DZ}+tOcYukZoUUdK^85gg=i1PKVA~rUPrPxnMSzYVcBQ zCB>2$>wKxh3boqnf46r{xo(|`hr?(Uov;dE7%rF_1C1akiLRDMBIkC-v>tqBl5p@f z^#f77zwKTAzN?!d7w&oY}J^1>iR2Y*bGejiMU^I8Y7JA&>j^X&yXL`u3c4w07N z0CT!(^~%z22Fds6tZ^t&kjIg7icUw{74T3{htl+;VDa+l@#&fI1YzV6MQ`1rg(-Oa z+|k{v=-G=@LJce-qe96S?;k8Pv?j8qkNt(lZxP3n1Pg zA%9pSOf7*!-;|Tm&)y`NnpHQa3^hT)fCx9Tv!>5IavX78GKT#b{Z@pQf@g?t9)6Pc zy!=QbHNCt-@z$lM%cp(cAdr#K(yw-0-UcvnGukH!t<6C4M|%I`-SW(B`9#%Y!k=5; zInS)MzU*13O6cX=NKyYswiYT?8ZEj!o{)})Q7QVAI>M+)j~qL?H>X=_?XLe_E@GsT z|HIr`lvm7h0R^$>7zs8r)D>hayvzNO=BEv6FHV8bF~5KEcSvMI$&~#!!kCm^a6aT# zl6qEo?hCKno4t5@)~(!h)J(rtocXf!2@~h(SiQS&kN~8U7+Ffq3qR3lZGYr^{Ycgw=Y^jC{vwWUMCi#J(>X|iGwt6 zEd~UhSb9 z%k%i>(M(@{aW1msvTPp4Y8D62v=+^q^<+0?jt;Y%z#b3!kWvVXCq0$eoB{LFi!XuY5kx|%9fP>G)iQmYQ_!x%U zx}wz5ca4rv>?DU``R789M1-B`Mp=u@bjcJKDVJ8h;f@@CUr};q&rL_ho=>A0<6q@p z#bp{l=Ytp{F{9InY3y6mmb=Pg!J-R2cX2>4U!VDD#;h}AEPH-Pj)aPke8j!*bPbl# zV+tV`>Y*2k!nIz*1un@zDzZy{yeYhtwSLLi{_GLz1HQOG#60=C>yR9WOSP?CTR@J9 z91zB`H|LS$scT*r#%m_sY?fePHe$u$ZIxwXw>$Y@D|P0lO){ zm5k2g#V>zgB=a3&C7Vg7y^tp^e7u)|3p5*YaID=wn6wh_NcEGEgfo%({MmKbqWeZ< zLYEw4dx^ijhUBhEu&yGuZ$`YT`X{f)uC-USlV1N`Syj5yr0{LPvN$CtjlnDw(WYTYNRE>&_@s6>-;J>G;?C`n=bwZLJNR z$0`Tw?FGmG#^b%tA-H(tfpie@W$#sOcP@{2N{;6X8iN=VK>}$79_pB5)d?>juW~lH zZrjpo+4+vn|D0^$ZmE3qD4jNs=|Wg+`uQ`cs9j@Q#+v^U%f|Z@HPlU0_WL0x7BU4? z!6vpGC8;<+y?C*8i|=f|WmEVCToP@=E={D&lfMPz59>C?eJEP1xxCAA=lQjNLaz$k zg!i5tU-0}(Ov|3DXJ4iECok1t53di4Iolnp{FZ#Sv+o`v5E)8E@PyZl#2SRDI6nIB z^LBtdW||mzR41hixZXHVmpdcdek$LX6L_krmH5>55}c0`O|13*`>&M!)fK)VJZr~h zqudC538Z6Q-j!bYk>3Udc0k)aHl1mRJtW%tQ9G6eW4orykVbkKA$qdBjA7y7T5}6H zNVRTp5kHsXh5B(Q;Ky{c(k<|sPJV<`0EZx$5%Yq%VRy=LIT+NCd16dcyfV`D>~Ztw z(5dkHNEX7L`?=E3CX9H5^21>3xw!yk=9!X6os~N$;(Rx4$;ngmWzPWd`1biL- z)aFBw^b0vN8}LhQ^LKV*I)<+%d%)7gbgm;H&{;+Y4w){!qt0B-L{P?|{fDV;#Ct`HT z2|f8D|B+`dT~IY_Y6>@ov3-LBuNT}#w`AAOpPg6U(Dk%`%FOQ&ZYSzSzfH+v%jP~J zBD>KQcJSceoKNAni!*QqpZ+zU=X}>|HAYNfF7}g>i-p7tAe(w?9nxo4?6t5(v1f{% zJWg=QBd7`E8bYX#Qy*bSM(~Mpd91# z74H8482&DJpGEzxuAa+SytabNRkpN_)n;!fN0dS~=NKT9_}6|SoN8938LO*H{{U?< zuKBB0Poxw4W&TLs@rI9Sp?=>QExnveZw`3QGa{?04o(gXP+N@T)X(G;oAnd@fH1qwgG*TA)7MnG5T(96wG5BKfR>R@2xyPZ6&?M%(6y*wC%>_EOFKNuX5HrF@K`?f5G~0 zu?e@-tn^4=o*^Q>##toea*_|=Yr)52X;i_gaC)Y@u8j0Or?kYu#dLkVkHuJKMvXxr z98{@rp!LA|*W2Ool$;{@k>|=5=t{FLIAQtJ(cCX~73sqtK`)IQ@}|$H{{Ukjie44) z?7lGYmy7R?oul}pPHPi+w|c_o?z=C199N-RTzCieL-;@O9^Xs&k7Mxz#Xc|7A4Rf@ zO|>y4yb^-4JehXqX&#)4^RalPDM>3h)KS*^S?l<0d2o!OUy(1h&G>(r^Us8S9r#~Z z_$T8(80wxiwbJ$N9$R>H&kvoZYyHlvA;CGo4W0)ZPHWjeW$zz&E5)A&d|~i^##-9= zc0F=MxwO^fUD3fRkXLZX<0IF-dN{mvYg4ICFIc#>uf=Oi^V8%^qfv6!w$gugvHt*r z=x=;P)jSXTKK{)*=feFT#}=MF@h6F|qn>N6Ixi~T+9d3LX6LVe!n-&9pfvvg*_Yr4 z!|x3EKJ&x=BG&bQ`i`@`R_S2rwHbefvyZ*#Ys0OHh9aD~-!HV9Z^(uLpUWb;a8;<`XF5t(PR%#?{zpV<&ymHgrT$Fj+Tkf*kMWAOg~&W@D^Ae{&C3V+%VV=OC0j>EmCgyAm7(x0;~mfCieYvO+i`18Yh7mCvV z0Lj(tJWgVc6w^UcUKV~#oHq;4Bhska+xS!BH|;g?3s&&Ai*)@4>Km88@YMRCSF*gi z2azjD!lC5z$0EF$V=4V&a<;s$uIo!%&euG5&-=&A)i1{1m5$@$U&T!;K=}9YUtaMB ztEB5*B+#Obyi0MRNFLBivj$a*A1(s_0C$SB`#^YxO*`QqkL`R{dThLso%QvJ-ApWk23wfgoM z?KD>`yBq!n)S$NUhKVfGEO8~|Ozy{k0}TF^nGNFLWrycjOA|%P>Po~$GWLzzqWw!L zc%R-MooH#gu(G_jxl#*5BFH)J2tU%2#L`VZV(L?KgO79V--+J|qW!2Yyes413izu= zfg4SN4PG1R#BUsk04xQ0ckOZGO(Vyj7d$(l=oislS!lX#u7w@$aFQ~gynV9O^VDia zRcT?~jt*D+m5&PvImS2T(h;}M`bQ(;&kS7t&VL-Obi3_J*He>9p4#l)+MJ_C>a2L| zKw>`%`ZwYiz+d=UUm7hwBKUvAdN=$bnvAe&7gNo6t1YoWrN-0Om945{ss8H|_EqoS zTQ&I+h;xjkB^$bsOXsiooQAFO6HoE~0PV@)?O#llWU?B)tO+)7t|MK$zZ_R*pk3Jb zoA!wK$MCCKx$^X17f&gPm4Wi-Tr#qr#}(yM<%K9ie{uck^IPyQ5gDt>+QmiwHh+c9 zzX*8B4QKY-@TZ6L=O5V~8L*p5w2VGL2?K^c`Netv0PLB4b!+jv;$PXAMRjYS>W+*t zgms=0r=B=r`c^WOQgUy4ZT$J9%{`Cq=S?jyPxQILYhSj1#VumOeLCaBMkw1T(p$oj zIUO;%Ks4XkA5@a>_KfhHk~x-HZkVxS)Rk!SPw^J1 zrF=^9J)&Pv2#Zjib}WYj=QZ}nfvs*ePlf&kxM<{Z+Byv2pZRMoc(~^YW$N#&e#t4NIvneBIZ)r6RA6DRjZ3+k}DC&I5h3Wo03gy%dY4akT~yA%igD%-*K{}-6{^%GHjTF z(zh7JIJclktvemq$;LWUVLL`g2A?#$n?Wm^c5$o1rIaxvoQ%_@Me;$~GBJaSmnYox zEUb#nNt&ZX8L1#b58!<)V|U7uk8!3 zwC8u7=eGR%?#^ocr2DaQ#qNhiuWE2y{iZ!e?mM2oa?Zi|>&|mex7W2hS9xL7ZsC?d zRpgF#R$zL9LF5{rX+Gq%ivIxG7hIpT&7b<{Y0ztWjg+fBz5Ub^Co3dVGP3;$JX7|Q z{$?BQM>es4GrW>s+&i($GfKph>P~8=qvO94+Q}3!_=i=77~=sWj`mem89V?RikVJU K+^BocQ~%k{1t${# literal 0 HcmV?d00001 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index 8443bf5f44c6b6f01d6354d09d726057cd5d0e37..47375b041d441c0ff4768ddab287c4ae0c9f47ce 100644 GIT binary patch delta 462 zcmbV{y-Px26voea^}T74SO(Y9YN|nq#ukHnv(#FOv~ZDZ5QoMZf{4!T!>OTq!Kt?X zfw)r;bl<{j1OF6b(eb$bxdY^zU=vvK#&uw(J^~u;EU--!O;9Fqg346*xfD_L1RiyiO%4x zm0vfsk{{09J# Bfo%W) delta 367 zcmY+8KTE?<6vfYb=Eay|wC&JVt(_DFKSGD3LW+uipcSWLhwct8F5*jyf`iiX=7OI< zkW4x?6&rMLXd@J=I664F=%}xV1@Cfy_i*mvd}Z&lwKTc8n%yN@P`yQe84zb=UbX70 zxUYNHgpP>IWJ-j}r?!s47;9dKX$s{L@jRAUjA7aW5&$Q@2Fn4C38%gvgPQBWrUjH- zj+0zhl=YOD)1%^CAFss!JE@IP*H(t^Ru>ztt8C@yg+nRQl#_-`ZaXV@F*$9@8Y;11 zlj7heZ8Jn)Y6(-}ZC*ss3`qd-swbA5BJzGn^VSm`IESBqy7Q}Nz_BBonJF(Dd85KI z7ABYs1kAFjs&em(is7_?ecEr3k>%`>?48Ce~HOqa=LxR Date: Tue, 24 Sep 2019 21:11:11 -0400 Subject: [PATCH 29/34] Updated Nirvana sample screenshot --- README.md | 7 ++----- assets/iNavNirvana.jpg | Bin 53692 -> 25750 bytes 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 194fc6c7..8325cd54 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,9 @@ #### [Video of Lua Telemetry running on X9D+](https://youtu.be/YaUgywuT1YM) -#### Horus/Jumper T16 view - -![sample](assets/iNavHorus.png "View on Horus transmitters") - -#### Nirvana NV14 view +#### Horus/Jumper T16 and Nirvana view +![sample](assets/iNavHorus.png "View on Horus transmitters")   ![sample](assets/iNavNirvana.jpg "View on Nirvana NV14 transmitter") #### Pilot (glass cockpit) view for fixed wing pilots diff --git a/assets/iNavNirvana.jpg b/assets/iNavNirvana.jpg index f6928253f4e516cb10ec029074dda0385f16f0a5..9bdad5ca919b8c2c89cad5c1484752459d3911e4 100644 GIT binary patch delta 24384 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 STXM=hZjW_3T={{hPXW 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 z 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 P8;Y4uR@|t2&r|=|uE^f? From 85e4e9cc22789e2f0b97cd383b61a16f41d93e99 Mon Sep 17 00:00:00 2001 From: teckel12 Date: Tue, 24 Sep 2019 21:45:21 -0400 Subject: [PATCH 30/34] Fix for OpenTX 2.3, remove fps from title on all but Nirvana --- dist/SCRIPTS/TELEMETRY/iNav.lua | Bin 11354 -> 11331 bytes dist/SCRIPTS/TELEMETRY/iNav.luac | Bin 11354 -> 11331 bytes dist/SCRIPTS/TELEMETRY/iNav/func_h.luac | Bin 7799 -> 7645 bytes dist/SCRIPTS/TELEMETRY/iNav/func_t.luac | Bin 3590 -> 3475 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6513 -> 6466 bytes src/iNav.lua | 4 ++-- src/iNav/func_h.lua | 7 ++++--- src/iNav/func_t.lua | 2 ++ src/iNav/menu.lua | 2 +- 9 files changed, 9 insertions(+), 6 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav.lua b/dist/SCRIPTS/TELEMETRY/iNav.lua index 40d143ac57bc9d0e500d86810d25226e6ee759ea..aff1112bde4578125cae25c9809f2844fede31dd 100644 GIT binary patch delta 906 zcmZ`%y>1gh5dPLaM;DVO64IGSfdUZ|LxaQvjD7anAVfuRBC;qD@B;KV24XiPjU^f+ zDr$s8OR*PY`yI$@@BnSk;8IwQA(H0J9DO_?c`AM0 z19ro93PBa)u-$p();)TjpuR!oYQE0|H&J7L8IAc(G&KvijFvhxWM;gug&JH2W{eTz zfa3UkKB5~ReStsg$7fE=L&e0a%>`Ei5Z0{>2vo<3^CwWsQDe3$om1SJt$;sX4b|?#dcL|9Pjy zs)l>@jVw~%GU@O8v0T{KnYU?rcKq~ud3q$f@5!!D`UahB0n@|Q{dgxPp;s?ne|yyW NY$9`)>0ftV{swxpoakR6t;F}-p;)DW^NMyiO;@o4%ZD3iAAD{nm{8J>=rP(4Yw} zKBDPgT%6~{+Y{-S=c;38D(l}Gdc_1py60A999oW=uK2iH3%dtDTJfv1=BDW;vnUuV zr--#1o#0f=1)Rer%{fDVX1`2U9qIQ>R5eq7q4gEbsq(tIBB$l0TsBvZ`dm3l|9@wT zoD?~*nWnGX_v)-XuoG|nsQqfQ*d=}tx0iSH0TkP0T&?o&L;B<4o%C<}>Cc_5uO{FM KKS?jQ-~9undG2HY diff --git a/dist/SCRIPTS/TELEMETRY/iNav.luac b/dist/SCRIPTS/TELEMETRY/iNav.luac index 40d143ac57bc9d0e500d86810d25226e6ee759ea..aff1112bde4578125cae25c9809f2844fede31dd 100644 GIT binary patch delta 906 zcmZ`%y>1gh5dPLaM;DVO64IGSfdUZ|LxaQvjD7anAVfuRBC;qD@B;KV24XiPjU^f+ zDr$s8OR*PY`yI$@@BnSk;8IwQA(H0J9DO_?c`AM0 z19ro93PBa)u-$p();)TjpuR!oYQE0|H&J7L8IAc(G&KvijFvhxWM;gug&JH2W{eTz zfa3UkKB5~ReStsg$7fE=L&e0a%>`Ei5Z0{>2vo<3^CwWsQDe3$om1SJt$;sX4b|?#dcL|9Pjy zs)l>@jVw~%GU@O8v0T{KnYU?rcKq~ud3q$f@5!!D`UahB0n@|Q{dgxPp;s?ne|yyW NY$9`)>0ftV{swxpoakR6t;F}-p;)DW^NMyiO;@o4%ZD3iAAD{nm{8J>=rP(4Yw} zKBDPgT%6~{+Y{-S=c;38D(l}Gdc_1py60A999oW=uK2iH3%dtDTJfv1=BDW;vnUuV zr--#1o#0f=1)Rer%{fDVX1`2U9qIQ>R5eq7q4gEbsq(tIBB$l0TsBvZ`dm3l|9@wT zoD?~*nWnGX_v)-XuoG|nsQqfQ*d=}tx0iSH0TkP0T&?o&L;B<4o%C<}>Cc_5uO{FM KKS?jQ-~9undG2HY diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_h.luac index 47375b041d441c0ff4768ddab287c4ae0c9f47ce..13f30ec6e18754d7e53508b32d7530f65259ad0f 100644 GIT binary patch delta 239 zcmexvbJu#qDOQd^1`yyg*?ftWlZBCW@*PfjO(6zpM+OFQ28IU4gB%QwjSLK}j15c& z4+=4`IbC9KV+v-7ZE9d>bGke^flE^T08l?0qa%Y`V=%*AhX%%D2QD+*28xM0urwTF z2w^zxaE0-B!$lRpaHVC@C6rc6F3bc%I4kacA9T;W(& O)?+~Coz4FxDp&y}k3~)Z delta 406 zcma)%!Ab&A6o&tEojW-}T23*73nAzY+SOu4NNE$MR&E4ah!0SUHsQTeuG$T_3tF{m z5zGrXi5l(_2Lkgs+ICE;ZD;kJ|D6BlocZ48{_|MIi&#{m989ETkmY|^*;WD>4{!iQ zIt5Pyov?&^tq_upZb-4AKE&KrV!$gV^^qaoSKN5^pErzudv8gJP}?wb6XajYsI?V3 zVv3`7+gQ&DBPogoXVXun<8QBQw)Fpx=|BT^c)}`R#2cw6m%pO-lgtg>vs??2U#dogU3~hId0uGEzWN?E>AAbn+=$P zyB+^w?MarHPJ`n_i)59t9z@A&k~fSU|7_!3-ZA<9ZfY#MO#L8c*Q6XU&VokzN`3*L C5N#Cz diff --git a/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac b/dist/SCRIPTS/TELEMETRY/iNav/func_t.luac index 4cf03443c8c2dfb649f45abd2424f48695b60f13..1461268ecbe3b89286712fc5205c9e4c078903ad 100644 GIT binary patch delta 88 zcmZpZnJhhF5{D`S2yoxnI4ho+Ri2@N!ECb^i#XHd4mJ%|b)bya=B;cZjI269rp4xS k>_?ecZGcSY%`>?48ChL{OpnQDxR;+m6pT1!B;6u8LF$;QCI5D?_*Y&dy?#3TS(ojhd# diff --git a/src/iNav.lua b/src/iNav.lua index ec61160f..1a58a859 100644 --- a/src/iNav.lua +++ b/src/iNav.lua @@ -437,9 +437,9 @@ local function background() end local function run(event) - --[[ Show FPS ]] + --[[ Show FPS data.start = getTime() - + ]] -- Insure background() has run before rendering screen if not data.bkgd then diff --git a/src/iNav/func_h.lua b/src/iNav/func_h.lua index 7b60d043..4965facc 100644 --- a/src/iNav/func_h.lua +++ b/src/iNav/func_h.lua @@ -61,12 +61,13 @@ local function title() --[[ Show FPS ]] if data.nv then data.frames = data.frames + 1 - text(data.nv and 75 or 130, 0, getUsage() .. "%", RIGHT) --text(data.nv and 75 or 130, 0, frmt("%.1f", math.min(100 / (getTime() - data.start), 20)), RIGHT) text(data.nv and 115 or 180, 0, frmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), RIGHT) - else - text(data.nv and 75 or 130, 0, getUsage() .. "%", RIGHT) end + + --[[ Show usage + text(data.nv and 75 or 130, 0, getUsage() .. "%", RIGHT) + ]] -- Reset colors color(WARNING_COLOR, YELLOW) diff --git a/src/iNav/func_t.lua b/src/iNav/func_t.lua index 2641cb2d..73485b06 100644 --- a/src/iNav/func_t.lua +++ b/src/iNav/func_t.lua @@ -31,7 +31,9 @@ local function title() text(SMLCD and 57 or 80, 1, frmt("%.1f", data.frames / (getTime() - data.fpsStart) * 100), SMLSIZE + RIGHT + INVERS) ]] + --[[ Show usage text(SMLCD and 57 or 80, 1, getUsage() .. "%", SMLSIZE + RIGHT + INVERS) + ]] end local function gpsDegMin(c, lat) diff --git a/src/iNav/menu.lua b/src/iNav/menu.lua index 0b093bfa..7000044f 100644 --- a/src/iNav/menu.lua +++ b/src/iNav/menu.lua @@ -185,7 +185,7 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, for i = data.configTop, bottom do local y = (i - data.configTop) * HIGH + TOP local z = config[i].z - local tmp = (data.configStatus == i and INVERS + data.configSelect or 0) + (config[z].d ~= nil and PREC1 or 0) + local tmp = (data.configStatus == i and INVERS + data.configSelect or 0) if config2[z].p == 1 and HORUS then tmp = tmp + CUSTOM_COLOR end From 3b6c2699eb2578bd8d98b3787060eddc7861cd40 Mon Sep 17 00:00:00 2001 From: Tim Eckel Date: Mon, 30 Sep 2019 13:13:57 -0400 Subject: [PATCH 31/34] Accomidate the Jumper T12 buttons using OpenTX 2.3, fix repeat direction on X9D and T12 --- dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3314 -> 3353 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6466 -> 6466 bytes src/iNav/data.lua | 11 ++++++++--- src/iNav/menu.lua | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index 0ad1a69a8b20c8dddd3f4853f15a2c6364ccfafa..536c1c291acad53a91a0d625bd9b9afb0023886d 100644 GIT binary patch delta 923 zcmZWoy>HV%6o2Q7ZAc18K-Gj2O4m+>5edo3#eup=pwdKDBN5txiLpb)l2Z;G(FiD5 z2uc;PRD5&|l#e#x#3CshOOYrrz@LD`&hy!Z0>jh2--mzi#lHMVEgf1+lM}a(tW*Ga zH^U&wvvhz1*QyK#vj79ggTiUj4fuSA!Iun=`Fxk;e*5#;9F#)8;rn?`=GdJaEK5Gd zKLh4*;I?80oU34OKrL&i6;}Zu0w6;PG^(H^4O5loYG}rRcE^OSl83KV4nRT4Fb&cI zNDAl;-%Ah=GJk1>OWpfNM;z$rr8Cgxj>(^fRpI*kc)M zc&=Gq=>>8xEw+s{{R%lO<262uRai&7j{HWQ0^r-+utdHkzZx@ioDU>6gflsraxduq zJr(#B1m(WBHO0&FPLJ*&-_!-bf-u|#;ksygi@~Jr9mSwwSYiGZplzoWOO2W{pkJGb z=kYxC?pxf(v!>1_x_I`??+HyaK(}Z69^!i+!v9U((bVhCJ@ul7TfzKg=chU{9K&|* h*m2PMu`!F2<>J`HWFd2=d~U)lj-4%>Z>F^^?H72821x(_ delta 890 zcmZuw&rcIU82xsK-PQ8L#F(^|fE+oRn3!-dnReRMtY;G%5){t<0mjRY9c%;mtF8yJ z5-&tWkBC12Wy?y--C$zW1OI}FCojI)?Sf4_Oul*Vee=H8o$1o)U-<_k#zbRu#pj01 zalx{jWc!vNU84d~WJt=%BFjpW_Ku+8B2kt|k||j(OnBEU(T{@c%l_+8DE-&Nt(Iu2 z>%p~$o(XTiwo{^}7GUz7P(jwra>5bz#WJ<4W%^l_M2yTrWYLHsBTwv(?lpjig$`%R zSQmD$4xH%dRW@A~$EeOamZ#L+y6X6PbFaoY$V*N~>{-h&2Y0`&_Mowb#LyNyPF+61 zD#3Y)5M;=>r^_{U7zB&C=i8ThdoO4;GB8h@39dBaZ8VlN;t%M93NwYX`CgE zLq>Kt-jl>O)mbyfVkjN^H0?J&57AdP=iuBRelJ^28c$I0+q^j~%~o_6^|@rgM>7*F zPNtqOv>qO10LCX1r&9f;r}(PJ_E$X>zQX=>u+J{|QDx1GDsRAH@paU7PfWc9_s)yH zVO8FP!{Q%s7VF9e@CNwJMMi`x+Vq&a6!reyj>tp_tUYTa$D( ze!wX=4)WuoB3e*H!gjYM?gdeE?DgFn{znrnZt{{mZf0cijL diff --git a/dist/SCRIPTS/TELEMETRY/iNav/menu.luac b/dist/SCRIPTS/TELEMETRY/iNav/menu.luac index 47d004e21ab5c8841464443bfb88238051fcdb44..57e29907f1b7ddfdc7c125173f68ac4a4a7a9d2c 100644 GIT binary patch delta 24 gcmX?PbjWDKRPM>5JR*}<{9 delta 24 gcmX?PbjWDKRPM>5JR*}<{9 diff --git a/src/iNav/data.lua b/src/iNav/data.lua index 5bbe86e8..0a629a4b 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -10,15 +10,20 @@ local function getTelemetryUnit(n) return (field and field.unit <= 10) and field.unit or 0 end +--[[ Replace with EVT_VIRTUAL_XXX at begining of 2020 and require OpenTX 2.3+ + Currently missing EVT_VIRTUAL_MENU on Jumper T12 + Also, changes in menu.lua, iNav.lua to use the ENV_VIRTUAL_XXX constants +]] local tx = string.sub(r, 0, 2) if HORUS or string.sub(r, 0, 3) == "x9e" or string.sub(r, 0, 4) == "x9li" or string.sub(r, 0, 6) == "x9d+20" then tx = "x7" end -local tmp = tx == "x9" and EVT_PLUS_FIRST or (tx == "xl" and EVT_UP_FIRST) +local tmp = tx == "x9" and EVT_PLUS_FIRST or EVT_UP_FIRST local PREV = tx == "x7" and EVT_ROT_LEFT or tmp -tmp = tx == "x9" and EVT_MINUS_FIRST or (tx == "xl" and EVT_DOWN_FIRST) +tmp = tx == "x9" and EVT_MINUS_FIRST or EVT_DOWN_FIRST local NEXT = tx == "x7" and EVT_ROT_RIGHT or tmp -local MENU = tx == "xl" and EVT_SHIFT_BREAK or (HORUS and EVT_SYS_FIRST or EVT_MENU_BREAK) +local MENU = tx == "xl" and EVT_SHIFT_BREAK or (HORUS and EVT_SYS_FIRST or (string.sub(r, 0, 3) == "t12" and EVT_VIRTUAL_PREVIOUS or EVT_MENU_BREAK)) + local general = getGeneralSettings() local distSensor = getTelemetryId("Dist") > -1 and "Dist" or (getTelemetryId("0420") > -1 and "0420" or "0007") local data = { diff --git a/src/iNav/menu.lua b/src/iNav/menu.lua index 7000044f..354824f5 100644 --- a/src/iNav/menu.lua +++ b/src/iNav/menu.lua @@ -150,9 +150,9 @@ local function view(data, config, units, lang, event, gpsDegMin, getTelemetryId, local i = config2[z].i == nil and 1 or config2[z].i if event == EVT_EXIT_BREAK then data.configSelect = 0 - elseif event == NEXT or event == EVT_UP_REPT or event == EVT_PLUS_REPT then + elseif event == NEXT or event == EVT_DOWN_REPT or event == EVT_MINUS_REPT then config[z].v = math.min(math.floor(config[z].v * 10 + i * 10) * 0.1, config[z].x == nil and 1 or config[z].x) - elseif event == PREV or event == EVT_DOWN_REPT or event == EVT_MINUS_REPT then + elseif event == PREV or event == EVT_UP_REPT or event == EVT_PLUS_REPT then config[z].v =math.max(math.floor(config[z].v * 10 - i * 10) * 0.1, config2[z].m == nil and 0 or config2[z].m) end From c41ec2b0bf576c34ab706a1596ab68ace99148ed Mon Sep 17 00:00:00 2001 From: teckel12 Date: Wed, 2 Oct 2019 08:58:02 -0400 Subject: [PATCH 32/34] Faster Taranis attitude display --- dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3353 -> 3314 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6466 -> 6466 bytes dist/SCRIPTS/TELEMETRY/iNav/pilot.luac | Bin 10742 -> 10872 bytes src/iNav/data.lua | 1 + src/iNav/pilot.lua | 45 ++++++++++++++++++++++--- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index 536c1c291acad53a91a0d625bd9b9afb0023886d..0ad1a69a8b20c8dddd3f4853f15a2c6364ccfafa 100644 GIT binary patch delta 890 zcmZuw&rcIU82xsK-PQ8L#F(^|fE+oRn3!-dnReRMtY;G%5){t<0mjRY9c%;mtF8yJ z5-&tWkBC12Wy?y--C$zW1OI}FCojI)?Sf4_Oul*Vee=H8o$1o)U-<_k#zbRu#pj01 zalx{jWc!vNU84d~WJt=%BFjpW_Ku+8B2kt|k||j(OnBEU(T{@c%l_+8DE-&Nt(Iu2 z>%p~$o(XTiwo{^}7GUz7P(jwra>5bz#WJ<4W%^l_M2yTrWYLHsBTwv(?lpjig$`%R zSQmD$4xH%dRW@A~$EeOamZ#L+y6X6PbFaoY$V*N~>{-h&2Y0`&_Mowb#LyNyPF+61 zD#3Y)5M;=>r^_{U7zB&C=i8ThdoO4;GB8h@39dBaZ8VlN;t%M93NwYX`CgE zLq>Kt-jl>O)mbyfVkjN^H0?J&57AdP=iuBRelJ^28c$I0+q^j~%~o_6^|@rgM>7*F zPNtqOv>qO10LCX1r&9f;r}(PJ_E$X>zQX=>u+J{|QDx1GDsRAH@paU7PfWc9_s)yH zVO8FP!{Q%s7VF9e@CNwJMMi`x+Vq&a6!reyj>tp_tUYTa$D( ze!wX=4)WuoB3e*H!gjYM?gdeE?DgFn{znrnZt{{mZf0cijL delta 923 zcmZWoy>HV%6o2Q7ZAc18K-Gj2O4m+>5edo3#eup=pwdKDBN5txiLpb)l2Z;G(FiD5 z2uc;PRD5&|l#e#x#3CshOOYrrz@LD`&hy!Z0>jh2--mzi#lHMVEgf1+lM}a(tW*Ga zH^U&wvvhz1*QyK#vj79ggTiUj4fuSA!Iun=`Fxk;e*5#;9F#)8;rn?`=GdJaEK5Gd zKLh4*;I?80oU34OKrL&i6;}Zu0w6;PG^(H^4O5loYG}rRcE^OSl83KV4nRT4Fb&cI zNDAl;-%Ah=GJk1>OWpfNM;z$rr8Cgxj>(^fRpI*kc)M zc&=Gq=>>8xEw+s{{R%lO<262uRai&7j{HWQ0^r-+utdHkzZx@ioDU>6gflsraxduq zJr(#B1m(WBHO0&FPLJ*&-_!-bf-u|#;ksygi@~Jr9mSwwSYiGZplzoWOO2W{pkJGb z=kYxC?pxf(v!>1_x_I`??+HyaK(}Z69^!i+!v9U((bVhCJ@ul7TfzKg=chU{9K&|* h*m2PMu`!F2<>J`HWFd2=d~U)lj-4%>Z>F^^?H72821x(_ diff --git a/dist/SCRIPTS/TELEMETRY/iNav/menu.luac b/dist/SCRIPTS/TELEMETRY/iNav/menu.luac index 57e29907f1b7ddfdc7c125173f68ac4a4a7a9d2c..47d004e21ab5c8841464443bfb88238051fcdb44 100644 GIT binary patch delta 24 gcmX?PbjWDKRPM>5JR*}<{9 delta 24 gcmX?PbjWDKRPM>5JR*}<{9 diff --git a/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac b/dist/SCRIPTS/TELEMETRY/iNav/pilot.luac index 9c2772076e9b5383bf7c2a50a009597e919275d7..07e135c12a5457c7ce63eac706952b2c0e460d9e 100644 GIT binary patch delta 4376 zcmbtX-)|gO6+Yv&ckG?J{vp{rvvwS+s!0(gG>`Dq-PGMNow4JP2F2c(@=%l?g!GB$ zxhtd{$#ZuD%2RRu4&n**AJ~yBkJ1@OQ3aL23N2DWLgEbx@yK`Y{Mg+%Mgc5YJ3DjF zne(0Vo$s9e=kf)^LZqx@jt5uii0B1t+nzGqs!fGqu#Bu$YGnyGNysAo8qe@G> z>T&Dnc%2ShD$R+?;zmU*e);J?yp<9H;>5#Bl}_H3!Qp!E9Od`5c%D|A^uA^+5Rgyz z4Z{fIS(;5MMl+eEE?Y0ohm7bX3*<m zx))yV@FS1x_%AhX5FETp8q&1u&;%X~?<2tc zzB$miOj~}Q7#U5ZRi-*mt8ILb+J-D2Q)m0ewh)yypa1V70uBrpG z@&HJtoD~PSt{gZfY3@a8xmU<%JG3E$g&IyY46gT_EtJC~Mc!n?vfUPKxS_QwNLz5< zvzo~Q)m&yhYOGq`%G-zxC=|lrueH83jxUmyEK^g=QCE?J6ghyh5*kYcl$9c|A$jI~ z<2D@!b_IcGGAlh?htBIjdb`qeUq1x|&#&RY!V8hu!B&3P8OzH^731YrTFA0H_|@O=u&sl!rBHqB^0EZn!I{zWa)XZnmw-K-)5I%^4qb6Yo&R6_=Sk^1pI1ValyMf= zMua{%tX&Jjn#H4Mpe{vx90U`p{6!W`@N9-gVb$Kcm2zLYSmNXggWQ(gIgw$M{>Vi}B+J z8|D!{Bj>THyLUmm4NHy^U3hnCF1c&v9Mc89Gxob@m`@s-=pf))FEAeN;=3Q*r8+fC zspcJLYM2eou!r5CcGcOcZaM*fXlz&eLBI!Sq^gK2n^S?U064yFUJJx_?r6JeX> z>N>T0>+}qAo*On8Kid#?1I(XMyP>9mXJ?j_>)oJ1QQW2zXq%^IQ(U5xthUlnckj`H zxM#K8Tab~Alp|VY$M+_slN?nTFAwdV8ueqt%wM4VW3Cncok=N}nvDP;t~a2rWiT;~ zs&Hu3M-1jkXFsNTnvdKE)-W>bDYKru}5=fIz7LFlUX5l=3W9S@_ z6>7`w7iw#}_pvsx38}Uy1Ct7^><2T@v^H6T&(K1pG5?YCInsJ)S~QRx@wimbA?zAy z;+xb$I=gO~Qt1@POEQ&xXU!aQfE{K$g%?s^KpT#x6TMzWnHr4B(w{jnWl-?x!D)Q| z>^cNGS|Jz2BVI4DNI zc_{6549WNF!!aPo1C?ytx7iog&lp#mTwbD_N7Ans29y8Uv3rJNS30Isj(f)MA>Sqf zZPSXBe`G{+FO7)TB_-o&S;?FBp}Bs%X8s~*nijXQylOlrVJDbP1qAi%7!ZX*S}B#* zphRWSz+fwl?If)LYeS6rgWi=2=Epyw$ap|lhD|kloNV?O$p1zVU?JlA5ePOGHS{@G zJgIU|3}I^Sw4Ego=Op7@Z&!sWozh5sofg)jW!0si85Hu)7Hw;RwfLKcADPC zQenFdBxVD)=zZlEi-eCoM_q$;5-4Q5qKloJ8>7ERN-}&Bt%d-T4^P>@05#69qyehUCMlDw^^0CEjZeRLq@A#LqOWIsfi40F zl&>yZuH&v2gzR8VjPP7;Uy$9p{N)#cypo`5vPEJyWoQEr+@16q9LNtzhf$K9AzZT` zq%3|}w8^W(a zxXU95H92T1K3HB54$t>xK*(N)X>`QasfBLaQvu5uart!ZVBhpg0n`7F|2Zq6*zQJx!QOk#u0u zc1k2sA4ZS$)ZMw|{m`RVzmQ`Rp(l7GK`Yl_t0RwKP=eB!+Jo2h>Tbgp`? delta 4269 zcmbVP&u<&o5uOz#uEe*LrNY`JrN}J;+bt3|^{GHlC2fbRW|xc_H-KeIO%ILjBuMfn z?BhiQ^wx3!9~A@bxu+uk0JktiAiK01v^ClaX)o=eMbANx{pRg2(z1fK0t7Diy_q-j zy>Gr5{`)6i-TdSSi$64o&eQk9U$=vLaR0!qJvkWH3}wMKB}z}A;4Z-6N7k}o~W8Il4a^xTgCo?MRcSC2}tgTTeOM8*r=NsO}^G> z)~1KO1CR7Ud7wskkv6hSjpX7Phr>@WeR$@G5C5MXP5J35S7$!K=h>O3Nd%m^K8z}| zD&8g2d)ICWf`gYS5(H#uZst8Q&EGpCLo#al{t@g9WX(|LsG8y}+JGMiMBu$Wu_FfR z5>3>b!U!(~>1O}!;tG0L;0;fB14yEs733vJX+X+u2lp~|FkHLqy@;ovtZhV&xRa9i&i;s2Y zI4{jSO+3)|K9iZaS7vs6S7)Y;85Qq4>76InsE-eTg=w#(Netn0hxgs?t|)r>z~|0y%ah;X@($S5{T zL$#b4mg^mVi~5nPzea_piFAF8# z6g%~vr=&y~PSm)z9J=;KCEzjubctDH(+-!Z>xZ?&aBLrgrPcde^av`M8t z-n3n*k}tT@QvapdQ7szAeL51U^8w20D7#zc!Z?19z7YR}a_vHdPM4+Wy+6-B^56y_ zTVe0n)Kkiy@h?^>C^yV=DH- zJtFfKXmb@a!w(8gHR7Xi0K1jnP}Es>+Q2q4x|(-*6ffv>d*F*5nci8y)TnRRM9wPorh0K%>I&_Pob- z=>YaLCud+)7gJwAV1S?tzcJCVw@ctpmHjy*oE#KR|8?qa3PUh{+OW)Op~z|`AWmrd zV09(E`y%TsY4Po;`v=+1$XXMVuSH9z`U{Bo7|@}?pn*Wo(LXMbo7_Yz{wvyS-a~ke zDkk2W);o>sX#c#HUs1-bfV5*Z4>Em?WB&}tK0BsUj=SOy(0K=e_UR<6rYOEr3Yz$? z?jxIC!1qdvE@aq^AKO1x5oCA_!Wc4VeH-f6&luen&c#aJ>&{s6M2oRJLwX9-0*NM?0!}0%Mmn_u*(JYH0RJb|5R?VJw^|M)VlD z&9K{W!|k*a;?7;`qe8@7|08rnXbE>otPQMJvWXYZ;cK*s(Yym43A&bQ?17E>;Spdn zVYrbQ8VSbiOy`Z{HC++8jh>WfOSS|p9SXM=#plVeOll`9dZ^jMlvE%<^FZJ>%5IGR z8_o`+Fq#XbtNJNKa!$JOp8?rp8{~qX8`2eh^oA2{u%5y8X(#RNgDRncWVWrf!gdFl z@WkWd?ltsaoQugxKVyv(g_PIE>NdEM>3;-yorZZD0n^$o5HPJi5ZJ|ZdyTqb*yx7) z1$w2^6mp)53ZIZ-)A|@yf}k>F+ab6VFtjb)U4qP$#|;ycEQ`+b2RJQLM}DY!S>)Lv z(}8>QID`ZI_>}!@)|suhK|vW|mH4h-bT}KIIvAo-+FpjL$t5>L6(I>+Uqg3Qf3qND z8#Cq*>pZ4m+H7jo47Y=Vp~G-5WoQd>>fcVE!GR$dp0jwEWP4CGL+hs*i~q}P@q?xa zSbdKS{{oVI<22MRh>?{4EuB5vH|S3(AHrrCc+w=>fB5q1`ocGX*>67k S`-R^wprrZlv&qF@E&K;N?-}C& diff --git a/src/iNav/data.lua b/src/iNav/data.lua index 0a629a4b..06306524 100644 --- a/src/iNav/data.lua +++ b/src/iNav/data.lua @@ -12,6 +12,7 @@ end --[[ Replace with EVT_VIRTUAL_XXX at begining of 2020 and require OpenTX 2.3+ Currently missing EVT_VIRTUAL_MENU on Jumper T12 + Can remove PREV, NEXT, MENU constants from code Also, changes in menu.lua, iNav.lua to use the ENV_VIRTUAL_XXX constants ]] local tx = string.sub(r, 0, 2) diff --git a/src/iNav/pilot.lua b/src/iNav/pilot.lua index 04fe11fe..556ced51 100644 --- a/src/iNav/pilot.lua +++ b/src/iNav/pilot.lua @@ -193,18 +193,55 @@ local function view(data, config, modes, dir, units, labels, gpsDegMin, hdopGrap local x1, y1, x2, y2 = X_CNTR - x - 2.5, 35 + y - p, X_CNTR + x - 2.5, 35 - y - p local a = (y2 - y1) / (x2 - x1 + .001) local y = y1 - ((x1 - LEFT_POS + 1) * a) + --[[ Old slower method for x = LEFT_POS + 1, RIGHT_POS - 1 do local yy = y + 0.5 if (not upsideDown and yy < 64) or (upsideDown and yy > 7) then line(x, math.min(math.max(yy, 8), 63), x, upsideDown and 8 or 63, SOLID, SMLCD and 0 or GREY_DEFAULT) - --[[ Faster? + end + y = y + a + end + ]] + -- Faster method + local width = math.min(math.max(4 - math.ceil(math.abs(roll - 90) * 0.05), 1), 3) + for x = LEFT_POS + 1, RIGHT_POS - 1, width do + local yy = y + 0.5 + if (not upsideDown and yy < 64) or (upsideDown and yy > 7) then local t = upsideDown and 8 or math.min(math.max(yy, 8), 63) local h = upsideDown and math.min(math.max(yy, 8), 64) - t or 65 - t - fill(x, t, 3, h, GREY_DEFAULT) - ]] + fill(x, t, width, h, GREY_DEFAULT) end - y = y + a + y = y + a * width + end + --[[ Even faster? + local width = math.min(math.max(4 - math.ceil(math.abs(roll - 90) * 0.05), 1), 3) + local lastx = -1 + for x = LEFT_POS + 1, RIGHT_POS - 1, width do + if upsideDown then + if y > 8 then + local h = math.min(math.max(y + 0.5, 8), 64) - 8 + if roll > 90 and h == 56 then + lastx = x + break + end + fill(x, 8, width, h, GREY_DEFAULT) + end + else + if y < 64 then + local t = math.min(math.max(y + 0.5, 8), 63) + if roll < 90 and t == 8 then + lastx = x + break + end + fill(x, t, width, 65 - t, GREY_DEFAULT) + end + end + y = y + a * width + end + if lastx then + fill(lastx, 8, RIGHT_POS - lastx, 57, GREY_DEFAULT) end + ]] local inside = SMLCD and 6 or 13 local outside = SMLCD and 14 or 24 line(X_CNTR - outside, 35, X_CNTR - inside, 35, SOLID, SMLCD and 0 or FORCE) From 91fb61f182b93722d41e6b881a0c2b4d163294c9 Mon Sep 17 00:00:00 2001 From: Tim Eckel Date: Wed, 16 Oct 2019 14:00:03 -0400 Subject: [PATCH 33/34] Changed INAV version requirement to 2.1.0 to clean up instructions --- README.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 8325cd54..92332f9c 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,9 @@ ## Features -* Works with all FrSky telemetry receivers (X, R9 and D series), all TBS Crossfire receivers, all FrSky Taranis and Horus transmitters, and the Jumper T12/T16 transmitter -* Compatible with Betaflight using FrSky X or R9 series receivers (with reduced functionality) and TBS Crossfire support with Betaflight 4.0.0+ +* Supported receivers: All FrSky telemetry receivers (X, R9 and D series) and all TBS Crossfire receivers +* Supported transmitters: All FrSky Taranis and Horus transmitters, Jumper T12 & T16 and the FLYSKY Nirvana NV14 +* Compatible with Betaflight using FrSky X or R9 series receivers (with reduced functionality) and TBS Crossfire support with Betaflight v4.0.0+ * Launch/pilot-based model orientation and location indicators (great for lost orientation/losing sight of your model) * Compass-based direction indicator (with magnetometer sensor on multirotor or fixed-wing with GPS) * Pilot (glass cockpit) view which includes attitude indicator as well as pilot-familiar layout of additional data @@ -57,10 +58,10 @@ ## Requirements -* [OpenTX v2.2.2+](http://www.open-tx.org/) running on Taranis Q X7/Q X7S, X9D/X9D+, X9E, X9 Lite, X-Lite/X-Lite Pro, Horus X10/X10S or X12S (OpenTX v2.2.3+ is suggested) +* [INAV v2.1.0+](https://github.com/iNavFlight/inav/releases) running on your flight controller - Also compatible with Betaflight v4.0.0+ (with reduced functionality) +* [OpenTX v2.2.3+](http://www.open-tx.org/) running on Taranis Q X7/Q X7S, X9D/X9D+, X9E, X9 Lite, X-Lite/X-Lite Pro, Horus X10/X10S or X12S * Jumper T12/T16 requires [JumperTX 2.2.3+](https://www.jumper.xyz/) (May 23, 2019 or after release) * FrSky X, R9 or D series telemetry receiver: X4RSB, X8R, XSR, R-XSR, XSR-M, XSR-E, RX4R, RX6R, R9, R9 Slim, R9 Slim+, R9 Mini, R9 MM, D8R-II plus, D8R-XP, D4R-II, etc. or any TBS Crossfire receiver: Micro, Nano, Diversity, etc. -* [INAV v1.7.3+](https://github.com/iNavFlight/inav/releases) running on your flight controller (INAV v2.1.0+ is suggested for full functionality) - Also compatible with Betaflight (with reduced functionality) * GPS - If you're looking for a GPS module, I suggest the [Beitian BN-880](https://us.banggood.com/custlink/vvGD6DZWyg) ## Suggested Sensors @@ -71,13 +72,8 @@ ## Notes -* INAV v2.1.0+ is required for TBS Crossfire support (some telemetry missing from Crossfire: HDOP, GPS altitude, variometer and heading hold notifications) -* INAV v2.0.0+ is required for FrSky D-series telemetry and proper GPS accuracy (HDOP) display -* If using INAV v2.0+, set `frsky_pitch_roll = ON` in CLI settings for more accurate attitude display -* INAV v1.9.1+ is required for F.Port compatibility -* INAV v1.8.0+ is required for `Home reset` voice notification -* OpenTX v2.2.2 (release version) is required for compatibility with Taranis X-Lite transmitter and Crossfire telemetry -* Betaflight 4.0.0+ mostly works, except for some GPS and flight mode information which is missing from Betaflight +* Some telemetry is missing from Crossfire: HDOP, GPS altitude and some secondary flight mode notifications like heading hold +* Betaflight v4.0.0+ mostly works, except for some GPS and flight mode information which is missing from Betaflight * Use the OSD to control VTx band, frequency and power (except for on 2019 series Taranis transmitters, Betaflight's lua script can't run at the same time as INAV Lua Telemetry due to limited transmitter memory) ## Special Thanks From bc40a453717539c21d6c2a4162d601c221effbeb Mon Sep 17 00:00:00 2001 From: teckel12 Date: Sun, 31 May 2020 18:32:01 -0400 Subject: [PATCH 34/34] Allowed lower cell calculation voltage for LiFE batteries --- dist/SCRIPTS/TELEMETRY/iNav/data.luac | Bin 3314 -> 3353 bytes dist/SCRIPTS/TELEMETRY/iNav/menu.luac | Bin 6466 -> 6466 bytes src/iNav/menu.lua | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/SCRIPTS/TELEMETRY/iNav/data.luac b/dist/SCRIPTS/TELEMETRY/iNav/data.luac index 0ad1a69a8b20c8dddd3f4853f15a2c6364ccfafa..536c1c291acad53a91a0d625bd9b9afb0023886d 100644 GIT binary patch delta 923 zcmZWoy>HV%6o2Q7ZAc18K-Gj2O4m+>5edo3#eup=pwdKDBN5txiLpb)l2Z;G(FiD5 z2uc;PRD5&|l#e#x#3CshOOYrrz@LD`&hy!Z0>jh2--mzi#lHMVEgf1+lM}a(tW*Ga zH^U&wvvhz1*QyK#vj79ggTiUj4fuSA!Iun=`Fxk;e*5#;9F#)8;rn?`=GdJaEK5Gd zKLh4*;I?80oU34OKrL&i6;}Zu0w6;PG^(H^4O5loYG}rRcE^OSl83KV4nRT4Fb&cI zNDAl;-%Ah=GJk1>OWpfNM;z$rr8Cgxj>(^fRpI*kc)M zc&=Gq=>>8xEw+s{{R%lO<262uRai&7j{HWQ0^r-+utdHkzZx@ioDU>6gflsraxduq zJr(#B1m(WBHO0&FPLJ*&-_!-bf-u|#;ksygi@~Jr9mSwwSYiGZplzoWOO2W{pkJGb z=kYxC?pxf(v!>1_x_I`??+HyaK(}Z69^!i+!v9U((bVhCJ@ul7TfzKg=chU{9K&|* h*m2PMu`!F2<>J`HWFd2=d~U)lj-4%>Z>F^^?H72821x(_ delta 890 zcmZuw&rcIU82xsK-PQ8L#F(^|fE+oRn3!-dnReRMtY;G%5){t<0mjRY9c%;mtF8yJ z5-&tWkBC12Wy?y--C$zW1OI}FCojI)?Sf4_Oul*Vee=H8o$1o)U-<_k#zbRu#pj01 zalx{jWc!vNU84d~WJt=%BFjpW_Ku+8B2kt|k||j(OnBEU(T{@c%l_+8DE-&Nt(Iu2 z>%p~$o(XTiwo{^}7GUz7P(jwra>5bz#WJ<4W%^l_M2yTrWYLHsBTwv(?lpjig$`%R zSQmD$4xH%dRW@A~$EeOamZ#L+y6X6PbFaoY$V*N~>{-h&2Y0`&_Mowb#LyNyPF+61 zD#3Y)5M;=>r^_{U7zB&C=i8ThdoO4;GB8h@39dBaZ8VlN;t%M93NwYX`CgE zLq>Kt-jl>O)mbyfVkjN^H0?J&57AdP=iuBRelJ^28c$I0+q^j~%~o_6^|@rgM>7*F zPNtqOv>qO10LCX1r&9f;r}(PJ_E$X>zQX=>u+J{|QDx1GDsRAH@paU7PfWc9_s)yH zVO8FP!{Q%s7VF9e@CNwJMMi`x+Vq&a6!reyj>tp_tUYTa$D( ze!wX=4)WuoB3e*H!gjYM?gdeE?DgFn{znrnZt{{mZf0cijL diff --git a/dist/SCRIPTS/TELEMETRY/iNav/menu.luac b/dist/SCRIPTS/TELEMETRY/iNav/menu.luac index 47d004e21ab5c8841464443bfb88238051fcdb44..7af585bf8a3149203b4e6003bd0404a6bf1e8cb6 100644 GIT binary patch delta 37 qcmX?PbjWDKRPM>5JR*}5JR*}