From c9c966be44d446fd74daedde436d976114ab56de Mon Sep 17 00:00:00 2001 From: Carsten Wache Date: Mon, 30 Dec 2019 11:31:34 +0100 Subject: [PATCH 1/6] adjust events to support OTX2.3. Cleanup --- Makefile | 53 +++++++++++-------------- README.md | 16 ++++++++ src/{X7 => 128x64}/KISS/alarms.lua | 0 src/{X7 => 128x64}/KISS/filters.lua | 0 src/{X7 => 128x64}/KISS/pids.lua | 0 src/{X7 => 128x64}/KISS/rates.lua | 0 src/{X7 => 128x64}/KISS/setpnt.lua | 0 src/{X7 => 128x64}/KISS/tpa.lua | 0 src/{X7 => 128x64}/KISS/vtx.lua | 0 src/{X7 => 128x64}/Kiss.lua | 6 +-- src/{X9 => 212x64}/KISS/alarms.lua | 0 src/{X9 => 212x64}/KISS/filters.lua | 0 src/{X9 => 212x64}/KISS/pids.lua | 0 src/{X9 => 212x64}/KISS/rates.lua | 0 src/{X9 => 212x64}/KISS/setpnt.lua | 0 src/{X9 => 212x64}/KISS/tpa.lua | 0 src/{X9 => 212x64}/KISS/vtx.lua | 0 src/{X9 => 212x64}/Kiss.lua | 4 +- src/{Horus => 480x272}/KISS/alarms.lua | 0 src/{Horus => 480x272}/KISS/filters.lua | 0 src/{Horus => 480x272}/KISS/pids.lua | 0 src/{Horus => 480x272}/KISS/rates.lua | 0 src/{Horus => 480x272}/KISS/setpnt.lua | 2 +- src/{Horus => 480x272}/KISS/tpa.lua | 0 src/{Horus => 480x272}/KISS/vtx.lua | 0 src/{Horus => 480x272}/Kiss.lua | 4 +- src/X-Lite/Kiss.lua | 44 -------------------- src/common/KissUI.lua | 33 ++++++++------- 28 files changed, 63 insertions(+), 99 deletions(-) rename src/{X7 => 128x64}/KISS/alarms.lua (100%) rename src/{X7 => 128x64}/KISS/filters.lua (100%) rename src/{X7 => 128x64}/KISS/pids.lua (100%) rename src/{X7 => 128x64}/KISS/rates.lua (100%) rename src/{X7 => 128x64}/KISS/setpnt.lua (100%) rename src/{X7 => 128x64}/KISS/tpa.lua (100%) rename src/{X7 => 128x64}/KISS/vtx.lua (100%) rename src/{X7 => 128x64}/Kiss.lua (88%) rename src/{X9 => 212x64}/KISS/alarms.lua (100%) rename src/{X9 => 212x64}/KISS/filters.lua (100%) rename src/{X9 => 212x64}/KISS/pids.lua (100%) rename src/{X9 => 212x64}/KISS/rates.lua (100%) rename src/{X9 => 212x64}/KISS/setpnt.lua (100%) rename src/{X9 => 212x64}/KISS/tpa.lua (100%) rename src/{X9 => 212x64}/KISS/vtx.lua (100%) rename src/{X9 => 212x64}/Kiss.lua (89%) rename src/{Horus => 480x272}/KISS/alarms.lua (100%) rename src/{Horus => 480x272}/KISS/filters.lua (100%) rename src/{Horus => 480x272}/KISS/pids.lua (100%) rename src/{Horus => 480x272}/KISS/rates.lua (100%) rename src/{Horus => 480x272}/KISS/setpnt.lua (99%) rename src/{Horus => 480x272}/KISS/tpa.lua (100%) rename src/{Horus => 480x272}/KISS/vtx.lua (100%) rename src/{Horus => 480x272}/Kiss.lua (96%) delete mode 100644 src/X-Lite/Kiss.lua diff --git a/Makefile b/Makefile index 7081f96..441ce98 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -VERSION = 0.14 +VERSION = 1.0.0 GIT_HASH = $(shell git log -1 --pretty=format:"%h") .PHONY: all @@ -7,14 +7,13 @@ all: clean prepare luatmp lua zip .PHONY: luatmp luatmp: - cat src/common/KissProtocolSPort.lua src/X9/Kiss.lua src/common/KissUI.lua > tmp/X9SP.lua - cat src/common/KissProtocolSPort.lua src/X7/Kiss.lua src/common/KissUI.lua > tmp/X7SP.lua - cat src/common/KissProtocolSPort.lua src/X-Lite/Kiss.lua src/common/KissUI.lua > tmp/X-LiteSP.lua - cat src/common/KissProtocolSPort.lua src/Horus/Kiss.lua src/common/KissUI.lua > tmp/HorusSP.lua - cat src/common/KissProtocolCF.lua src/X9/Kiss.lua src/common/KissUI.lua > tmp/X9CF.lua - cat src/common/KissProtocolCF.lua src/X7/Kiss.lua src/common/KissUI.lua > tmp/X7CF.lua - cat src/common/KissProtocolCF.lua src/X-Lite/Kiss.lua src/common/KissUI.lua > tmp/X-LiteCF.lua - cat src/common/KissProtocolCF.lua src/Horus/Kiss.lua src/common/KissUI.lua > tmp/HorusCF.lua + cat src/common/KissProtocolSPort.lua src/212x64/Kiss.lua src/common/KissUI.lua > tmp/212x64_SPORT.lua + cat src/common/KissProtocolSPort.lua src/128x64/Kiss.lua src/common/KissUI.lua > tmp/128x64_SPORT.lua + cat src/common/KissProtocolSPort.lua src/480x272/Kiss.lua src/common/KissUI.lua > tmp/480x272_SPORT.lua + + cat src/common/KissProtocolCF.lua src/212x64/Kiss.lua src/common/KissUI.lua > tmp/212x64_CF.lua + cat src/common/KissProtocolCF.lua src/128x64/Kiss.lua src/common/KissUI.lua > tmp/128x64_CF.lua + cat src/common/KissProtocolCF.lua src/480x272/Kiss.lua src/common/KissUI.lua > tmp/480x272_CF.lua @@ -28,40 +27,34 @@ clean: .PHONY: prepare prepare: - mkdir -p obj/X9/ - mkdir -p obj/X7/ - mkdir -p obj/Horus/ - mkdir -p obj/X-Lite/ + mkdir -p obj/212x64/ + mkdir -p obj/128x64/ + mkdir -p obj/480x272/ mkdir -p tmp/ .PHONY: lua lua: - cp tmp/X9SP.lua obj/X9/KissSP.lua - cp tmp/X7SP.lua obj/X7/KissSP.lua - cp tmp/X-LiteSP.lua obj/X-Lite/KissSP.lua - cp tmp/HorusSP.lua obj/Horus/KissSP.lua - + cp tmp/212x64_SPORT.lua obj/212x64/KissSP.lua + cp tmp/128x64_SPORT.lua obj/128x64/KissSP.lua + cp tmp/480x272_SPORT.lua obj/480x272/KissSP.lua - cp tmp/X9CF.lua obj/X9/KissCF.lua - cp tmp/X7CF.lua obj/X7/KissCF.lua - cp tmp/X-LiteCF.lua obj/KissCF.lua - cp tmp/HorusCF.lua obj/Horus/KissCF.lua + cp tmp/212x64_CF.lua obj/212x64/KissCF.lua + cp tmp/128x64_CF.lua obj/128x64/KissCF.lua + cp tmp/480x272_CF.lua obj/480x272/KissCF.lua - cp -R src/X7/KISS obj/X7/KISS - cp -R src/X7/KISS obj/X-Lite/KISS - cp -R src/X9/KISS obj/X9/KISS - cp -R src/Horus/KISS obj/Horus/KISS + cp -R src/212x64/KISS obj/212x64/KISS + cp -R src/128x64/KISS obj/128x64/KISS + cp -R src/480x272/KISS obj/480x272/KISS find ./obj/ -type f -name '*.lua' -exec sh -c 'node node_modules/luamin/bin/luamin --file {} > {}.tmp' \; -exec sh -c 'mv {}.tmp {} ' \; .PHONY: zip zip: test -d dist || mkdir dist - cd obj/X9/; zip -r ../../dist/kiss-x9-lua-scripts-${VERSION}-${GIT_HASH}.zip * - cd obj/X7/; zip -r ../../dist/kiss-x7-lua-scripts-${VERSION}-${GIT_HASH}.zip * - cd obj/X-Lite/; zip -r ../../dist/kiss-x_lite-lua-scripts-${VERSION}-${GIT_HASH}.zip * - cd obj/Horus/; zip -r ../../dist/kiss-horus-lua-scripts-${VERSION}-${GIT_HASH}.zip * + cd obj/212x64/; zip -r ../../dist/kiss-212x64-lua-scripts-${VERSION}.zip * + cd obj/128x64/; zip -r ../../dist/kiss-128x64-lua-scripts-${VERSION}.zip * + cd obj/480x272/; zip -r ../../dist/kiss-480x272-lua-scripts-${VERSION}.zip * .PHONY: dist dist: clean prepare luatmp lua zip diff --git a/README.md b/README.md index 178c578..25d1259 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,19 @@ Please visit the [releases page](https://github.com/flyduino/kissfc-tx-lua-scrip Unzip the files from the link above and copy both of the lua files into either/both **/SCRIPTS/TELEMETRY** (for telemetry page) or **/SCRIPTS/TOOLS** (to be shown in tools section introduced in Open-TX 2.3.0). In addition the **KISS* folder has to be placed in the root folder on your SD card. +## Flavours + +### 128x64 Display +- Taranis Q X7 / X7S +- Taranis X-Lite / X-Lite S / X-Lite Pro +- Taranis X9 Lite / X9 Lite Pro +- Jumper T12 + +### 212x64 Display +- Taranis X9D / X9D+ / X9D+ 2019 +- Taranis X9E + +### 480x272 Color Display +- Horus X12S +- Horus X10 / X10S +- Jumper T16 \ No newline at end of file diff --git a/src/X7/KISS/alarms.lua b/src/128x64/KISS/alarms.lua similarity index 100% rename from src/X7/KISS/alarms.lua rename to src/128x64/KISS/alarms.lua diff --git a/src/X7/KISS/filters.lua b/src/128x64/KISS/filters.lua similarity index 100% rename from src/X7/KISS/filters.lua rename to src/128x64/KISS/filters.lua diff --git a/src/X7/KISS/pids.lua b/src/128x64/KISS/pids.lua similarity index 100% rename from src/X7/KISS/pids.lua rename to src/128x64/KISS/pids.lua diff --git a/src/X7/KISS/rates.lua b/src/128x64/KISS/rates.lua similarity index 100% rename from src/X7/KISS/rates.lua rename to src/128x64/KISS/rates.lua diff --git a/src/X7/KISS/setpnt.lua b/src/128x64/KISS/setpnt.lua similarity index 100% rename from src/X7/KISS/setpnt.lua rename to src/128x64/KISS/setpnt.lua diff --git a/src/X7/KISS/tpa.lua b/src/128x64/KISS/tpa.lua similarity index 100% rename from src/X7/KISS/tpa.lua rename to src/128x64/KISS/tpa.lua diff --git a/src/X7/KISS/vtx.lua b/src/128x64/KISS/vtx.lua similarity index 100% rename from src/X7/KISS/vtx.lua rename to src/128x64/KISS/vtx.lua diff --git a/src/X7/Kiss.lua b/src/128x64/Kiss.lua similarity index 88% rename from src/X7/Kiss.lua rename to src/128x64/Kiss.lua index c68337f..308cc31 100644 --- a/src/X7/Kiss.lua +++ b/src/128x64/Kiss.lua @@ -1,6 +1,6 @@ --- BEGIN X7 +-- BEGIN X7 / XLITE -local RADIO = "X7" +local RADIO = "128x64" local drawScreenTitle = function(title, currentPage, totalPages) lcd.drawScreenTitle('Kiss Setup: '..title, currentPage, totalPages) @@ -38,7 +38,7 @@ local function getDefaultTextOptions() return 0 end -local EVT_MENU_LONG = bit32.bor(bit32.band(EVT_MENU_BREAK,0x1f),0x80) +local EVT_VIRTUAL_MENU_LONG = bit32.bor(bit32.band(EVT_MENU_BREAK,0x1f),0x80) -- END X7 diff --git a/src/X9/KISS/alarms.lua b/src/212x64/KISS/alarms.lua similarity index 100% rename from src/X9/KISS/alarms.lua rename to src/212x64/KISS/alarms.lua diff --git a/src/X9/KISS/filters.lua b/src/212x64/KISS/filters.lua similarity index 100% rename from src/X9/KISS/filters.lua rename to src/212x64/KISS/filters.lua diff --git a/src/X9/KISS/pids.lua b/src/212x64/KISS/pids.lua similarity index 100% rename from src/X9/KISS/pids.lua rename to src/212x64/KISS/pids.lua diff --git a/src/X9/KISS/rates.lua b/src/212x64/KISS/rates.lua similarity index 100% rename from src/X9/KISS/rates.lua rename to src/212x64/KISS/rates.lua diff --git a/src/X9/KISS/setpnt.lua b/src/212x64/KISS/setpnt.lua similarity index 100% rename from src/X9/KISS/setpnt.lua rename to src/212x64/KISS/setpnt.lua diff --git a/src/X9/KISS/tpa.lua b/src/212x64/KISS/tpa.lua similarity index 100% rename from src/X9/KISS/tpa.lua rename to src/212x64/KISS/tpa.lua diff --git a/src/X9/KISS/vtx.lua b/src/212x64/KISS/vtx.lua similarity index 100% rename from src/X9/KISS/vtx.lua rename to src/212x64/KISS/vtx.lua diff --git a/src/X9/Kiss.lua b/src/212x64/Kiss.lua similarity index 89% rename from src/X9/Kiss.lua rename to src/212x64/Kiss.lua index 3bd2aeb..2f7ffde 100644 --- a/src/X9/Kiss.lua +++ b/src/212x64/Kiss.lua @@ -1,7 +1,7 @@ -- BEGIN X9 -RADIO = "X9" +local RADIO = "212x64" local drawScreenTitle = function(title, currentPage, totalPages) lcd.drawScreenTitle('Kiss Setup: '..title, currentPage, totalPages) @@ -39,6 +39,6 @@ local function getDefaultTextOptions() return 0 end -local EVT_MENU_LONG = bit32.bor(bit32.band(EVT_MENU_BREAK,0x1f),0x80) +local EVT_VIRTUAL_MENU_LONG = bit32.bor(bit32.band(EVT_MENU_BREAK,0x1f),0x80) -- END X9 \ No newline at end of file diff --git a/src/Horus/KISS/alarms.lua b/src/480x272/KISS/alarms.lua similarity index 100% rename from src/Horus/KISS/alarms.lua rename to src/480x272/KISS/alarms.lua diff --git a/src/Horus/KISS/filters.lua b/src/480x272/KISS/filters.lua similarity index 100% rename from src/Horus/KISS/filters.lua rename to src/480x272/KISS/filters.lua diff --git a/src/Horus/KISS/pids.lua b/src/480x272/KISS/pids.lua similarity index 100% rename from src/Horus/KISS/pids.lua rename to src/480x272/KISS/pids.lua diff --git a/src/Horus/KISS/rates.lua b/src/480x272/KISS/rates.lua similarity index 100% rename from src/Horus/KISS/rates.lua rename to src/480x272/KISS/rates.lua diff --git a/src/Horus/KISS/setpnt.lua b/src/480x272/KISS/setpnt.lua similarity index 99% rename from src/Horus/KISS/setpnt.lua rename to src/480x272/KISS/setpnt.lua index 3e7f763..0bafb22 100644 --- a/src/Horus/KISS/setpnt.lua +++ b/src/480x272/KISS/setpnt.lua @@ -19,4 +19,4 @@ return { fields = { { t = "D Setpoint", x = 100, y = 96, sp = 70, i=1, min=0, max=100 } } -} +} \ No newline at end of file diff --git a/src/Horus/KISS/tpa.lua b/src/480x272/KISS/tpa.lua similarity index 100% rename from src/Horus/KISS/tpa.lua rename to src/480x272/KISS/tpa.lua diff --git a/src/Horus/KISS/vtx.lua b/src/480x272/KISS/vtx.lua similarity index 100% rename from src/Horus/KISS/vtx.lua rename to src/480x272/KISS/vtx.lua diff --git a/src/Horus/Kiss.lua b/src/480x272/Kiss.lua similarity index 96% rename from src/Horus/Kiss.lua rename to src/480x272/Kiss.lua index 0ff3bc3..3b4db5a 100644 --- a/src/Horus/Kiss.lua +++ b/src/480x272/Kiss.lua @@ -1,6 +1,6 @@ --- BEGIN HORUS +-- BEGIN HORUS / T16 -local RADIO = "HORUS" +local RADIO = "480x272" local drawScreenTitle = function(title, currentPage, totalPages) lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) diff --git a/src/X-Lite/Kiss.lua b/src/X-Lite/Kiss.lua deleted file mode 100644 index e2d82dc..0000000 --- a/src/X-Lite/Kiss.lua +++ /dev/null @@ -1,44 +0,0 @@ --- BEGIN X-Lite - -local RADIO = "X-Lite" - -local drawScreenTitle = function(title, currentPage, totalPages) - lcd.drawScreenTitle('KISS LUA: '..title, currentPage, totalPages) -end - -local drawTelemetry = function() - lcd.drawText(35,55,"No telemetry", BLINK) -end - -local drawSaving = function() - lcd.drawFilledRectangle(6,12,120,30, ERASE) - lcd.drawRectangle(6,12,120,30, SOLID) - lcd.drawText(34,18,"Saving...", DBLSIZE + BLINK) -end - -local function drawMenu(menuList, menuActive) - local x = 6 - local y = 12 - local w = 120 - local h = #(menuList) * 8 + 6 - lcd.drawFilledRectangle(x,y,w,h,ERASE) - lcd.drawRectangle(x,y,w-1,h-1,SOLID) - lcd.drawText(x+4,y+3,"Menu:") - - for i,e in ipairs(menuList) do - if menuActive == i then - lcd.drawText(x+36,y+(i-1)*8+3,e.t,INVERS) - else - lcd.drawText(x+36,y+(i-1)*8+3,e.t) - end - end -end - -local function getDefaultTextOptions() - return 0 -end - - local EVT_MENU_LONG - --- END X-Lite - diff --git a/src/common/KissUI.lua b/src/common/KissUI.lua index c4203e3..1f6f0a8 100644 --- a/src/common/KissUI.lua +++ b/src/common/KissUI.lua @@ -1,4 +1,3 @@ - -- BEGIN UI local currentPage = 1 @@ -271,11 +270,11 @@ local function run(event) end -- navigation - if event == EVT_MENU_LONG or event == EVT_SHIFT_LONG then + if event == EVT_VIRTUAL_MENU_LONG or event == EVT_SHIFT_LONG then menuActive = 1 gState = MENU_DISP - elseif EVT_PAGEUP_FIRST and event == EVT_ENTER_LONG then + elseif EVT_PAGEUP_FIRST and event == EVT_VIRTUAL_ENTER_LONG then menuActive = 1 killEnterBreak = 1 gState = MENU_DISP @@ -284,12 +283,12 @@ local function run(event) elseif gState == MENU_DISP then if event == EVT_EXIT_BREAK then gState = PAGE_DISPLAY - elseif event == EVT_PLUS_BREAK or event == EVT_ROT_LEFT or event == EVT_UP_BREAK then + elseif event == EVT_VIRTUAL_PREV then incMenu(-1) - elseif event == EVT_MINUS_BREAK or event == EVT_ROT_RIGHT or event == EVT_DOWN_BREAK then + elseif event == EVT_VIRTUAL_NEXT then incMenu(1) elseif event == EVT_ENTER_BREAK then - if RADIO == "HORUS" then + if RADIO == "480x272" then if killEnterBreak == 1 then killEnterBreak = 0 else @@ -303,15 +302,15 @@ local function run(event) end -- normal page viewing elseif gState <= PAGE_DISPLAY then - if event == EVT_PAGEUP_FIRST or event == EVT_LEFT_BREAK then + if event == EVT_VIRTUAL_PREV_PAGE then incPage(-1) - elseif event == EVT_MENU_BREAK or event == EVT_PAGEDN_FIRST or event == EVT_RIGHT_BREAK then + elseif event == EVT_VIRTUAL_NEXT_PAGE then incPage(1) - elseif event == EVT_PLUS_BREAK or event == EVT_ROT_LEFT or event == EVT_UP_BREAK then + elseif event == EVT_VIRTUAL_PREV or event == EVT_VIRTUAL_PREV_REPT then incLine(-1) - elseif event == EVT_MINUS_BREAK or event == EVT_ROT_RIGHT or event == EVT_DOWN_BREAK then + elseif event == EVT_VIRTUAL_NEXT or event == EVT_VIRTUAL_NEXT_REPT then incLine(1) - elseif event == EVT_ENTER_BREAK then + elseif event == EVT_VIRTUAL_ENTER then local field = ActivePage.fields[currentLine] local idx = field.i or currentLine if ActivePage.values and ActivePage.values[idx] and (field.ro ~= true) then @@ -320,15 +319,15 @@ local function run(event) end -- editing value elseif gState == EDITING then - if (event == EVT_EXIT_BREAK) or (event == EVT_ENTER_BREAK) then + if event == EVT_VIRTUAL_EXIT or event == EVT_VIRTUAL_ENTER then gState = PAGE_DISPLAY - elseif event == EVT_PLUS_FIRST or event == EVT_ROT_RIGHT or event == EVT_UP_BREAK then + elseif event == EVT_VIRTUAL_INC then incValue(1) - elseif event == EVT_PLUS_REPT or event == EVT_RIGHT_BREAK then + elseif event == EVT_VIRTUAL_INC_REP then incValue(10) - elseif event == EVT_MINUS_FIRST or event == EVT_ROT_LEFT or event == EVT_DOWN_BREAK then + elseif event == EVT_VIRTUAL_DEC then incValue(-1) - elseif event == EVT_MINUS_REPT or event == EVT_LEFT_BREAK then + elseif event == EVT_VIRTUAL_DEC_REPT then incValue(-10) end end @@ -360,4 +359,4 @@ end return {run=run} --- END UI +-- END UI \ No newline at end of file From 232af5a827bdb9e623a14e8790516c0bf15d0939 Mon Sep 17 00:00:00 2001 From: Carsten Wache Date: Tue, 31 Dec 2019 09:51:00 +0100 Subject: [PATCH 2/6] fix on Xlite, cleanup and formating --- src/128x64/KISS/alarms.lua | 49 ++- src/128x64/KISS/filters.lua | 126 ++++--- src/128x64/KISS/pids.lua | 89 +++-- src/128x64/KISS/rates.lua | 81 +++-- src/128x64/KISS/setpnt.lua | 37 +- src/128x64/KISS/tpa.lua | 105 +++--- src/128x64/KISS/vtx.lua | 61 ++-- src/128x64/Kiss.lua | 53 ++- src/212x64/KISS/alarms.lua | 49 ++- src/212x64/KISS/filters.lua | 146 ++++---- src/212x64/KISS/pids.lua | 89 +++-- src/212x64/KISS/rates.lua | 83 +++-- src/212x64/KISS/setpnt.lua | 37 +- src/212x64/KISS/tpa.lua | 105 +++--- src/212x64/KISS/vtx.lua | 61 ++-- src/212x64/Kiss.lua | 55 ++- src/480x272/KISS/alarms.lua | 51 ++- src/480x272/KISS/filters.lua | 142 ++++---- src/480x272/KISS/pids.lua | 95 +++--- src/480x272/KISS/rates.lua | 82 +++-- src/480x272/KISS/setpnt.lua | 39 +-- src/480x272/KISS/tpa.lua | 105 +++--- src/480x272/KISS/vtx.lua | 63 ++-- src/480x272/Kiss.lua | 58 ++-- src/common/KissProtocolCF.lua | 168 +++++---- src/common/KissProtocolSPort.lua | 323 +++++++++--------- src/common/KissUI.lua | 570 +++++++++++++++---------------- 27 files changed, 1446 insertions(+), 1476 deletions(-) diff --git a/src/128x64/KISS/alarms.lua b/src/128x64/KISS/alarms.lua index 0e26463..efd7bbc 100644 --- a/src/128x64/KISS/alarms.lua +++ b/src/128x64/KISS/alarms.lua @@ -1,28 +1,25 @@ return { - read = 0x49, - write = 0x4A, - - postRead = function(values) - local ret = {} - ret[1] = 100 * (bit32.lshift(values[1], 8) + values[2]) - ret[2] = bit32.lshift(values[3], 8) + values[4] - return ret - end, - - preWrite = function(values) - local ret = {} - local tmp = bit32.band(math.floor(values[1]/100), 0xFFFF) - ret[1] = bit32.band(bit32.rshift(tmp, 8), 0xFF) - ret[2] = bit32.band(tmp, 0xFF) - ret[3] = bit32.band(bit32.rshift(values[2], 8), 0xFF) - ret[4] = bit32.band(values[2], 0xFF) - return ret - end, - - title = "Alarms", - text = {}, - fields = { - { t = "VBat", x = 15, y = 27, sp = 70, i=1, min=0, max=26000, prec=1 }, - { t = "mAH", x = 15, y = 40, sp = 70, i=2, min=0, max=26000, inc=10 } - } + read = 0x49, + write = 0x4A, + postRead = function(values) + local ret = {} + ret[1] = 100 * (bit32.lshift(values[1], 8) + values[2]) + ret[2] = bit32.lshift(values[3], 8) + values[4] + return ret + end, + preWrite = function(values) + local ret = {} + local tmp = bit32.band(math.floor(values[1] / 100), 0xFFFF) + ret[1] = bit32.band(bit32.rshift(tmp, 8), 0xFF) + ret[2] = bit32.band(tmp, 0xFF) + ret[3] = bit32.band(bit32.rshift(values[2], 8), 0xFF) + ret[4] = bit32.band(values[2], 0xFF) + return ret + end, + title = 'Alarms', + text = {}, + fields = { + {t = 'VBat', x = 15, y = 27, sp = 70, i = 1, min = 0, max = 26000, prec = 1}, + {t = 'mAH', x = 15, y = 40, sp = 70, i = 2, min = 0, max = 26000, inc = 10} + } } diff --git a/src/128x64/KISS/filters.lua b/src/128x64/KISS/filters.lua index ecd00b0..beab3ff 100644 --- a/src/128x64/KISS/filters.lua +++ b/src/128x64/KISS/filters.lua @@ -1,66 +1,64 @@ return { - read = 0x47, - write = 0x48, - - postRead = function(values) - local ret = {} - ret[1] = values[3] + 1 - ret[2] = bit32.lshift(values[4], 8) + values[5] - ret[3] = bit32.lshift(values[6], 8) + values[7] - ret[4] = values[8] + 1 - ret[5] = bit32.lshift(values[9], 8) + values[10] - ret[6] = bit32.lshift(values[11], 8) + values[12] - ret[7] = values[1] + 1 - ret[8] = values[2] - ret[9] = values[13] + 1 - ret[10] = values[14] + 1 - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = bit32.band(values[7]-1, 0xFF) - ret[2] = bit32.band(values[8], 0xFF) - ret[3] = bit32.band(values[1]-1, 0xFF); - ret[4] = bit32.band(bit32.rshift(values[2], 8), 0xFF) - ret[5] = bit32.band(values[2], 0xFF) - ret[6] = bit32.band(bit32.rshift(values[3], 8), 0xFF) - ret[7] = bit32.band(values[3], 0xFF) - ret[8] = bit32.band(values[4]-1, 0xFF); - ret[9] = bit32.band(bit32.rshift(values[5], 8), 0xFF) - ret[10] = bit32.band(values[5], 0xFF) - ret[11] = bit32.band(bit32.rshift(values[6], 8), 0xFF) - ret[12] = bit32.band(values[6], 0xFF) - ret[13] = bit32.band(values[9]-1, 0xFF) - ret[14] = bit32.band(values[10]-1, 0xFF) - return ret - end, - title = "Filters", - text = { - { t = "Center", x = 50, y = 10 }, - { t = "Cutoff", x = 90, y = 10 }, - { t = "Notch", x = 3, y = 10 }, - { t = "Roll", x = 3, y = 20 }, - { t = "Pitch", x = 3, y = 30 }, - { t = "R/P", x = 3, y = 42 }, - { t = "Yaw f.", x = 65, y = 42 }, - { t = "Yaw", x = 3, y = 52 }, - { t = "Dterm", x = 65, y = 52 } - }, - lines = { - { x1 = 1, y1 = 39, x2 = 125, y2 = 39 } - }, - fields = { - -- Filters - { x = 15, y = 20, i=1, min=1, max=2, table = { "Off", "On" }}, - { x = 45, y = 20, i=2, min=0, max=490 }, - { x = 80, y = 20, i=3, min=0, max=490 }, - { x = 15, y = 30, i=4, min=1, max=2, table = { "Off", "On" }}, - { x = 45, y = 30, i=5, min=0, max=490 }, - { x = 80, y = 30, i=6, min=0, max=490 }, - { x = 15, y = 42, i=7, min=1, max=7, table = { "Off", "High", "MedHi", "Med", "MedLo", "Low", "VerLo" } }, - { x = 80, y = 42, i=8, min=0, max=97}, - { x = 15, y = 52, i=9, min=1, max=7, table = { "Off", "High", "MedHi", "Med", "MedLo", "Low", "VerLo" } }, - { x = 80, y = 52, i=10, min=1, max=7, table = { "Off", "High", "MedHi", "Med", "MedLo", "Low", "VerLo" } }, - } + read = 0x47, + write = 0x48, + postRead = function(values) + local ret = {} + ret[1] = values[3] + 1 + ret[2] = bit32.lshift(values[4], 8) + values[5] + ret[3] = bit32.lshift(values[6], 8) + values[7] + ret[4] = values[8] + 1 + ret[5] = bit32.lshift(values[9], 8) + values[10] + ret[6] = bit32.lshift(values[11], 8) + values[12] + ret[7] = values[1] + 1 + ret[8] = values[2] + ret[9] = values[13] + 1 + ret[10] = values[14] + 1 + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = bit32.band(values[7] - 1, 0xFF) + ret[2] = bit32.band(values[8], 0xFF) + ret[3] = bit32.band(values[1] - 1, 0xFF) + ret[4] = bit32.band(bit32.rshift(values[2], 8), 0xFF) + ret[5] = bit32.band(values[2], 0xFF) + ret[6] = bit32.band(bit32.rshift(values[3], 8), 0xFF) + ret[7] = bit32.band(values[3], 0xFF) + ret[8] = bit32.band(values[4] - 1, 0xFF) + ret[9] = bit32.band(bit32.rshift(values[5], 8), 0xFF) + ret[10] = bit32.band(values[5], 0xFF) + ret[11] = bit32.band(bit32.rshift(values[6], 8), 0xFF) + ret[12] = bit32.band(values[6], 0xFF) + ret[13] = bit32.band(values[9] - 1, 0xFF) + ret[14] = bit32.band(values[10] - 1, 0xFF) + return ret + end, + title = 'Filters', + text = { + {t = 'Center', x = 50, y = 10}, + {t = 'Cutoff', x = 90, y = 10}, + {t = 'Notch', x = 3, y = 10}, + {t = 'Roll', x = 3, y = 20}, + {t = 'Pitch', x = 3, y = 30}, + {t = 'R/P', x = 3, y = 42}, + {t = 'Yaw f.', x = 65, y = 42}, + {t = 'Yaw', x = 3, y = 52}, + {t = 'Dterm', x = 65, y = 52} + }, + lines = { + {x1 = 1, y1 = 39, x2 = 125, y2 = 39} + }, + fields = { + -- Filters + {x = 15, y = 20, i = 1, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 45, y = 20, i = 2, min = 0, max = 490}, + {x = 80, y = 20, i = 3, min = 0, max = 490}, + {x = 15, y = 30, i = 4, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 45, y = 30, i = 5, min = 0, max = 490}, + {x = 80, y = 30, i = 6, min = 0, max = 490}, + {x = 15, y = 42, i = 7, min = 1, max = 7, table = {'Off', 'High', 'MedHi', 'Med', 'MedLo', 'Low', 'VerLo'}}, + {x = 80, y = 42, i = 8, min = 0, max = 97}, + {x = 15, y = 52, i = 9, min = 1, max = 7, table = {'Off', 'High', 'MedHi', 'Med', 'MedLo', 'Low', 'VerLo'}}, + {x = 80, y = 52, i = 10, min = 1, max = 7, table = {'Off', 'High', 'MedHi', 'Med', 'MedLo', 'Low', 'VerLo'}} + } } diff --git a/src/128x64/KISS/pids.lua b/src/128x64/KISS/pids.lua index 6a017c8..5a24807 100644 --- a/src/128x64/KISS/pids.lua +++ b/src/128x64/KISS/pids.lua @@ -1,48 +1,45 @@ return { - read = 0x43, - write = 0x44, - - postRead = function(values) - local ret = {} - for i=0,2 do - ret[i*3+1] = bit32.lshift(values[i*6+1], 8) + values[i*6+2] - ret[i*3+2] = bit32.lshift(values[i*6+3], 8) + values[i*6+4] - ret[i*3+3] = bit32.lshift(values[i*6+5], 8) + values[i*6+6] - end - return ret - end, - preWrite = function(values) - local ret = {} - for i=0,2 do - ret[i*6+1] = bit32.rshift(values[i*3+1], 8) - ret[i*6+2] = bit32.band(values[i*3+1], 0xFF) - ret[i*6+3] = bit32.rshift(values[i*3+2], 8) - ret[i*6+4] = bit32.band(values[i*3+2], 0xFF) - ret[i*6+5] = bit32.rshift(values[i*3+3], 8) - ret[i*6+6] = bit32.band(values[i*3+3], 0xFF) - end - return ret - end, - title = "PIDs", - text = { - { t = "P", x = 45, y = 14 }, - { t = "I", x = 78, y = 14 }, - { t = "D", x = 107, y = 14 }, - { t = "Roll", x = 3, y = 25 }, - { t = "Pitch", x = 3, y = 38 }, - { t = "Yaw", x = 3, y = 50 } - }, - fields = { - { x = 20, y = 25, i=1, max=65000, prec=2 }, - { x = 48, y = 25, i=2, max=65000, prec=3 }, - { x = 80, y = 25, i=3, max=65000, prec=2 }, - - { x = 20, y = 38, i=4, max=65000, prec=2 }, - { x = 48, y = 38, i=5, max=65000, prec=3 }, - { x = 80, y = 38, i=6, max=65000, prec=2 }, - - { x = 20, y = 50, i=7, max=65000, prec=2 }, - { x = 48, y = 50, i=8, max=65000, prec=3 }, - { x = 80, y = 50, i=9, max=65000, prec=2 } - }, + read = 0x43, + write = 0x44, + postRead = function(values) + local ret = {} + for i = 0, 2 do + ret[i * 3 + 1] = bit32.lshift(values[i * 6 + 1], 8) + values[i * 6 + 2] + ret[i * 3 + 2] = bit32.lshift(values[i * 6 + 3], 8) + values[i * 6 + 4] + ret[i * 3 + 3] = bit32.lshift(values[i * 6 + 5], 8) + values[i * 6 + 6] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 0, 2 do + ret[i * 6 + 1] = bit32.rshift(values[i * 3 + 1], 8) + ret[i * 6 + 2] = bit32.band(values[i * 3 + 1], 0xFF) + ret[i * 6 + 3] = bit32.rshift(values[i * 3 + 2], 8) + ret[i * 6 + 4] = bit32.band(values[i * 3 + 2], 0xFF) + ret[i * 6 + 5] = bit32.rshift(values[i * 3 + 3], 8) + ret[i * 6 + 6] = bit32.band(values[i * 3 + 3], 0xFF) + end + return ret + end, + title = 'PIDs', + text = { + {t = 'P', x = 45, y = 14}, + {t = 'I', x = 78, y = 14}, + {t = 'D', x = 107, y = 14}, + {t = 'Roll', x = 3, y = 25}, + {t = 'Pitch', x = 3, y = 38}, + {t = 'Yaw', x = 3, y = 50} + }, + fields = { + {x = 20, y = 25, i = 1, max = 65000, prec = 2}, + {x = 48, y = 25, i = 2, max = 65000, prec = 3}, + {x = 80, y = 25, i = 3, max = 65000, prec = 2}, + {x = 20, y = 38, i = 4, max = 65000, prec = 2}, + {x = 48, y = 38, i = 5, max = 65000, prec = 3}, + {x = 80, y = 38, i = 6, max = 65000, prec = 2}, + {x = 20, y = 50, i = 7, max = 65000, prec = 2}, + {x = 48, y = 50, i = 8, max = 65000, prec = 3}, + {x = 80, y = 50, i = 9, max = 65000, prec = 2} + } } diff --git a/src/128x64/KISS/rates.lua b/src/128x64/KISS/rates.lua index 3f9b2db..3a817b2 100644 --- a/src/128x64/KISS/rates.lua +++ b/src/128x64/KISS/rates.lua @@ -1,43 +1,42 @@ return { - read = 0x4D, - write = 0x4E, - - postRead = function(values) - local ret = {} - for i=1,9 do - ret[i] = bit32.lshift(values[(i-1)*2 + 1], 8) + values[(i-1)*2 + 2] - end - return ret - end, - preWrite = function(values) - local ret = {} - for i=1,9 do - ret[(i-1)*2 + 1] = bit32.rshift(values[i], 8) - ret[(i-1)*2 + 2] = bit32.band(values[i], 0xFF) - end - return ret - end, - title = "Rates", - text = { - { t = "RC", x = 41, y = 14 }, - { t = "Rate", x = 65, y = 14 }, - { t = "Curve", x = 95, y = 14 }, - { t = "Roll", x = 3, y = 25 }, - { t = "Pitch", x = 3, y = 38 }, - { t = "Yaw", x = 3, y = 50 } - }, - fields = { - -- RC Rate - { x = 16, y = 25, i=1, max=65000, prec=2 }, - { x = 48, y = 25, i=2, max=65000, prec=2 }, - { x = 80, y = 25, i=3, max=65000, prec=2 }, - -- Rate - { x = 16, y = 38, i=4, max=65000, prec=2 }, - { x = 48, y = 38, i=5, max=65000, prec=2 }, - { x = 80, y = 38, i=6, max=65000, prec=2 }, - -- RC Curve - { x = 16, y = 50, i=7, max=65000, prec=2 }, - { x = 48, y = 50, i=8, max=65000, prec=2 }, - { x = 80, y = 50, i=9, max=65000, prec=2 } - } + read = 0x4D, + write = 0x4E, + postRead = function(values) + local ret = {} + for i = 1, 9 do + ret[i] = bit32.lshift(values[(i - 1) * 2 + 1], 8) + values[(i - 1) * 2 + 2] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 1, 9 do + ret[(i - 1) * 2 + 1] = bit32.rshift(values[i], 8) + ret[(i - 1) * 2 + 2] = bit32.band(values[i], 0xFF) + end + return ret + end, + title = 'Rates', + text = { + {t = 'RC', x = 41, y = 14}, + {t = 'Rate', x = 65, y = 14}, + {t = 'Curve', x = 95, y = 14}, + {t = 'Roll', x = 3, y = 25}, + {t = 'Pitch', x = 3, y = 38}, + {t = 'Yaw', x = 3, y = 50} + }, + fields = { + -- RC Rate + {x = 16, y = 25, i = 1, max = 65000, prec = 2}, + {x = 48, y = 25, i = 2, max = 65000, prec = 2}, + {x = 80, y = 25, i = 3, max = 65000, prec = 2}, + -- Rate + {x = 16, y = 38, i = 4, max = 65000, prec = 2}, + {x = 48, y = 38, i = 5, max = 65000, prec = 2}, + {x = 80, y = 38, i = 6, max = 65000, prec = 2}, + -- RC Curve + {x = 16, y = 50, i = 7, max = 65000, prec = 2}, + {x = 48, y = 50, i = 8, max = 65000, prec = 2}, + {x = 80, y = 50, i = 9, max = 65000, prec = 2} + } } diff --git a/src/128x64/KISS/setpnt.lua b/src/128x64/KISS/setpnt.lua index 023c722..988741e 100644 --- a/src/128x64/KISS/setpnt.lua +++ b/src/128x64/KISS/setpnt.lua @@ -1,22 +1,19 @@ return { - read = 0x52, - write = 0x53, - - postRead = function(values) - local ret = {} - ret[1] = values[1] - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = values[1] - return ret - end, - - title = "Setpoints", - text = {}, - fields = { - { t = "D Setpoint", x = 15, y = 27, sp = 70, i=1, min=0, max=100 } - } + read = 0x52, + write = 0x53, + postRead = function(values) + local ret = {} + ret[1] = values[1] + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = values[1] + return ret + end, + title = 'Setpoints', + text = {}, + fields = { + {t = 'D Setpoint', x = 15, y = 27, sp = 70, i = 1, min = 0, max = 100} + } } diff --git a/src/128x64/KISS/tpa.lua b/src/128x64/KISS/tpa.lua index 2bb5921..4903cb7 100644 --- a/src/128x64/KISS/tpa.lua +++ b/src/128x64/KISS/tpa.lua @@ -1,55 +1,54 @@ return { - read = 0x4B, - write = 0x4C, - - postRead = function(values) - local ret = {} - for i=1,3 do - ret[i] = bit32.lshift(values[(i-1)*2 + 1], 8) + values[(i-1)*2 + 2] - end - ret[4] = values[7] + 1 - for i=5,10 do - ret[i] = values[i + 3] - end - return ret - end, - preWrite = function(values) - local ret = {} - for i=1,3 do - ret[(i-1)*2 + 1] = bit32.rshift(values[i], 8) - ret[(i-1)*2 + 2] = bit32.band(values[i], 0xFF) - end - ret[7] = bit32.band(values[4]-1, 0xFF) - for i=5,10 do - ret[i+3] = bit32.band(values[i], 0xFF) - end - return ret - end, - title = "TPA", - text = { - { t = "P", x = 45, y = 10 }, - { t = "I", x = 78, y = 10 }, - { t = "D", x = 107,y = 10 }, - { t = "TPA", x = 3, y = 20 }, - { t = "0", x = 35, y = 43 }, - { t = "100", x = 105,y = 43 }, - { t = "Thr%", x = 3, y = 43 }, - { t = "Inf%", x = 3, y = 53 }, - }, - lines = { - { x1 = 1, y1 = 30, x2 = 125, y2 = 30 } - }, - fields = { - -- TPA - { x = 20, y = 20, i=1, max=900, prec=2 }, - { x = 53, y = 20, i=2, max=900, prec=2 }, - { x = 80, y = 20, i=3, max=900, prec=2 }, - { t = "Custom TPA", x = 3, y = 33, sp=65, i=4, min=1, max=2, table = { "Off", "On" } }, - { x = 38, y = 43, i=5, max=100}, - { x = 61, y = 43, i=6, max=100}, - { x = 15, y = 53, i=7, max=100}, - { x = 38, y = 53, i=8, max=100}, - { x = 61, y = 53, i=9, max=100}, - { x = 85, y = 53, i=10,max=100}, - } + read = 0x4B, + write = 0x4C, + postRead = function(values) + local ret = {} + for i = 1, 3 do + ret[i] = bit32.lshift(values[(i - 1) * 2 + 1], 8) + values[(i - 1) * 2 + 2] + end + ret[4] = values[7] + 1 + for i = 5, 10 do + ret[i] = values[i + 3] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 1, 3 do + ret[(i - 1) * 2 + 1] = bit32.rshift(values[i], 8) + ret[(i - 1) * 2 + 2] = bit32.band(values[i], 0xFF) + end + ret[7] = bit32.band(values[4] - 1, 0xFF) + for i = 5, 10 do + ret[i + 3] = bit32.band(values[i], 0xFF) + end + return ret + end, + title = 'TPA', + text = { + {t = 'P', x = 45, y = 10}, + {t = 'I', x = 78, y = 10}, + {t = 'D', x = 107, y = 10}, + {t = 'TPA', x = 3, y = 20}, + {t = '0', x = 35, y = 43}, + {t = '100', x = 105, y = 43}, + {t = 'Thr%', x = 3, y = 43}, + {t = 'Inf%', x = 3, y = 53} + }, + lines = { + {x1 = 1, y1 = 30, x2 = 125, y2 = 30} + }, + fields = { + -- TPA + {x = 20, y = 20, i = 1, max = 900, prec = 2}, + {x = 53, y = 20, i = 2, max = 900, prec = 2}, + {x = 80, y = 20, i = 3, max = 900, prec = 2}, + {t = 'Custom TPA', x = 3, y = 33, sp = 65, i = 4, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 38, y = 43, i = 5, max = 100}, + {x = 61, y = 43, i = 6, max = 100}, + {x = 15, y = 53, i = 7, max = 100}, + {x = 38, y = 53, i = 8, max = 100}, + {x = 61, y = 53, i = 9, max = 100}, + {x = 85, y = 53, i = 10, max = 100} + } } diff --git a/src/128x64/KISS/vtx.lua b/src/128x64/KISS/vtx.lua index e99dc2e..8030950 100644 --- a/src/128x64/KISS/vtx.lua +++ b/src/128x64/KISS/vtx.lua @@ -1,34 +1,31 @@ return { - read = 0x45, - write = 0x46, - - postRead = function(values) - local ret = {} - ret[1] = values[1] - ret[2] = 1 + bit32.rshift(values[2], 3) - ret[3] = 1 + bit32.band(values[2], 0x07) - ret[4] = bit32.lshift(values[3], 8) + values[4] - ret[5] = bit32.lshift(values[5], 8) + values[6] - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = bit32.band(values[1], 0xFF) - ret[2] = bit32.band((values[2]-1) * 8 + values[3]-1, 0xFF) - ret[3] = bit32.band(bit32.rshift(values[4], 8), 0xFF) - ret[4] = bit32.band(values[4], 0xFF) - ret[5] = bit32.band(bit32.rshift(values[5], 8), 0xFF) - ret[6] = bit32.band(values[5], 0xFF) - return ret - end, - - title = "VTX", - text = {}, - fields = { - { t = "Band", x = 15, y = 14, sp = 70, i=2, min=1, max=5, table = { "A", "B", "E", "FS", "RB" } }, - { t = "Channel", x = 15, y = 27, sp = 70, i=3, min=1, max=8 }, - { t = "Low Power", x = 15, y = 40, sp = 70, i=4, min=0, max=2000 }, - { t = "High Power", x = 15, y = 53, sp = 70, i=5, min=0, max=2000 } - } + read = 0x45, + write = 0x46, + postRead = function(values) + local ret = {} + ret[1] = values[1] + ret[2] = 1 + bit32.rshift(values[2], 3) + ret[3] = 1 + bit32.band(values[2], 0x07) + ret[4] = bit32.lshift(values[3], 8) + values[4] + ret[5] = bit32.lshift(values[5], 8) + values[6] + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = bit32.band(values[1], 0xFF) + ret[2] = bit32.band((values[2] - 1) * 8 + values[3] - 1, 0xFF) + ret[3] = bit32.band(bit32.rshift(values[4], 8), 0xFF) + ret[4] = bit32.band(values[4], 0xFF) + ret[5] = bit32.band(bit32.rshift(values[5], 8), 0xFF) + ret[6] = bit32.band(values[5], 0xFF) + return ret + end, + title = 'VTX', + text = {}, + fields = { + {t = 'Band', x = 15, y = 14, sp = 70, i = 2, min = 1, max = 5, table = {'A', 'B', 'E', 'FS', 'RB'}}, + {t = 'Channel', x = 15, y = 27, sp = 70, i = 3, min = 1, max = 8}, + {t = 'Low Power', x = 15, y = 40, sp = 70, i = 4, min = 0, max = 2000}, + {t = 'High Power', x = 15, y = 53, sp = 70, i = 5, min = 0, max = 2000} + } } diff --git a/src/128x64/Kiss.lua b/src/128x64/Kiss.lua index 308cc31..53b4d5f 100644 --- a/src/128x64/Kiss.lua +++ b/src/128x64/Kiss.lua @@ -1,44 +1,41 @@ --- BEGIN X7 / XLITE +-- BEGIN 128x64 -local RADIO = "128x64" +local RADIO = '128x64' local drawScreenTitle = function(title, currentPage, totalPages) - lcd.drawScreenTitle('Kiss Setup: '..title, currentPage, totalPages) + lcd.drawScreenTitle('KISS: ' .. title, currentPage, totalPages) end local drawTelemetry = function() - lcd.drawText(35,55,"No telemetry", BLINK) + lcd.drawText(35, 55, 'No telemetry', BLINK) end local drawSaving = function() - lcd.drawFilledRectangle(6,12,120,30, ERASE) - lcd.drawRectangle(6,12,120,30, SOLID) - lcd.drawText(34,18,"Saving...", DBLSIZE + BLINK) + lcd.drawFilledRectangle(6, 12, 120, 30, ERASE) + lcd.drawRectangle(6, 12, 120, 30, SOLID) + lcd.drawText(34, 18, 'Saving...', DBLSIZE + BLINK) end local function drawMenu(menuList, menuActive) - local x = 6 - local y = 12 - local w = 120 - local h = #(menuList) * 8 + 6 - lcd.drawFilledRectangle(x,y,w,h,ERASE) - lcd.drawRectangle(x,y,w-1,h-1,SOLID) - lcd.drawText(x+4,y+3,"Menu:") - - for i,e in ipairs(menuList) do - if menuActive == i then - lcd.drawText(x+36,y+(i-1)*8+3,e.t,INVERS) - else - lcd.drawText(x+36,y+(i-1)*8+3,e.t) - end - end + local x = 6 + local y = 12 + local w = 120 + local h = #(menuList) * 8 + 6 + lcd.drawFilledRectangle(x, y, w, h, ERASE) + lcd.drawRectangle(x, y, w - 1, h - 1, SOLID) + lcd.drawText(x + 4, y + 3, 'Menu:') + + for i, e in ipairs(menuList) do + if menuActive == i then + lcd.drawText(x + 36, y + (i - 1) * 8 + 3, e.t, INVERS) + else + lcd.drawText(x + 36, y + (i - 1) * 8 + 3, e.t) + end + end end -local function getDefaultTextOptions() - return 0 +local function getDefaultTextOptions() + return 0 end -local EVT_VIRTUAL_MENU_LONG = bit32.bor(bit32.band(EVT_MENU_BREAK,0x1f),0x80) - --- END X7 - +-- END 128x64 diff --git a/src/212x64/KISS/alarms.lua b/src/212x64/KISS/alarms.lua index 844172d..95ab7a7 100644 --- a/src/212x64/KISS/alarms.lua +++ b/src/212x64/KISS/alarms.lua @@ -1,28 +1,25 @@ return { - read = 0x49, - write = 0x4A, - - postRead = function(values) - local ret = {} - ret[1] = 100 * (bit32.lshift(values[1], 8) + values[2]) - ret[2] = bit32.lshift(values[3], 8) + values[4] - return ret - end, - - preWrite = function(values) - local ret = {} - local tmp = bit32.band(math.floor(values[1]/100), 0xFFFF) - ret[1] = bit32.band(bit32.rshift(tmp, 8), 0xFF) - ret[2] = bit32.band(tmp, 0xFF) - ret[3] = bit32.band(bit32.rshift(values[2], 8), 0xFF) - ret[4] = bit32.band(values[2], 0xFF) - return ret - end, - - title = "Alarms", - text = {}, - fields = { - { t = "VBat", x = 15, y = 25, sp = 30, i=1, min=0, max=26000, prec=1 }, - { t = "mAH", x = 120, y = 25, sp = 30, i=2, min=0, max=26000, inc=10 } - } + read = 0x49, + write = 0x4A, + postRead = function(values) + local ret = {} + ret[1] = 100 * (bit32.lshift(values[1], 8) + values[2]) + ret[2] = bit32.lshift(values[3], 8) + values[4] + return ret + end, + preWrite = function(values) + local ret = {} + local tmp = bit32.band(math.floor(values[1] / 100), 0xFFFF) + ret[1] = bit32.band(bit32.rshift(tmp, 8), 0xFF) + ret[2] = bit32.band(tmp, 0xFF) + ret[3] = bit32.band(bit32.rshift(values[2], 8), 0xFF) + ret[4] = bit32.band(values[2], 0xFF) + return ret + end, + title = 'Alarms', + text = {}, + fields = { + {t = 'VBat', x = 15, y = 25, sp = 30, i = 1, min = 0, max = 26000, prec = 1}, + {t = 'mAH', x = 120, y = 25, sp = 30, i = 2, min = 0, max = 26000, inc = 10} + } } diff --git a/src/212x64/KISS/filters.lua b/src/212x64/KISS/filters.lua index 1673161..6e3bc33 100644 --- a/src/212x64/KISS/filters.lua +++ b/src/212x64/KISS/filters.lua @@ -1,66 +1,84 @@ return { - read = 0x47, - write = 0x48, - - postRead = function(values) - local ret = {} - ret[1] = values[3] + 1 - ret[2] = bit32.lshift(values[4], 8) + values[5] - ret[3] = bit32.lshift(values[6], 8) + values[7] - ret[4] = values[8] + 1 - ret[5] = bit32.lshift(values[9], 8) + values[10] - ret[6] = bit32.lshift(values[11], 8) + values[12] - ret[7] = values[1] + 1 - ret[8] = values[2] - ret[9] = values[13] + 1 - ret[10] = values[14] + 1 - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = bit32.band(values[7]-1, 0xFF) - ret[2] = bit32.band(values[8], 0xFF) - ret[3] = bit32.band(values[1]-1, 0xFF); - ret[4] = bit32.band(bit32.rshift(values[2], 8), 0xFF) - ret[5] = bit32.band(values[2], 0xFF) - ret[6] = bit32.band(bit32.rshift(values[3], 8), 0xFF) - ret[7] = bit32.band(values[3], 0xFF) - ret[8] = bit32.band(values[4]-1, 0xFF); - ret[9] = bit32.band(bit32.rshift(values[5], 8), 0xFF) - ret[10] = bit32.band(values[5], 0xFF) - ret[11] = bit32.band(bit32.rshift(values[6], 8), 0xFF) - ret[12] = bit32.band(values[6], 0xFF) - ret[13] = bit32.band(values[9]-1, 0xFF) - ret[14] = bit32.band(values[10]-1, 0xFF) - return ret - end, - - title = "Filters", - text = { - { t = "Center", x = 100, y = 10 }, - { t = "Cutoff", x = 150, y = 10 }, - { t = "Notch Filter", x = 10, y = 10 }, - { t = "Roll", x = 10, y = 21 }, - { t = "Pitch", x = 10, y = 32 }, - { t = "R/P LPF", x = 10, y = 44 }, - { t = "Yaw Filter", x = 110, y = 44 }, - { t = "Yaw LPF", x = 10, y = 55 }, - { t = "Dterm LPF", x = 110, y = 55 } - }, - lines = { - { x1 = 1, y1 = 41, x2 = 210, y2 = 41 } - }, - fields = { - { x = 35, y = 21, i=1, min=1, max=2, table = { "Off", "On" }}, - { x = 90, y = 21, i=2, min=0, max=490 }, - { x = 145, y = 21, i=3, min=0, max=490 }, - { x = 35, y = 32, i=4, min=1, max=2, table = { "Off", "On" }}, - { x = 90, y = 32, i=5, min=0, max=490 }, - { x = 145, y = 32, i=6, min=0, max=490 }, - { x = 35, y = 44, i=7, min=1, max=7, table = { "Off", "High", "Med. High", "Medium", "Med. Low", "Low", "Very Low" } }, - { x = 145, y = 44, i=8, min=0, max=97}, - { x = 35, y = 55, i=9, min=1, max=7, table = { "Off", "High", "Med. High", "Medium", "Med. Low", "Low", "Very Low" } }, - { x = 145, y = 55, i=10, min=1, max=7, table = { "Off", "High", "Med. High", "Medium", "Med. Low", "Low", "Very Low" } }, - } + read = 0x47, + write = 0x48, + postRead = function(values) + local ret = {} + ret[1] = values[3] + 1 + ret[2] = bit32.lshift(values[4], 8) + values[5] + ret[3] = bit32.lshift(values[6], 8) + values[7] + ret[4] = values[8] + 1 + ret[5] = bit32.lshift(values[9], 8) + values[10] + ret[6] = bit32.lshift(values[11], 8) + values[12] + ret[7] = values[1] + 1 + ret[8] = values[2] + ret[9] = values[13] + 1 + ret[10] = values[14] + 1 + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = bit32.band(values[7] - 1, 0xFF) + ret[2] = bit32.band(values[8], 0xFF) + ret[3] = bit32.band(values[1] - 1, 0xFF) + ret[4] = bit32.band(bit32.rshift(values[2], 8), 0xFF) + ret[5] = bit32.band(values[2], 0xFF) + ret[6] = bit32.band(bit32.rshift(values[3], 8), 0xFF) + ret[7] = bit32.band(values[3], 0xFF) + ret[8] = bit32.band(values[4] - 1, 0xFF) + ret[9] = bit32.band(bit32.rshift(values[5], 8), 0xFF) + ret[10] = bit32.band(values[5], 0xFF) + ret[11] = bit32.band(bit32.rshift(values[6], 8), 0xFF) + ret[12] = bit32.band(values[6], 0xFF) + ret[13] = bit32.band(values[9] - 1, 0xFF) + ret[14] = bit32.band(values[10] - 1, 0xFF) + return ret + end, + title = 'Filters', + text = { + {t = 'Center', x = 100, y = 10}, + {t = 'Cutoff', x = 150, y = 10}, + {t = 'Notch Filter', x = 10, y = 10}, + {t = 'Roll', x = 10, y = 21}, + {t = 'Pitch', x = 10, y = 32}, + {t = 'R/P LPF', x = 10, y = 44}, + {t = 'Yaw Filter', x = 110, y = 44}, + {t = 'Yaw LPF', x = 10, y = 55}, + {t = 'Dterm LPF', x = 110, y = 55} + }, + lines = { + {x1 = 1, y1 = 41, x2 = 210, y2 = 41} + }, + fields = { + {x = 35, y = 21, i = 1, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 90, y = 21, i = 2, min = 0, max = 490}, + {x = 145, y = 21, i = 3, min = 0, max = 490}, + {x = 35, y = 32, i = 4, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 90, y = 32, i = 5, min = 0, max = 490}, + {x = 145, y = 32, i = 6, min = 0, max = 490}, + { + x = 35, + y = 44, + i = 7, + min = 1, + max = 7, + table = {'Off', 'High', 'Med. High', 'Medium', 'Med. Low', 'Low', 'Very Low'} + }, + {x = 145, y = 44, i = 8, min = 0, max = 97}, + { + x = 35, + y = 55, + i = 9, + min = 1, + max = 7, + table = {'Off', 'High', 'Med. High', 'Medium', 'Med. Low', 'Low', 'Very Low'} + }, + { + x = 145, + y = 55, + i = 10, + min = 1, + max = 7, + table = {'Off', 'High', 'Med. High', 'Medium', 'Med. Low', 'Low', 'Very Low'} + } + } } diff --git a/src/212x64/KISS/pids.lua b/src/212x64/KISS/pids.lua index ed2d4b8..f53fa85 100644 --- a/src/212x64/KISS/pids.lua +++ b/src/212x64/KISS/pids.lua @@ -1,48 +1,45 @@ return { - read = 0x43, - write = 0x44, - - postRead = function(values) - local ret = {} - for i=0,2 do - ret[i*3+1] = bit32.lshift(values[i*6+1], 8) + values[i*6+2] - ret[i*3+2] = bit32.lshift(values[i*6+3], 8) + values[i*6+4] - ret[i*3+3] = bit32.lshift(values[i*6+5], 8) + values[i*6+6] - end - return ret - end, - - preWrite = function(values) - local ret = {} - for i=0,2 do - ret[i*6+1] = bit32.rshift(values[i*3+1], 8) - ret[i*6+2] = bit32.band(values[i*3+1], 0xFF) - ret[i*6+3] = bit32.rshift(values[i*3+2], 8) - ret[i*6+4] = bit32.band(values[i*3+2], 0xFF) - ret[i*6+5] = bit32.rshift(values[i*3+3], 8) - ret[i*6+6] = bit32.band(values[i*3+3], 0xFF) - end - return ret - end, - - title = "PIDs", - text = { - { t = "P", x = 60, y = 14 }, - { t = "I", x = 120, y = 14 }, - { t = "D", x = 175, y = 14 }, - { t = "Roll", x = 10, y = 25 }, - { t = "Pitch", x = 10, y = 38 }, - { t = "Yaw", x = 10, y = 50 } - }, - fields = { - { x = 35, y = 25, i=1, max=65000, prec=2 }, - { x = 90, y = 25, i=2, max=65000, prec=3 }, - { x = 145, y = 25, i=3, max=65000, prec=2 }, - { x = 35, y = 38, i=4, max=65000, prec=2 }, - { x = 90, y = 38, i=5, max=65000, prec=3 }, - { x = 145, y = 38, i=6, max=65000, prec=2 }, - { x = 35, y = 50, i=7, max=65000, prec=2 }, - { x = 90, y = 50, i=8, max=65000, prec=3 }, - { x = 145, y = 50, i=9, max=65000, prec=2 } - } + read = 0x43, + write = 0x44, + postRead = function(values) + local ret = {} + for i = 0, 2 do + ret[i * 3 + 1] = bit32.lshift(values[i * 6 + 1], 8) + values[i * 6 + 2] + ret[i * 3 + 2] = bit32.lshift(values[i * 6 + 3], 8) + values[i * 6 + 4] + ret[i * 3 + 3] = bit32.lshift(values[i * 6 + 5], 8) + values[i * 6 + 6] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 0, 2 do + ret[i * 6 + 1] = bit32.rshift(values[i * 3 + 1], 8) + ret[i * 6 + 2] = bit32.band(values[i * 3 + 1], 0xFF) + ret[i * 6 + 3] = bit32.rshift(values[i * 3 + 2], 8) + ret[i * 6 + 4] = bit32.band(values[i * 3 + 2], 0xFF) + ret[i * 6 + 5] = bit32.rshift(values[i * 3 + 3], 8) + ret[i * 6 + 6] = bit32.band(values[i * 3 + 3], 0xFF) + end + return ret + end, + title = 'PIDs', + text = { + {t = 'P', x = 60, y = 14}, + {t = 'I', x = 120, y = 14}, + {t = 'D', x = 175, y = 14}, + {t = 'Roll', x = 10, y = 25}, + {t = 'Pitch', x = 10, y = 38}, + {t = 'Yaw', x = 10, y = 50} + }, + fields = { + {x = 35, y = 25, i = 1, max = 65000, prec = 2}, + {x = 90, y = 25, i = 2, max = 65000, prec = 3}, + {x = 145, y = 25, i = 3, max = 65000, prec = 2}, + {x = 35, y = 38, i = 4, max = 65000, prec = 2}, + {x = 90, y = 38, i = 5, max = 65000, prec = 3}, + {x = 145, y = 38, i = 6, max = 65000, prec = 2}, + {x = 35, y = 50, i = 7, max = 65000, prec = 2}, + {x = 90, y = 50, i = 8, max = 65000, prec = 3}, + {x = 145, y = 50, i = 9, max = 65000, prec = 2} + } } diff --git a/src/212x64/KISS/rates.lua b/src/212x64/KISS/rates.lua index 8ddf7cf..a07309b 100644 --- a/src/212x64/KISS/rates.lua +++ b/src/212x64/KISS/rates.lua @@ -1,45 +1,42 @@ return { - read = 0x4D, - write = 0x4E, - - postRead = function(values) - local ret = {} - for i=1,9 do - ret[i] = bit32.lshift(values[(i-1)*2 + 1], 8) + values[(i-1)*2 + 2] - end - return ret - end, - - preWrite = function(values) - local ret = {} - for i=1,9 do - ret[(i-1)*2 + 1] = bit32.rshift(values[i], 8) - ret[(i-1)*2 + 2] = bit32.band(values[i], 0xFF) - end - return ret - end, - - title = "Rates", - text = { - { t = "RC Rate", x = 45, y = 14 }, - { t = "Rate", x = 107, y = 14 }, - { t = "RC Curve", x = 150, y = 14 }, - { t = "Roll", x = 10, y = 25 }, - { t = "Pitch", x = 10, y = 38 }, - { t = "Yaw", x = 10, y = 50 } - }, - fields = { - -- RC Rate - { x = 35, y = 25, i=1, max=65000, prec=2 }, - { x = 90, y = 25, i=2, max=65000, prec=2 }, - { x = 145, y = 25, i=3, max=65000, prec=2 }, - -- Rate - { x = 35, y = 38, i=4, max=65000, prec=2 }, - { x = 90, y = 38, i=5, max=65000, prec=2 }, - { x = 145, y = 38, i=6, max=65000, prec=2 }, - -- RC Curve - { x = 35, y = 50, i=7, max=65000, prec=2 }, - { x = 90, y = 50, i=8, max=65000, prec=2 }, - { x = 145, y = 50, i=9, max=65000, prec=2 } - } + read = 0x4D, + write = 0x4E, + postRead = function(values) + local ret = {} + for i = 1, 9 do + ret[i] = bit32.lshift(values[(i - 1) * 2 + 1], 8) + values[(i - 1) * 2 + 2] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 1, 9 do + ret[(i - 1) * 2 + 1] = bit32.rshift(values[i], 8) + ret[(i - 1) * 2 + 2] = bit32.band(values[i], 0xFF) + end + return ret + end, + title = 'Rates', + text = { + {t = 'RC Rate', x = 45, y = 14}, + {t = 'Rate', x = 107, y = 14}, + {t = 'RC Curve', x = 150, y = 14}, + {t = 'Roll', x = 10, y = 25}, + {t = 'Pitch', x = 10, y = 38}, + {t = 'Yaw', x = 10, y = 50} + }, + fields = { + -- RC Rate + {x = 35, y = 25, i = 1, max = 65000, prec = 2}, + {x = 90, y = 25, i = 2, max = 65000, prec = 2}, + {x = 145, y = 25, i = 3, max = 65000, prec = 2}, + -- Rate + {x = 35, y = 38, i = 4, max = 65000, prec = 2}, + {x = 90, y = 38, i = 5, max = 65000, prec = 2}, + {x = 145, y = 38, i = 6, max = 65000, prec = 2}, + -- RC Curve + {x = 35, y = 50, i = 7, max = 65000, prec = 2}, + {x = 90, y = 50, i = 8, max = 65000, prec = 2}, + {x = 145, y = 50, i = 9, max = 65000, prec = 2} + } } diff --git a/src/212x64/KISS/setpnt.lua b/src/212x64/KISS/setpnt.lua index ba9730d..65e3c17 100644 --- a/src/212x64/KISS/setpnt.lua +++ b/src/212x64/KISS/setpnt.lua @@ -1,22 +1,19 @@ return { - read = 0x52, - write = 0x53, - - postRead = function(values) - local ret = {} - ret[1] = values[1] - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = values[1] - return ret - end, - - title = "Setpoints", - text = {}, - fields = { - { t = "D Setpoint", x = 15, y = 25, sp = 70, i=1, min=0, max=100 } - } + read = 0x52, + write = 0x53, + postRead = function(values) + local ret = {} + ret[1] = values[1] + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = values[1] + return ret + end, + title = 'Setpoints', + text = {}, + fields = { + {t = 'D Setpoint', x = 15, y = 25, sp = 70, i = 1, min = 0, max = 100} + } } diff --git a/src/212x64/KISS/tpa.lua b/src/212x64/KISS/tpa.lua index 26c071c..1b9d9b1 100644 --- a/src/212x64/KISS/tpa.lua +++ b/src/212x64/KISS/tpa.lua @@ -1,55 +1,54 @@ return { - read = 0x4B, - write = 0x4C, - - postRead = function(values) - local ret = {} - for i=1,3 do - ret[i] = bit32.lshift(values[(i-1)*2 + 1], 8) + values[(i-1)*2 + 2] - end - ret[4] = values[7] + 1 - for i=5,10 do - ret[i] = values[i + 3] - end - return ret - end, - preWrite = function(values) - local ret = {} - for i=1,3 do - ret[(i-1)*2 + 1] = bit32.rshift(values[i], 8) - ret[(i-1)*2 + 2] = bit32.band(values[i], 0xFF) - end - ret[7] = bit32.band(values[4]-1, 0xFF) - for i=5,10 do - ret[i+3] = bit32.band(values[i], 0xFF) - end - return ret - end, - title = "TPA", - text = { - { t = "P", x = 60, y = 10 }, - { t = "I", x = 120, y = 10 }, - { t = "D", x = 175, y = 10 }, - { t = "TPA", x = 10, y = 20 }, - { t = "0", x = 80, y = 43 }, - { t = "100", x = 170, y = 43 }, - { t = "Throttle %", x = 10, y = 43 }, - { t = "Influence%", x = 10, y = 53 }, - }, - lines = { - { x1 = 1, y1 = 30, x2 = 210, y2 = 30 } - }, - fields = { - -- TPA - { x = 35, y = 20, i=1, max=900, prec=2 }, - { x = 95, y = 20, i=2, max=900, prec=2 }, - { x = 150, y = 20, i=3, max=900, prec=2 }, - { t = "Custom TPA", x = 10, y = 33, sp=70, i=4, min=1, max=2, table = { "Off", "On" } }, - { x = 90, y = 43, i=5, max=100}, - { x = 120, y = 43, i=6, max=100}, - { x = 60, y = 53, i=7, max=100}, - { x = 90, y = 53, i=8, max=100}, - { x = 120, y = 53, i=9, max=100}, - { x = 150, y = 53, i=10,max=100}, - } + read = 0x4B, + write = 0x4C, + postRead = function(values) + local ret = {} + for i = 1, 3 do + ret[i] = bit32.lshift(values[(i - 1) * 2 + 1], 8) + values[(i - 1) * 2 + 2] + end + ret[4] = values[7] + 1 + for i = 5, 10 do + ret[i] = values[i + 3] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 1, 3 do + ret[(i - 1) * 2 + 1] = bit32.rshift(values[i], 8) + ret[(i - 1) * 2 + 2] = bit32.band(values[i], 0xFF) + end + ret[7] = bit32.band(values[4] - 1, 0xFF) + for i = 5, 10 do + ret[i + 3] = bit32.band(values[i], 0xFF) + end + return ret + end, + title = 'TPA', + text = { + {t = 'P', x = 60, y = 10}, + {t = 'I', x = 120, y = 10}, + {t = 'D', x = 175, y = 10}, + {t = 'TPA', x = 10, y = 20}, + {t = '0', x = 80, y = 43}, + {t = '100', x = 170, y = 43}, + {t = 'Throttle %', x = 10, y = 43}, + {t = 'Influence%', x = 10, y = 53} + }, + lines = { + {x1 = 1, y1 = 30, x2 = 210, y2 = 30} + }, + fields = { + -- TPA + {x = 35, y = 20, i = 1, max = 900, prec = 2}, + {x = 95, y = 20, i = 2, max = 900, prec = 2}, + {x = 150, y = 20, i = 3, max = 900, prec = 2}, + {t = 'Custom TPA', x = 10, y = 33, sp = 70, i = 4, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 90, y = 43, i = 5, max = 100}, + {x = 120, y = 43, i = 6, max = 100}, + {x = 60, y = 53, i = 7, max = 100}, + {x = 90, y = 53, i = 8, max = 100}, + {x = 120, y = 53, i = 9, max = 100}, + {x = 150, y = 53, i = 10, max = 100} + } } diff --git a/src/212x64/KISS/vtx.lua b/src/212x64/KISS/vtx.lua index 8803e0b..175ce8e 100644 --- a/src/212x64/KISS/vtx.lua +++ b/src/212x64/KISS/vtx.lua @@ -1,34 +1,31 @@ return { - read = 0x45, - write = 0x46, - - postRead = function(values) - local ret = {} - ret[1] = values[1] - ret[2] = 1 + bit32.rshift(values[2], 3) - ret[3] = 1 + bit32.band(values[2], 0x07) - ret[4] = bit32.lshift(values[3], 8) + values[4] - ret[5] = bit32.lshift(values[5], 8) + values[6] - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = bit32.band(values[1], 0xFF) - ret[2] = bit32.band((values[2]-1) * 8 + values[3]-1, 0xFF) - ret[3] = bit32.band(bit32.rshift(values[4], 8), 0xFF) - ret[4] = bit32.band(values[4], 0xFF) - ret[5] = bit32.band(bit32.rshift(values[5], 8), 0xFF) - ret[6] = bit32.band(values[5], 0xFF) - return ret - end, - - title = "VTX", - text = {}, - fields = { - { t = "Band", x = 15, y = 25, sp = 60, i=2, min=1, max=5, table = { "A", "B", "E", "FS", "RB" } }, - { t = "Channel", x = 110, y = 25, sp = 70, i=3, min=1, max=8 }, - { t = "Low Power", x = 15, y = 38, sp = 60, i=4, min=0, max=2000 }, - { t = "High Power", x = 110, y = 38, sp = 70, i=5, min=0, max=2000 } - } + read = 0x45, + write = 0x46, + postRead = function(values) + local ret = {} + ret[1] = values[1] + ret[2] = 1 + bit32.rshift(values[2], 3) + ret[3] = 1 + bit32.band(values[2], 0x07) + ret[4] = bit32.lshift(values[3], 8) + values[4] + ret[5] = bit32.lshift(values[5], 8) + values[6] + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = bit32.band(values[1], 0xFF) + ret[2] = bit32.band((values[2] - 1) * 8 + values[3] - 1, 0xFF) + ret[3] = bit32.band(bit32.rshift(values[4], 8), 0xFF) + ret[4] = bit32.band(values[4], 0xFF) + ret[5] = bit32.band(bit32.rshift(values[5], 8), 0xFF) + ret[6] = bit32.band(values[5], 0xFF) + return ret + end, + title = 'VTX', + text = {}, + fields = { + {t = 'Band', x = 15, y = 25, sp = 60, i = 2, min = 1, max = 5, table = {'A', 'B', 'E', 'FS', 'RB'}}, + {t = 'Channel', x = 110, y = 25, sp = 70, i = 3, min = 1, max = 8}, + {t = 'Low Power', x = 15, y = 38, sp = 60, i = 4, min = 0, max = 2000}, + {t = 'High Power', x = 110, y = 38, sp = 70, i = 5, min = 0, max = 2000} + } } diff --git a/src/212x64/Kiss.lua b/src/212x64/Kiss.lua index 2f7ffde..d942dec 100644 --- a/src/212x64/Kiss.lua +++ b/src/212x64/Kiss.lua @@ -1,44 +1,41 @@ +-- BEGIN 212x64 --- BEGIN X9 - -local RADIO = "212x64" +local RADIO = '212x64' local drawScreenTitle = function(title, currentPage, totalPages) - lcd.drawScreenTitle('Kiss Setup: '..title, currentPage, totalPages) + lcd.drawScreenTitle('KISS: ' .. title, currentPage, totalPages) end local drawTelemetry = function() - lcd.drawText(75,55,"No telemetry",BLINK) + lcd.drawText(75, 55, 'No telemetry', BLINK) end -local drawSaving = function() - lcd.drawFilledRectangle(40,12,120,30,ERASE) - lcd.drawRectangle(40,12,120,30,SOLID) - lcd.drawText(64,18,"Saving...", DBLSIZE + BLINK) +local drawSaving = function() + lcd.drawFilledRectangle(40, 12, 120, 30, ERASE) + lcd.drawRectangle(40, 12, 120, 30, SOLID) + lcd.drawText(64, 18, 'Saving...', DBLSIZE + BLINK) end local function drawMenu(menuList, menuActive) - local x = 40 - local y = 12 - local w = 120 - local h = #(menuList) * 8 + 6 - lcd.drawFilledRectangle(x,y,w,h,ERASE) - lcd.drawRectangle(x,y,w-1,h-1,SOLID) - lcd.drawText(x+4,y+3,"Menu:") - - for i,e in ipairs(menuList) do - if menuActive == i then - lcd.drawText(x+36,y+(i-1)*8+3,e.t,INVERS) - else - lcd.drawText(x+36,y+(i-1)*8+3,e.t) - end - end + local x = 40 + local y = 12 + local w = 120 + local h = #(menuList) * 8 + 6 + lcd.drawFilledRectangle(x, y, w, h, ERASE) + lcd.drawRectangle(x, y, w - 1, h - 1, SOLID) + lcd.drawText(x + 4, y + 3, 'Menu:') + + for i, e in ipairs(menuList) do + if menuActive == i then + lcd.drawText(x + 36, y + (i - 1) * 8 + 3, e.t, INVERS) + else + lcd.drawText(x + 36, y + (i - 1) * 8 + 3, e.t) + end + end end -local function getDefaultTextOptions() - return 0 +local function getDefaultTextOptions() + return 0 end -local EVT_VIRTUAL_MENU_LONG = bit32.bor(bit32.band(EVT_MENU_BREAK,0x1f),0x80) - --- END X9 \ No newline at end of file +-- END 212x64 diff --git a/src/480x272/KISS/alarms.lua b/src/480x272/KISS/alarms.lua index 68a894a..51705c2 100644 --- a/src/480x272/KISS/alarms.lua +++ b/src/480x272/KISS/alarms.lua @@ -1,29 +1,26 @@ return { - read = 0x49, - write = 0x4A, - - postRead = function(values) - local ret = {} - ret[1] = 100 * (bit32.lshift(values[1], 8) + values[2]) - ret[2] = bit32.lshift(values[3], 8) + values[4] - return ret - end, - - preWrite = function(values) - local ret = {} - local tmp = bit32.band(math.floor(values[1]/100), 0xFFFF) - ret[1] = bit32.band(bit32.rshift(tmp, 8), 0xFF) - ret[2] = bit32.band(tmp, 0xFF) - ret[3] = bit32.band(bit32.rshift(values[2], 8), 0xFF) - ret[4] = bit32.band(values[2], 0xFF) - return ret - end, - - title = "Alarms", - text = {}, - fields = { - -- Alarms - { t = "VBat", x = 100, y = 96, sp = 60, i=1, min=0, max=26000, prec=1 }, - { t = "mAH", x = 250, y = 96, sp = 60, i=2, min=0, max=26000, inc=10 } - } + read = 0x49, + write = 0x4A, + postRead = function(values) + local ret = {} + ret[1] = 100 * (bit32.lshift(values[1], 8) + values[2]) + ret[2] = bit32.lshift(values[3], 8) + values[4] + return ret + end, + preWrite = function(values) + local ret = {} + local tmp = bit32.band(math.floor(values[1] / 100), 0xFFFF) + ret[1] = bit32.band(bit32.rshift(tmp, 8), 0xFF) + ret[2] = bit32.band(tmp, 0xFF) + ret[3] = bit32.band(bit32.rshift(values[2], 8), 0xFF) + ret[4] = bit32.band(values[2], 0xFF) + return ret + end, + title = 'Alarms', + text = {}, + fields = { + -- Alarms + {t = 'VBat', x = 100, y = 96, sp = 60, i = 1, min = 0, max = 26000, prec = 1}, + {t = 'mAH', x = 250, y = 96, sp = 60, i = 2, min = 0, max = 26000, inc = 10} + } } diff --git a/src/480x272/KISS/filters.lua b/src/480x272/KISS/filters.lua index 54308c4..4b095bb 100644 --- a/src/480x272/KISS/filters.lua +++ b/src/480x272/KISS/filters.lua @@ -1,64 +1,82 @@ return { - read = 0x47, - write = 0x48, - - postRead = function(values) - local ret = {} - ret[1] = values[3] + 1 - ret[2] = bit32.lshift(values[4], 8) + values[5] - ret[3] = bit32.lshift(values[6], 8) + values[7] - ret[4] = values[8] + 1 - ret[5] = bit32.lshift(values[9], 8) + values[10] - ret[6] = bit32.lshift(values[11], 8) + values[12] - ret[7] = values[1] + 1 - ret[8] = values[2] - ret[9] = values[13] + 1 - ret[10] = values[14] + 1 - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = bit32.band(values[7]-1, 0xFF) - ret[2] = bit32.band(values[8], 0xFF) - ret[3] = bit32.band(values[1]-1, 0xFF); - ret[4] = bit32.band(bit32.rshift(values[2], 8), 0xFF) - ret[5] = bit32.band(values[2], 0xFF) - ret[6] = bit32.band(bit32.rshift(values[3], 8), 0xFF) - ret[7] = bit32.band(values[3], 0xFF) - ret[8] = bit32.band(values[4]-1, 0xFF); - ret[9] = bit32.band(bit32.rshift(values[5], 8), 0xFF) - ret[10] = bit32.band(values[5], 0xFF) - ret[11] = bit32.band(bit32.rshift(values[6], 8), 0xFF) - ret[12] = bit32.band(values[6], 0xFF) - ret[13] = bit32.band(values[9]-1, 0xFF) - ret[14] = bit32.band(values[10]-1, 0xFF) - return ret - end, - - title = "Filters", - text = { - { t = "Notch Filter", x = 113, y = 68 }, - { t = "Center", x = 220, y = 68 }, - { t = "Cutoff", x = 300, y = 68 }, - { t = "Roll", x = 35, y = 96 }, - { t = "Pitch", x = 35, y = 124 }, - { t = "Roll/Pitch LPF", x = 35, y = 158 }, - { t = "Yaw filter", x = 220, y = 158 }, - { t = "Yaw LPF", x = 35, y = 186 }, - { t = "Dterm LPF", x = 220, y = 186 } - }, - fields = { - -- Filters - { x = 139, y = 96, i=1, min=1, max=2, table = { "Off", "On" }}, - { x = 219, y = 96, i=2, min=0, max=490 }, - { x = 299, y = 96, i=3, min=0, max=490 }, - { x = 139, y = 124, i=4, min=1, max=2, table = { "Off", "On" }}, - { x = 219, y = 124, i=5, min=0, max=490 }, - { x = 299, y = 124, i=6, min=0, max=490 }, - { x = 139, y = 158, i=7, min=1, max=7, table = { "Off", "High", "Med. High", "Medium", "Med. Low", "Low", "Very Low" } }, - { x = 299, y = 158, i=8, min=0, max=97}, - { x = 139, y = 186, i=9, min=1, max=7, table = { "Off", "High", "Med. High", "Medium", "Med. Low", "Low", "Very Low" } }, - { x = 299, y = 186, i=10, min=1, max=7, table = { "Off", "High", "Med. High", "Medium", "Med. Low", "Low", "Very Low" } }, - } + read = 0x47, + write = 0x48, + postRead = function(values) + local ret = {} + ret[1] = values[3] + 1 + ret[2] = bit32.lshift(values[4], 8) + values[5] + ret[3] = bit32.lshift(values[6], 8) + values[7] + ret[4] = values[8] + 1 + ret[5] = bit32.lshift(values[9], 8) + values[10] + ret[6] = bit32.lshift(values[11], 8) + values[12] + ret[7] = values[1] + 1 + ret[8] = values[2] + ret[9] = values[13] + 1 + ret[10] = values[14] + 1 + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = bit32.band(values[7] - 1, 0xFF) + ret[2] = bit32.band(values[8], 0xFF) + ret[3] = bit32.band(values[1] - 1, 0xFF) + ret[4] = bit32.band(bit32.rshift(values[2], 8), 0xFF) + ret[5] = bit32.band(values[2], 0xFF) + ret[6] = bit32.band(bit32.rshift(values[3], 8), 0xFF) + ret[7] = bit32.band(values[3], 0xFF) + ret[8] = bit32.band(values[4] - 1, 0xFF) + ret[9] = bit32.band(bit32.rshift(values[5], 8), 0xFF) + ret[10] = bit32.band(values[5], 0xFF) + ret[11] = bit32.band(bit32.rshift(values[6], 8), 0xFF) + ret[12] = bit32.band(values[6], 0xFF) + ret[13] = bit32.band(values[9] - 1, 0xFF) + ret[14] = bit32.band(values[10] - 1, 0xFF) + return ret + end, + title = 'Filters', + text = { + {t = 'Notch Filter', x = 113, y = 68}, + {t = 'Center', x = 220, y = 68}, + {t = 'Cutoff', x = 300, y = 68}, + {t = 'Roll', x = 35, y = 96}, + {t = 'Pitch', x = 35, y = 124}, + {t = 'Roll/Pitch LPF', x = 35, y = 158}, + {t = 'Yaw filter', x = 220, y = 158}, + {t = 'Yaw LPF', x = 35, y = 186}, + {t = 'Dterm LPF', x = 220, y = 186} + }, + fields = { + -- Filters + {x = 139, y = 96, i = 1, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 219, y = 96, i = 2, min = 0, max = 490}, + {x = 299, y = 96, i = 3, min = 0, max = 490}, + {x = 139, y = 124, i = 4, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 219, y = 124, i = 5, min = 0, max = 490}, + {x = 299, y = 124, i = 6, min = 0, max = 490}, + { + x = 139, + y = 158, + i = 7, + min = 1, + max = 7, + table = {'Off', 'High', 'Med. High', 'Medium', 'Med. Low', 'Low', 'Very Low'} + }, + {x = 299, y = 158, i = 8, min = 0, max = 97}, + { + x = 139, + y = 186, + i = 9, + min = 1, + max = 7, + table = {'Off', 'High', 'Med. High', 'Medium', 'Med. Low', 'Low', 'Very Low'} + }, + { + x = 299, + y = 186, + i = 10, + min = 1, + max = 7, + table = {'Off', 'High', 'Med. High', 'Medium', 'Med. Low', 'Low', 'Very Low'} + } + } } diff --git a/src/480x272/KISS/pids.lua b/src/480x272/KISS/pids.lua index 5f9f745..42e06ab 100644 --- a/src/480x272/KISS/pids.lua +++ b/src/480x272/KISS/pids.lua @@ -1,51 +1,48 @@ return { - read = 0x43, - write = 0x44, - - postRead = function(values) - local ret = {} - for i=0,2 do - ret[i*3+1] = bit32.lshift(values[i*6+1], 8) + values[i*6+2] - ret[i*3+2] = bit32.lshift(values[i*6+3], 8) + values[i*6+4] - ret[i*3+3] = bit32.lshift(values[i*6+5], 8) + values[i*6+6] - end - return ret - end, - - preWrite = function(values) - local ret = {} - for i=0,2 do - ret[i*6+1] = bit32.rshift(values[i*3+1], 8) - ret[i*6+2] = bit32.band(values[i*3+1], 0xFF) - ret[i*6+3] = bit32.rshift(values[i*3+2], 8) - ret[i*6+4] = bit32.band(values[i*3+2], 0xFF) - ret[i*6+5] = bit32.rshift(values[i*3+3], 8) - ret[i*6+6] = bit32.band(values[i*3+3], 0xFF) - end - return ret - end, - - title = "PIDs", - text = { - { t = "P", x = 151, y = 68 }, - { t = "I", x = 229, y = 68 }, - { t = "D", x = 309, y = 68 }, - { t = "Roll", x = 35, y = 96 }, - { t = "Pitch", x = 35, y = 124 }, - { t = "Yaw", x = 35, y = 152 } - }, - fields = { - -- P - { x = 129, y = 96, i=1, max=65000, prec=2 }, - { x = 129, y = 124, i=4, max=65000, prec=2 }, - { x = 129, y = 152, i=7, max=65000, prec=2 }, - -- I - { x = 209, y = 96, i=2, max=65000, prec=3 }, - { x = 209, y = 124, i=5, max=65000, prec=3 }, - { x = 209, y = 152, i=8, max=65000, prec=3 }, - -- D - { x = 289, y = 96, i=3, max=65000, prec=2 }, - { x = 289, y = 124, i=6, max=65000, prec=2 }, - { x = 289, y = 152, i=9, max=65000, prec=2 } - } + read = 0x43, + write = 0x44, + postRead = function(values) + local ret = {} + for i = 0, 2 do + ret[i * 3 + 1] = bit32.lshift(values[i * 6 + 1], 8) + values[i * 6 + 2] + ret[i * 3 + 2] = bit32.lshift(values[i * 6 + 3], 8) + values[i * 6 + 4] + ret[i * 3 + 3] = bit32.lshift(values[i * 6 + 5], 8) + values[i * 6 + 6] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 0, 2 do + ret[i * 6 + 1] = bit32.rshift(values[i * 3 + 1], 8) + ret[i * 6 + 2] = bit32.band(values[i * 3 + 1], 0xFF) + ret[i * 6 + 3] = bit32.rshift(values[i * 3 + 2], 8) + ret[i * 6 + 4] = bit32.band(values[i * 3 + 2], 0xFF) + ret[i * 6 + 5] = bit32.rshift(values[i * 3 + 3], 8) + ret[i * 6 + 6] = bit32.band(values[i * 3 + 3], 0xFF) + end + return ret + end, + title = 'PIDs', + text = { + {t = 'P', x = 151, y = 68}, + {t = 'I', x = 229, y = 68}, + {t = 'D', x = 309, y = 68}, + {t = 'Roll', x = 35, y = 96}, + {t = 'Pitch', x = 35, y = 124}, + {t = 'Yaw', x = 35, y = 152} + }, + fields = { + -- P + {x = 129, y = 96, i = 1, max = 65000, prec = 2}, + {x = 129, y = 124, i = 4, max = 65000, prec = 2}, + {x = 129, y = 152, i = 7, max = 65000, prec = 2}, + -- I + {x = 209, y = 96, i = 2, max = 65000, prec = 3}, + {x = 209, y = 124, i = 5, max = 65000, prec = 3}, + {x = 209, y = 152, i = 8, max = 65000, prec = 3}, + -- D + {x = 289, y = 96, i = 3, max = 65000, prec = 2}, + {x = 289, y = 124, i = 6, max = 65000, prec = 2}, + {x = 289, y = 152, i = 9, max = 65000, prec = 2} + } } diff --git a/src/480x272/KISS/rates.lua b/src/480x272/KISS/rates.lua index 67ad172..97963a7 100644 --- a/src/480x272/KISS/rates.lua +++ b/src/480x272/KISS/rates.lua @@ -1,44 +1,42 @@ return { - read = 0x4D, - write = 0x4E, - - postRead = function(values) - local ret = {} - for i=1,9 do - ret[i] = bit32.lshift(values[(i-1)*2 + 1], 8) + values[(i-1)*2 + 2] - end - return ret - end, - preWrite = function(values) - local ret = {} - for i=1,9 do - ret[(i-1)*2 + 1] = bit32.rshift(values[i], 8) - ret[(i-1)*2 + 2] = bit32.band(values[i], 0xFF) - end - return ret - end, - - title = "Rates", - text = { - { t = "RC Rate", x = 139, y = 68 }, - { t = "Rate", x = 227, y = 68 }, - { t = "RC Curve", x = 289, y = 68 }, - { t = "Roll", x = 35, y = 96 }, - { t = "Pitch", x = 35, y = 124 }, - { t = "Yaw", x = 35, y = 152 } - }, - fields = { - -- RC Rate - { x = 129, y = 96, i=1, max=65000, prec=2 }, - { x = 209, y = 96, i=2, max=65000, prec=2 }, - { x = 289, y = 96, i=3, max=65000, prec=2 }, - -- Rate - { x = 129, y = 124, i=4, max=65000, prec=2 }, - { x = 209, y = 124, i=5, max=65000, prec=2 }, - { x = 289, y = 124, i=6, max=65000, prec=2 }, - -- RC Curve - { x = 129, y = 152, i=7, max=65000, prec=2 }, - { x = 209, y = 152, i=8, max=65000, prec=2 }, - { x = 289, y = 152, i=9, max=65000, prec=2 } - } + read = 0x4D, + write = 0x4E, + postRead = function(values) + local ret = {} + for i = 1, 9 do + ret[i] = bit32.lshift(values[(i - 1) * 2 + 1], 8) + values[(i - 1) * 2 + 2] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 1, 9 do + ret[(i - 1) * 2 + 1] = bit32.rshift(values[i], 8) + ret[(i - 1) * 2 + 2] = bit32.band(values[i], 0xFF) + end + return ret + end, + title = 'Rates', + text = { + {t = 'RC Rate', x = 139, y = 68}, + {t = 'Rate', x = 227, y = 68}, + {t = 'RC Curve', x = 289, y = 68}, + {t = 'Roll', x = 35, y = 96}, + {t = 'Pitch', x = 35, y = 124}, + {t = 'Yaw', x = 35, y = 152} + }, + fields = { + -- RC Rate + {x = 129, y = 96, i = 1, max = 65000, prec = 2}, + {x = 209, y = 96, i = 2, max = 65000, prec = 2}, + {x = 289, y = 96, i = 3, max = 65000, prec = 2}, + -- Rate + {x = 129, y = 124, i = 4, max = 65000, prec = 2}, + {x = 209, y = 124, i = 5, max = 65000, prec = 2}, + {x = 289, y = 124, i = 6, max = 65000, prec = 2}, + -- RC Curve + {x = 129, y = 152, i = 7, max = 65000, prec = 2}, + {x = 209, y = 152, i = 8, max = 65000, prec = 2}, + {x = 289, y = 152, i = 9, max = 65000, prec = 2} + } } diff --git a/src/480x272/KISS/setpnt.lua b/src/480x272/KISS/setpnt.lua index 0bafb22..8472452 100644 --- a/src/480x272/KISS/setpnt.lua +++ b/src/480x272/KISS/setpnt.lua @@ -1,22 +1,19 @@ return { - read = 0x52, - write = 0x53, - - postRead = function(values) - local ret = {} - ret[1] = values[1] - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = values[1] - return ret - end, - - title = "Setpoints", - text = {}, - fields = { - { t = "D Setpoint", x = 100, y = 96, sp = 70, i=1, min=0, max=100 } - } -} \ No newline at end of file + read = 0x52, + write = 0x53, + postRead = function(values) + local ret = {} + ret[1] = values[1] + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = values[1] + return ret + end, + title = 'Setpoints', + text = {}, + fields = { + {t = 'D Setpoint', x = 100, y = 96, sp = 70, i = 1, min = 0, max = 100} + } +} diff --git a/src/480x272/KISS/tpa.lua b/src/480x272/KISS/tpa.lua index abe61af..bcbee2f 100644 --- a/src/480x272/KISS/tpa.lua +++ b/src/480x272/KISS/tpa.lua @@ -1,55 +1,54 @@ return { - read = 0x4B, - write = 0x4C, - - postRead = function(values) - local ret = {} - for i=1,3 do - ret[i] = bit32.lshift(values[(i-1)*2 + 1], 8) + values[(i-1)*2 + 2] - end - ret[4] = values[7] + 1 - for i=5,10 do - ret[i] = values[i + 3] - end - return ret - end, - preWrite = function(values) - local ret = {} - for i=1,3 do - ret[(i-1)*2 + 1] = bit32.rshift(values[i], 8) - ret[(i-1)*2 + 2] = bit32.band(values[i], 0xFF) - end - ret[7] = bit32.band(values[4]-1, 0xFF) - for i=5,10 do - ret[i+3] = bit32.band(values[i], 0xFF) - end - return ret - end, - title = "TPA", - text = { - { t = "P", x = 151, y = 68 }, - { t = "I", x = 229, y = 68 }, - { t = "D", x = 309, y = 68 }, - { t = "TPA", x = 35, y = 96 }, - { t = "0", x = 151, y = 162 }, - { t = "100", x = 309, y = 162 }, - { t = "Throttle %", x = 35, y = 162 }, - { t = "Influence%", x = 35, y = 190 }, - }, - lines = { - { x1 = 30, y1 = 125, x2 = 350, y2 = 125 } - }, - fields = { - -- TPA - { x = 129, y = 96, i=1, max=900, prec=2 }, - { x = 209, y = 96, i=2, max=900, prec=2 }, - { x = 289, y = 96, i=3, max=900, prec=2 }, - { t = "Custom TPA", x = 35, y = 134, sp=115, i=4, min=1, max=2, table = { "Off", "On" } }, - { x = 190, y = 162, i=5, max=100}, - { x = 240, y = 162, i=6, max=100}, - { x = 129, y = 190, i=7, max=100}, - { x = 190, y = 190, i=8, max=100}, - { x = 240, y = 190, i=9, max=100}, - { x = 289, y = 190, i=10,max=100}, - } + read = 0x4B, + write = 0x4C, + postRead = function(values) + local ret = {} + for i = 1, 3 do + ret[i] = bit32.lshift(values[(i - 1) * 2 + 1], 8) + values[(i - 1) * 2 + 2] + end + ret[4] = values[7] + 1 + for i = 5, 10 do + ret[i] = values[i + 3] + end + return ret + end, + preWrite = function(values) + local ret = {} + for i = 1, 3 do + ret[(i - 1) * 2 + 1] = bit32.rshift(values[i], 8) + ret[(i - 1) * 2 + 2] = bit32.band(values[i], 0xFF) + end + ret[7] = bit32.band(values[4] - 1, 0xFF) + for i = 5, 10 do + ret[i + 3] = bit32.band(values[i], 0xFF) + end + return ret + end, + title = 'TPA', + text = { + {t = 'P', x = 151, y = 68}, + {t = 'I', x = 229, y = 68}, + {t = 'D', x = 309, y = 68}, + {t = 'TPA', x = 35, y = 96}, + {t = '0', x = 151, y = 162}, + {t = '100', x = 309, y = 162}, + {t = 'Throttle %', x = 35, y = 162}, + {t = 'Influence%', x = 35, y = 190} + }, + lines = { + {x1 = 30, y1 = 125, x2 = 350, y2 = 125} + }, + fields = { + -- TPA + {x = 129, y = 96, i = 1, max = 900, prec = 2}, + {x = 209, y = 96, i = 2, max = 900, prec = 2}, + {x = 289, y = 96, i = 3, max = 900, prec = 2}, + {t = 'Custom TPA', x = 35, y = 134, sp = 115, i = 4, min = 1, max = 2, table = {'Off', 'On'}}, + {x = 190, y = 162, i = 5, max = 100}, + {x = 240, y = 162, i = 6, max = 100}, + {x = 129, y = 190, i = 7, max = 100}, + {x = 190, y = 190, i = 8, max = 100}, + {x = 240, y = 190, i = 9, max = 100}, + {x = 289, y = 190, i = 10, max = 100} + } } diff --git a/src/480x272/KISS/vtx.lua b/src/480x272/KISS/vtx.lua index cc61ad5..f34bb2d 100644 --- a/src/480x272/KISS/vtx.lua +++ b/src/480x272/KISS/vtx.lua @@ -1,35 +1,32 @@ return { - read = 0x45, - write = 0x46, - - postRead = function(values) - local ret = {} - ret[1] = values[1] - ret[2] = 1 + bit32.rshift(values[2], 3) - ret[3] = 1 + bit32.band(values[2], 0x07) - ret[4] = bit32.lshift(values[3], 8) + values[4] - ret[5] = bit32.lshift(values[5], 8) + values[6] - return ret - end, - - preWrite = function(values) - local ret = {} - ret[1] = bit32.band(values[1], 0xFF) - ret[2] = bit32.band((values[2]-1) * 8 + values[3]-1, 0xFF) - ret[3] = bit32.band(bit32.rshift(values[4], 8), 0xFF) - ret[4] = bit32.band(values[4], 0xFF) - ret[5] = bit32.band(bit32.rshift(values[5], 8), 0xFF) - ret[6] = bit32.band(values[5], 0xFF) - return ret - end, - - title = "VTX", - text = {}, - fields = { - -- VTX - { t = "Band", x = 35, y = 96, sp = 100, i=2, min=1, max=5, table = { "A", "B", "E", "FS", "RB" } }, - { t = "Channel", x = 210, y = 96, sp = 120, i=3, min=1, max=8 }, - { t = "Low Power", x = 35, y = 158, sp = 100, i=4, min=0, max=2000 }, - { t = "High Power", x = 210, y = 158, sp = 120, i=5, min=0, max=2000 } - } + read = 0x45, + write = 0x46, + postRead = function(values) + local ret = {} + ret[1] = values[1] + ret[2] = 1 + bit32.rshift(values[2], 3) + ret[3] = 1 + bit32.band(values[2], 0x07) + ret[4] = bit32.lshift(values[3], 8) + values[4] + ret[5] = bit32.lshift(values[5], 8) + values[6] + return ret + end, + preWrite = function(values) + local ret = {} + ret[1] = bit32.band(values[1], 0xFF) + ret[2] = bit32.band((values[2] - 1) * 8 + values[3] - 1, 0xFF) + ret[3] = bit32.band(bit32.rshift(values[4], 8), 0xFF) + ret[4] = bit32.band(values[4], 0xFF) + ret[5] = bit32.band(bit32.rshift(values[5], 8), 0xFF) + ret[6] = bit32.band(values[5], 0xFF) + return ret + end, + title = 'VTX', + text = {}, + fields = { + -- VTX + {t = 'Band', x = 35, y = 96, sp = 100, i = 2, min = 1, max = 5, table = {'A', 'B', 'E', 'FS', 'RB'}}, + {t = 'Channel', x = 210, y = 96, sp = 120, i = 3, min = 1, max = 8}, + {t = 'Low Power', x = 35, y = 158, sp = 100, i = 4, min = 0, max = 2000}, + {t = 'High Power', x = 210, y = 158, sp = 120, i = 5, min = 0, max = 2000} + } } diff --git a/src/480x272/Kiss.lua b/src/480x272/Kiss.lua index 3b4db5a..6000262 100644 --- a/src/480x272/Kiss.lua +++ b/src/480x272/Kiss.lua @@ -1,47 +1,47 @@ --- BEGIN HORUS / T16 +-- BEGIN 480x272 -local RADIO = "480x272" +local RADIO = '480x272' local drawScreenTitle = function(title, currentPage, totalPages) - lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) + lcd.drawScreenTitle('KISS: ' .. title, currentPage, totalPages) + lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) + lcd.drawText(1, 5, title, MENU_TITLE_COLOR) end local drawTelemetry = function() - lcd.drawText(192,LCD_H - 28,"No telemetry",TEXT_COLOR + INVERS + BLINK) + lcd.drawText(192, LCD_H - 28, 'No telemetry', TEXT_COLOR + INVERS + BLINK) end local drawSaving = function() - lcd.drawFilledRectangle(120,100,180,60,TEXT_BGCOLOR) - lcd.drawRectangle(120,100,180,60,SOLID) - lcd.drawText(120+12,100+12,"Saving...",DBLSIZE + BLINK + (TEXT_COLOR)) + lcd.drawFilledRectangle(120, 100, 180, 60, TEXT_BGCOLOR) + lcd.drawRectangle(120, 100, 180, 60, SOLID) + lcd.drawText(120 + 12, 100 + 12, 'Saving...', DBLSIZE + BLINK + (TEXT_COLOR)) end local function drawMenu(menuList, menuActive) - local x = 120 - local y = 100 - local w = 200 - local x_offset = 68 - local h_line = 20 - local h_offset = 6 - local h = #(menuList) * h_line + h_offset*2 - - lcd.drawFilledRectangle(x,y,w,h,TEXT_BGCOLOR) - lcd.drawRectangle(x,y,w-1,h-1,LINE_COLOR) - lcd.drawText(x+h_line/2,y+h_offset,"Menu:", TEXT_COLOR) - - for i,e in ipairs(menuList) do - local text_options = TEXT_COLOR - if menuActive == i then - text_options = text_options + INVERS + local x = 120 + local y = 100 + local w = 200 + local x_offset = 68 + local h_line = 20 + local h_offset = 6 + local h = #(menuList) * h_line + h_offset * 2 + + lcd.drawFilledRectangle(x, y, w, h, TEXT_BGCOLOR) + lcd.drawRectangle(x, y, w - 1, h - 1, LINE_COLOR) + lcd.drawText(x + h_line / 2, y + h_offset, 'Menu:', TEXT_COLOR) + + for i, e in ipairs(menuList) do + local text_options = TEXT_COLOR + if menuActive == i then + text_options = text_options + INVERS + end + lcd.drawText(x + x_offset, y + (i - 1) * h_line + h_offset, e.t, text_options) end - lcd.drawText(x+x_offset,y+(i-1)*h_line+h_offset,e.t,text_options) - end end local function getDefaultTextOptions() - return TEXT_COLOR + return TEXT_COLOR end --- END HORUS - +-- END 480x272 diff --git a/src/common/KissProtocolCF.lua b/src/common/KissProtocolCF.lua index 9d1b2bc..36736d9 100644 --- a/src/common/KissProtocolCF.lua +++ b/src/common/KissProtocolCF.lua @@ -2,123 +2,121 @@ -- KISS/CF code -- Kiss version by Alex Fedorov aka FedorComander -LOCAL_DEVICE_ID = 0xEA -- transmitter +LOCAL_DEVICE_ID = 0xEA -- transmitter REMOTE_DEVICE_ID = 0xC8 -- flight controller -FC_REQUEST_COMMAND = 0x78 +FC_REQUEST_COMMAND = 0x78 FC_RESPONSE_COMMAND = 0x79 local kissLastReq = 0 local kissTxBuf = {} local function isTelemetryPresent() - return true + return true end local function subrange(t, first, last) - local sub = {} - for i=first,last do - sub[#sub + 1] = t[i] - end - return sub + local sub = {} + for i = first, last do + sub[#sub + 1] = t[i] + end + return sub end local function kissProcessTxQ() - if (#(kissTxBuf) == 0) then - return false - end + if (#(kissTxBuf) == 0) then + return false + end - if not crossfireTelemetryPush() then - return true - end - - local tmp = {} - tmp[1] = REMOTE_DEVICE_ID - tmp[2] = LOCAL_DEVICE_ID - for i=1,#(kissTxBuf) do - tmp[2 + i] = kissTxBuf[i] - end - local ret = crossfireTelemetryPush(FC_REQUEST_COMMAND, tmp) - - kissTxBuf = {} - return false + if not crossfireTelemetryPush() then + return true + end + + local tmp = {} + tmp[1] = REMOTE_DEVICE_ID + tmp[2] = LOCAL_DEVICE_ID + for i = 1, #(kissTxBuf) do + tmp[2 + i] = kissTxBuf[i] + end + local ret = crossfireTelemetryPush(FC_REQUEST_COMMAND, tmp) + + kissTxBuf = {} + return false end local function kissSendRequest(cmd, payload) - if #(kissTxBuf) ~= 0 then - return nil - end - - local crc = 0 - - kissTxBuf[1] = bit32.band(cmd, 0xFF) -- KISS command - kissTxBuf[2] = bit32.band(#(payload), 0xFF) -- KISS payload size - - for i=1,#(payload) do - kissTxBuf[i+2] = payload[i] - crc = bit32.bxor(crc, payload[i]); - for i=1,8 do - if bit32.band(crc, 0x80) ~= 0 then - crc = bit32.bxor(bit32.lshift(crc, 1), 0xD5) - else - crc = bit32.lshift(crc, 1) - end - crc = bit32.band(crc, 0xFF) + if #(kissTxBuf) ~= 0 then + return nil end - end - kissTxBuf[#(payload)+3] = crc - kissLastReq = cmd - return kissProcessTxQ() + + local crc = 0 + + kissTxBuf[1] = bit32.band(cmd, 0xFF) -- KISS command + kissTxBuf[2] = bit32.band(#(payload), 0xFF) -- KISS payload size + + for i = 1, #(payload) do + kissTxBuf[i + 2] = payload[i] + crc = bit32.bxor(crc, payload[i]) + for i = 1, 8 do + if bit32.band(crc, 0x80) ~= 0 then + crc = bit32.bxor(bit32.lshift(crc, 1), 0xD5) + else + crc = bit32.lshift(crc, 1) + end + crc = bit32.band(crc, 0xFF) + end + end + kissTxBuf[#(payload) + 3] = crc + kissLastReq = cmd + return kissProcessTxQ() end local function kissReceivedReply(payload) - local crc = 0 - - for i=3, (#(payload)-1) do - crc = bit32.bxor(crc, payload[i]); - for i=1,8 do - if bit32.band(crc, 0x80) ~= 0 then - crc = bit32.bxor(bit32.lshift(crc, 1), 0xD5) - else - crc = bit32.lshift(crc, 1) - end - crc = bit32.band(crc, 0xFF) + local crc = 0 + + for i = 3, (#(payload) - 1) do + crc = bit32.bxor(crc, payload[i]) + for i = 1, 8 do + if bit32.band(crc, 0x80) ~= 0 then + crc = bit32.bxor(bit32.lshift(crc, 1), 0xD5) + else + crc = bit32.lshift(crc, 1) + end + crc = bit32.band(crc, 0xFF) + end end - end - if crc ~= payload[#(payload)] then - return nil - end + if crc ~= payload[#(payload)] then + return nil + end - return subrange(payload, 3, #(payload)-1) + return subrange(payload, 3, #(payload) - 1) end local function kissPollReply() - - while true do - local command, value = crossfireTelemetryPop() - if command == nil then - break + while true do + local command, value = crossfireTelemetryPop() + if command == nil then + break + end + + if (bit32.band(command, 0xFF) ~= FC_RESPONSE_COMMAND) then + break + end + + if (value ~= nil) then + local ret = kissReceivedReply(subrange(value, 3, #(value))) + if type(ret) == 'table' then + return kissLastReq, ret + end + else + break + end end - if (bit32.band(command, 0xFF) ~= FC_RESPONSE_COMMAND) then - break - end - - if (value ~=nil) then - local ret = kissReceivedReply(subrange(value, 3, #(value))) - if type(ret) == "table" then - return kissLastReq,ret - end - else - break - end - end - - return nil + return nil end -- -- End of KISS/CROSSFIRE code -- - diff --git a/src/common/KissProtocolSPort.lua b/src/common/KissProtocolSPort.lua index 5d03f67..00707f7 100644 --- a/src/common/KissProtocolSPort.lua +++ b/src/common/KissProtocolSPort.lua @@ -5,16 +5,15 @@ -- -- Kiss version by Alex Fedorov aka FedorComander - -- SPORT BEGIN -SPORT_KISS_VERSION = bit32.lshift(1,5) -SPORT_KISS_STARTFLAG = bit32.lshift(1,4) -LOCAL_SENSOR_ID = 0x0D +SPORT_KISS_VERSION = bit32.lshift(1, 5) +SPORT_KISS_STARTFLAG = bit32.lshift(1, 4) +LOCAL_SENSOR_ID = 0x0D REMOTE_SENSOR_ID_1 = 0x1B REMOTE_SENSOR_ID_2 = 0x00 REQUEST_FRAME_ID = 0x30 -REPLY_FRAME_ID = 0x32 +REPLY_FRAME_ID = 0x32 -- Sequence number for next KISS/SPORT packet local sportKissSeq = 0 @@ -31,204 +30,198 @@ local kissTxCRC = 0 local kissTxPk = 0 local function isTelemetryPresent() - return getValue("RSSI")>0 + return getValue('RSSI') > 0 end local function subrange(t, first, last) - local sub = {} - for i=first,last do - sub[#sub + 1] = t[i] - end - return sub + local sub = {} + for i = first, last do + sub[#sub + 1] = t[i] + end + return sub end local function kissSendSport(payload) - local dataId = 0 - dataId = payload[1] + bit32.lshift(payload[2],8) + local dataId = 0 + dataId = payload[1] + bit32.lshift(payload[2], 8) - local value = 0 - value = payload[3] + bit32.lshift(payload[4],8) - + bit32.lshift(payload[5],16) + bit32.lshift(payload[6],24) + local value = 0 + value = payload[3] + bit32.lshift(payload[4], 8) + bit32.lshift(payload[5], 16) + bit32.lshift(payload[6], 24) - local ret = sportTelemetryPush(LOCAL_SENSOR_ID, REQUEST_FRAME_ID, dataId, value) - if ret then - kissTxPk = kissTxPk + 1 - end + local ret = sportTelemetryPush(LOCAL_SENSOR_ID, REQUEST_FRAME_ID, dataId, value) + if ret then + kissTxPk = kissTxPk + 1 + end end local function kissProcessTxQ() + if (#(kissTxBuf) == 0) then + return false + end + + if not sportTelemetryPush() then + return true + end + + local payload = {} + payload[1] = sportKissSeq + SPORT_KISS_VERSION + sportKissSeq = bit32.band(sportKissSeq + 1, 0x0F) - if (#(kissTxBuf) == 0) then - return false - end - - if not sportTelemetryPush() then - return true - end - - local payload = {} - payload[1] = sportKissSeq + SPORT_KISS_VERSION - sportKissSeq = bit32.band(sportKissSeq + 1, 0x0F) - - if kissTxIdx == 1 then - -- start flag - payload[1] = payload[1] + SPORT_KISS_STARTFLAG - end - - local i = 2 - while (i <= 6) do - payload[i] = kissTxBuf[kissTxIdx] - kissTxIdx = kissTxIdx + 1 - i = i + 1 - if kissTxIdx > #(kissTxBuf) then - break + if kissTxIdx == 1 then + -- start flag + payload[1] = payload[1] + SPORT_KISS_STARTFLAG end - end - if i <= 6 then - while i <= 6 do - payload[i] = 0 - i = i + 1 + local i = 2 + while (i <= 6) do + payload[i] = kissTxBuf[kissTxIdx] + kissTxIdx = kissTxIdx + 1 + i = i + 1 + if kissTxIdx > #(kissTxBuf) then + break + end end - kissSendSport(payload) - kissTxBuf = {} - kissTxIdx = 1 - return false - else - kissSendSport(payload) - if kissTxIdx > #(kissTxBuf) then - kissTxBuf = {} - kissTxIdx = 1 - return false + + if i <= 6 then + while i <= 6 do + payload[i] = 0 + i = i + 1 + end + kissSendSport(payload) + kissTxBuf = {} + kissTxIdx = 1 + return false else - return true + kissSendSport(payload) + if kissTxIdx > #(kissTxBuf) then + kissTxBuf = {} + kissTxIdx = 1 + return false + else + return true + end end - end end local function kissSendRequest(cmd, payload) - -- busy - if #(kissTxBuf) ~= 0 then - return nil - end - - local crc = 0 - - kissTxBuf[1] = bit32.band(cmd,0xFF) -- KISS command - kissTxBuf[2] = bit32.band(#(payload), 0xFF) -- KISS payload size - - for i=1,#(payload) do - kissTxBuf[i+2] = payload[i] - crc = bit32.bxor(crc, payload[i]); - for i=1,8 do - if bit32.band(crc, 0x80) ~= 0 then - crc = bit32.bxor(bit32.lshift(crc, 1), 0xD5) - else - crc = bit32.lshift(crc, 1) - end - crc = bit32.band(crc, 0xFF) + -- busy + if #(kissTxBuf) ~= 0 then + return nil end - end - kissTxBuf[#(payload)+3] = crc - kissLastReq = cmd - return kissProcessTxQ() + + local crc = 0 + + kissTxBuf[1] = bit32.band(cmd, 0xFF) -- KISS command + kissTxBuf[2] = bit32.band(#(payload), 0xFF) -- KISS payload size + + for i = 1, #(payload) do + kissTxBuf[i + 2] = payload[i] + crc = bit32.bxor(crc, payload[i]) + for i = 1, 8 do + if bit32.band(crc, 0x80) ~= 0 then + crc = bit32.bxor(bit32.lshift(crc, 1), 0xD5) + else + crc = bit32.lshift(crc, 1) + end + crc = bit32.band(crc, 0xFF) + end + end + kissTxBuf[#(payload) + 3] = crc + kissLastReq = cmd + return kissProcessTxQ() end local function kissReceivedReply(payload) + local idx = 1 + local head = payload[idx] + local err_flag = (bit32.band(head, 0x20) ~= 0) + idx = idx + 1 - local idx = 1 - local head = payload[idx] - local err_flag = (bit32.band(head,0x20) ~= 0) - idx = idx + 1 - - if err_flag then - -- error flag set - kissStarted = false - return nil - end - - local start = (bit32.band(head,0x10) ~= 0) - local seq = bit32.band(head,0x0F) - - if start then - -- start flag set - kissRxIdx = 1 - kissRxBuf = {} - - kissRxSize = payload[idx + 1] + 3 - kissRxCRC = 0 - kissStarted = true + if err_flag then + -- error flag set + kissStarted = false + return nil + end - elseif not kissStarted then - return nil + local start = (bit32.band(head, 0x10) ~= 0) + local seq = bit32.band(head, 0x0F) + + if start then + -- start flag set + kissRxIdx = 1 + kissRxBuf = {} + + kissRxSize = payload[idx + 1] + 3 + kissRxCRC = 0 + kissStarted = true + elseif not kissStarted then + return nil + elseif bit32.band(sportKissRemoteSeq + 1, 0x0F) ~= seq then + kissStarted = false + return nil + end - elseif bit32.band(sportKissRemoteSeq + 1, 0x0F) ~= seq then - kissStarted = false - return nil - end - - while (idx <= 6) and (kissRxIdx <= kissRxSize) do - kissRxBuf[kissRxIdx] = payload[idx] - if (kissRxIdx>2) and (kissRxIdx < kissRxSize) then - kissRxCRC = bit32.bxor(kissRxCRC, payload[idx]); - for i=1,8 do - if bit32.band(kissRxCRC, 0x80) ~= 0 then - kissRxCRC = bit32.bxor(bit32.lshift(kissRxCRC, 1), 0xD5) - else - kissRxCRC = bit32.lshift(kissRxCRC, 1) + while (idx <= 6) and (kissRxIdx <= kissRxSize) do + kissRxBuf[kissRxIdx] = payload[idx] + if (kissRxIdx > 2) and (kissRxIdx < kissRxSize) then + kissRxCRC = bit32.bxor(kissRxCRC, payload[idx]) + for i = 1, 8 do + if bit32.band(kissRxCRC, 0x80) ~= 0 then + kissRxCRC = bit32.bxor(bit32.lshift(kissRxCRC, 1), 0xD5) + else + kissRxCRC = bit32.lshift(kissRxCRC, 1) + end + kissRxCRC = bit32.band(kissRxCRC, 0xFF) + end end - kissRxCRC = bit32.band(kissRxCRC, 0xFF) - end + kissRxIdx = kissRxIdx + 1 + idx = idx + 1 end - kissRxIdx = kissRxIdx + 1 - idx = idx + 1 - end - if kissRxIdx <= kissRxSize then - sportKissRemoteSeq = seq - return true - end + if kissRxIdx <= kissRxSize then + sportKissRemoteSeq = seq + return true + end - if kissRxSize>3 then - if kissRxCRC ~= kissRxBuf[kissRxSize] then - kissStarted = false - return nil + if kissRxSize > 3 then + if kissRxCRC ~= kissRxBuf[kissRxSize] then + kissStarted = false + return nil + end end - end - kissStarted = false - return subrange(kissRxBuf, 3, kissRxSize-1) + kissStarted = false + return subrange(kissRxBuf, 3, kissRxSize - 1) end local function kissPollReply() - while true do - local sensorId, frameId, dataId, value = sportTelemetryPop() - - if (sensorId == REMOTE_SENSOR_ID_1 or sensorId == REMOTE_SENSOR_ID_2) and frameId == REPLY_FRAME_ID then - - local payload = {} - payload[1] = bit32.band(dataId,0xFF) - dataId = bit32.rshift(dataId,8) - payload[2] = bit32.band(dataId,0xFF) - - payload[3] = bit32.band(value,0xFF) - value = bit32.rshift(value,8) - payload[4] = bit32.band(value,0xFF) - value = bit32.rshift(value,8) - payload[5] = bit32.band(value,0xFF) - value = bit32.rshift(value,8) - payload[6] = bit32.band(value,0xFF) - - local ret = kissReceivedReply(payload) - if type(ret) == "table" then - return kissLastReq,ret - end - else - break + while true do + local sensorId, frameId, dataId, value = sportTelemetryPop() + + if (sensorId == REMOTE_SENSOR_ID_1 or sensorId == REMOTE_SENSOR_ID_2) and frameId == REPLY_FRAME_ID then + local payload = {} + payload[1] = bit32.band(dataId, 0xFF) + dataId = bit32.rshift(dataId, 8) + payload[2] = bit32.band(dataId, 0xFF) + + payload[3] = bit32.band(value, 0xFF) + value = bit32.rshift(value, 8) + payload[4] = bit32.band(value, 0xFF) + value = bit32.rshift(value, 8) + payload[5] = bit32.band(value, 0xFF) + value = bit32.rshift(value, 8) + payload[6] = bit32.band(value, 0xFF) + + local ret = kissReceivedReply(payload) + if type(ret) == 'table' then + return kissLastReq, ret + end + else + break + end end - end - return nil + return nil end -- SPORT END diff --git a/src/common/KissUI.lua b/src/common/KissUI.lua index 1f6f0a8..3343a94 100644 --- a/src/common/KissUI.lua +++ b/src/common/KissUI.lua @@ -11,9 +11,9 @@ local REQ_TIMEOUT = 200 -- 1000ms request timeout --local PAGE_REFRESH = 1 local PAGE_DISPLAY = 2 -local EDITING = 3 -local PAGE_SAVING = 4 -local MENU_DISP = 5 +local EDITING = 3 +local PAGE_SAVING = 4 +local MENU_DISP = 5 local telemetryScreenActive = false local menuActive = false @@ -22,341 +22,337 @@ local lastRunTS = 0 local gState = PAGE_DISPLAY ActivePage = nil -AllPages = { "pids", "rates", "tpa", "filters", "alarms", "vtx", "setpnt" } +AllPages = {'pids', 'rates', 'tpa', 'filters', 'alarms', 'vtx', 'setpnt'} local function formatKissFloat(v, d) - local s = string.format("%0.4d", v); - local part1 = string.sub(s, 1, string.len(s)-3) - local part2 = string.sub(string.sub(s,-3), 1, d) - if d>0 then - return part1.."."..part2 - else - return part1 - end + local s = string.format('%0.4d', v) + local part1 = string.sub(s, 1, string.len(s) - 3) + local part2 = string.sub(string.sub(s, -3), 1, d) + if d > 0 then + return part1 .. '.' .. part2 + else + return part1 + end end local function clearTable(t) - if type(t)=="table" then - for i,v in pairs(t) do - if type(v) == "table" then - clearTable(v) - end - t[i] = nil - end - end - collectgarbage() - return t + if type(t) == 'table' then + for i, v in pairs(t) do + if type(v) == 'table' then + clearTable(v) + end + t[i] = nil + end + end + collectgarbage() + return t end local function saveSettings(new) - if ActivePage.values then - if ActivePage.preWrite then - kissSendRequest(ActivePage.write, ActivePage.preWrite(ActivePage.values)) - else - kissSendRequest(ActivePage.write, ActivePage.values) - end - saveTS = getTime() - if gState == PAGE_SAVING then - saveRetries = saveRetries + 1 - else - gState = PAGE_SAVING - saveRetries = 0 - saveMaxRetries = ActivePage.saveMaxRetries or 2 -- default 2 - saveTimeout = ActivePage.saveTimeout or 400 -- default 4s - end - end + if ActivePage.values then + if ActivePage.preWrite then + kissSendRequest(ActivePage.write, ActivePage.preWrite(ActivePage.values)) + else + kissSendRequest(ActivePage.write, ActivePage.values) + end + saveTS = getTime() + if gState == PAGE_SAVING then + saveRetries = saveRetries + 1 + else + gState = PAGE_SAVING + saveRetries = 0 + saveMaxRetries = ActivePage.saveMaxRetries or 2 -- default 2 + saveTimeout = ActivePage.saveTimeout or 400 -- default 4s + end + end end local function invalidatePage() - ActivePage.values = nil - gState = PAGE_DISPLAY - saveTS = 0 + ActivePage.values = nil + gState = PAGE_DISPLAY + saveTS = 0 end -local function loadPage(pageId) - local file = "/KISS/"..AllPages[pageId]..".lua" - clearTable(ActivePage) - local tmp = assert(loadScript(file)) +local function loadPage(pageId) + local file = '/KISS/' .. AllPages[pageId] .. '.lua' + clearTable(ActivePage) + local tmp = assert(loadScript(file)) ActivePage = tmp() end local menuList = { - { t = "save page", f = saveSettings }, { t = "reload", f = invalidatePage } + {t = 'save page', f = saveSettings}, + {t = 'reload', f = invalidatePage} } local function processKissReply(cmd, rx_buf) - - if cmd == nil or rx_buf == nil then - return - end - - -- response on saving - if cmd == ActivePage.write then - gState = PAGE_DISPLAY - ActivePage.values = nil - saveTS = 0 - return - end - - if cmd ~= ActivePage.read then - return - end - - if #(rx_buf) > 0 then - ActivePage.values = {} - for i=1,#(rx_buf) do - ActivePage.values[i] = rx_buf[i] - end - - if ActivePage.postRead ~= nil then - ActivePage.values = ActivePage.postRead(ActivePage.values) - end - end + if cmd == nil or rx_buf == nil then + return + end + + -- response on saving + if cmd == ActivePage.write then + gState = PAGE_DISPLAY + ActivePage.values = nil + saveTS = 0 + return + end + + if cmd ~= ActivePage.read then + return + end + + if #(rx_buf) > 0 then + ActivePage.values = {} + for i = 1, #(rx_buf) do + ActivePage.values[i] = rx_buf[i] + end + + if ActivePage.postRead ~= nil then + ActivePage.values = ActivePage.postRead(ActivePage.values) + end + end end - + local function MaxLines() - return #(ActivePage.fields) + return #(ActivePage.fields) end -local function changeWithLimit(value, direction, min, max) - local tmp = value + direction - if tmp > max and direction>0 then - tmp = min - elseif tmp < 1 and direction<0 then - tmp = max - end - return tmp +local function changeWithLimit(value, direction, min, max) + local tmp = value + direction + if tmp > max and direction > 0 then + tmp = min + elseif tmp < 1 and direction < 0 then + tmp = max + end + return tmp end local function incPage(inc) - currentPage = changeWithLimit(currentPage, inc, 1, #(AllPages)) - loadPage(currentPage) + currentPage = changeWithLimit(currentPage, inc, 1, #(AllPages)) + loadPage(currentPage) end local function incLine(inc) - currentLine = changeWithLimit(currentLine, inc, 1, MaxLines()) + currentLine = changeWithLimit(currentLine, inc, 1, MaxLines()) end local function incMenu(inc) - menuActive = changeWithLimit(menuActive, inc, 1, #(menuList)) + menuActive = changeWithLimit(menuActive, inc, 1, #(menuList)) end local function requestPage() - if ActivePage.read and ((ActivePage.reqTS == nil) or (ActivePage.reqTS + REQ_TIMEOUT <= getTime())) then - ActivePage.reqTS = getTime() - kissSendRequest(ActivePage.read, {}) - end + if ActivePage.read and ((ActivePage.reqTS == nil) or (ActivePage.reqTS + REQ_TIMEOUT <= getTime())) then + ActivePage.reqTS = getTime() + kissSendRequest(ActivePage.read, {}) + end end local function drawScreen(page_locked) - - drawScreenTitle(ActivePage.title, currentPage, #(AllPages)) - - for i=1,#(ActivePage.text) do - local f = ActivePage.text[i] - if f.to == nil then - lcd.drawText(f.x, f.y, f.t, getDefaultTextOptions()) - else - lcd.drawText(f.x, f.y, f.t, f.to) - end - end - - if ActivePage.lines ~= nil then - for i=1,#(ActivePage.lines) do - local f = ActivePage.lines[i] - lcd.drawLine (f.x1, f.y1, f.x2, f.y2, SOLID, 0) - end - end - - for i=1,#(ActivePage.fields) do - local f = ActivePage.fields[i] - - local text_options = getDefaultTextOptions() - if i == currentLine then - text_options = INVERS - if gState == EDITING then - text_options = text_options + BLINK - end - end - - local spacing = 20 - - if f.t ~= nil then - lcd.drawText(f.x, f.y, f.t .. ":", getDefaultTextOptions()) - end - - -- draw some value - if f.sp ~= nil then - spacing = f.sp - end - - local idx = f.i or i - if ActivePage.values and ActivePage.values[idx] then - local val = ActivePage.values[idx] - if f.table and f.table[ActivePage.values[idx]] then - val = f.table[ActivePage.values[idx]] - end - - if f.prec ~= nil then - val = formatKissFloat(val, f.prec, f.base) - end - - lcd.drawText(f.x + spacing, f.y, val, text_options) - else - lcd.drawText(f.x + spacing, f.y, "---", text_options) - end - end - - if ActivePage.customDraw ~= nil then - ActivePage.customDraw() - end + drawScreenTitle(ActivePage.title, currentPage, #(AllPages)) + + for i = 1, #(ActivePage.text) do + local f = ActivePage.text[i] + if f.to == nil then + lcd.drawText(f.x, f.y, f.t, getDefaultTextOptions()) + else + lcd.drawText(f.x, f.y, f.t, f.to) + end + end + + if ActivePage.lines ~= nil then + for i = 1, #(ActivePage.lines) do + local f = ActivePage.lines[i] + lcd.drawLine(f.x1, f.y1, f.x2, f.y2, SOLID, 0) + end + end + + for i = 1, #(ActivePage.fields) do + local f = ActivePage.fields[i] + + local text_options = getDefaultTextOptions() + if i == currentLine then + text_options = INVERS + if gState == EDITING then + text_options = text_options + BLINK + end + end + + local spacing = 20 + + if f.t ~= nil then + lcd.drawText(f.x, f.y, f.t .. ':', getDefaultTextOptions()) + end + + -- draw some value + if f.sp ~= nil then + spacing = f.sp + end + + local idx = f.i or i + if ActivePage.values and ActivePage.values[idx] then + local val = ActivePage.values[idx] + if f.table and f.table[ActivePage.values[idx]] then + val = f.table[ActivePage.values[idx]] + end + + if f.prec ~= nil then + val = formatKissFloat(val, f.prec, f.base) + end + + lcd.drawText(f.x + spacing, f.y, val, text_options) + else + lcd.drawText(f.x + spacing, f.y, '---', text_options) + end + end + + if ActivePage.customDraw ~= nil then + ActivePage.customDraw() + end end -local function clipValue(val,min,max) - if val < min then - val = min - elseif val > max then - val = max - end - return val +local function clipValue(val, min, max) + if val < min then + val = min + elseif val > max then + val = max + end + return val end local function getCurrentField() - return ActivePage.fields[currentLine] + return ActivePage.fields[currentLine] end local function incValue(inc) - local field = ActivePage.fields[currentLine] - local idx = field.i or currentLine - - local tmpInc = inc - if field.prec ~= nil then - tmpInc = tmpInc * 10^(3-field.prec) - end - - if field.inc ~= nil then - tmpInc = tmpInc * field.inc - end - - ActivePage.values[idx] = clipValue(ActivePage.values[idx] + tmpInc, field.min or 0, field.max or 255) + local field = ActivePage.fields[currentLine] + local idx = field.i or currentLine + + local tmpInc = inc + if field.prec ~= nil then + tmpInc = tmpInc * 10 ^ (3 - field.prec) + end + + if field.inc ~= nil then + tmpInc = tmpInc * field.inc + end + + ActivePage.values[idx] = clipValue(ActivePage.values[idx] + tmpInc, field.min or 0, field.max or 255) end local function run(event) - - if ActivePage==nil then - loadPage(currentPage) - end - - local now = getTime() - - -- if lastRunTS old than 500ms - if lastRunTS + 50 < now then - invalidatePage() - end - lastRunTS = now - - if (gState == PAGE_SAVING) and (saveTS + saveTimeout < now) then - if saveRetries < saveMaxRetries then - saveSettings() - else - -- max retries reached - gState = PAGE_DISPLAY - invalidatePage() - end - end - - if #(kissTxBuf) > 0 then - kissProcessTxQ() - end - - -- navigation + if ActivePage == nil then + loadPage(currentPage) + end + + local now = getTime() + + -- if lastRunTS old than 500ms + if lastRunTS + 50 < now then + invalidatePage() + end + lastRunTS = now + + if (gState == PAGE_SAVING) and (saveTS + saveTimeout < now) then + if saveRetries < saveMaxRetries then + saveSettings() + else + -- max retries reached + gState = PAGE_DISPLAY + invalidatePage() + end + end + + if #(kissTxBuf) > 0 then + kissProcessTxQ() + end + + -- navigation if event == EVT_VIRTUAL_MENU_LONG or event == EVT_SHIFT_LONG then - menuActive = 1 - gState = MENU_DISP - - elseif EVT_PAGEUP_FIRST and event == EVT_VIRTUAL_ENTER_LONG then - menuActive = 1 - killEnterBreak = 1 - gState = MENU_DISP - - -- menu is currently displayed - elseif gState == MENU_DISP then - if event == EVT_EXIT_BREAK then - gState = PAGE_DISPLAY - elseif event == EVT_VIRTUAL_PREV then - incMenu(-1) - elseif event == EVT_VIRTUAL_NEXT then - incMenu(1) - elseif event == EVT_ENTER_BREAK then - if RADIO == "480x272" then - if killEnterBreak == 1 then - killEnterBreak = 0 - else - gState = PAGE_DISPLAY - menuList[menuActive].f() - end - else - gState = PAGE_DISPLAY - menuList[menuActive].f() - end - end - -- normal page viewing - elseif gState <= PAGE_DISPLAY then - if event == EVT_VIRTUAL_PREV_PAGE then - incPage(-1) - elseif event == EVT_VIRTUAL_NEXT_PAGE then - incPage(1) - elseif event == EVT_VIRTUAL_PREV or event == EVT_VIRTUAL_PREV_REPT then - incLine(-1) - elseif event == EVT_VIRTUAL_NEXT or event == EVT_VIRTUAL_NEXT_REPT then - incLine(1) - elseif event == EVT_VIRTUAL_ENTER then - local field = ActivePage.fields[currentLine] - local idx = field.i or currentLine - if ActivePage.values and ActivePage.values[idx] and (field.ro ~= true) then - gState = EDITING - end - end - -- editing value - elseif gState == EDITING then - if event == EVT_VIRTUAL_EXIT or event == EVT_VIRTUAL_ENTER then - gState = PAGE_DISPLAY - elseif event == EVT_VIRTUAL_INC then - incValue(1) - elseif event == EVT_VIRTUAL_INC_REP then - incValue(10) - elseif event == EVT_VIRTUAL_DEC then - incValue(-1) - elseif event == EVT_VIRTUAL_DEC_REPT then - incValue(-10) - end - end - - local page_locked = false - - if ActivePage.values == nil then - requestPage() - page_locked = true - end - - lcd.clear() - drawScreen(page_locked) - - if isTelemetryPresent()~=true then - drawTelemetry() - invalidatePage() - end - - if gState == MENU_DISP then - drawMenu(menuList, menuActive) - elseif gState == PAGE_SAVING then - drawSaving() - end - - processKissReply(kissPollReply()) - return 0 + menuActive = 1 + gState = MENU_DISP + elseif EVT_PAGEUP_FIRST and event == EVT_VIRTUAL_ENTER_LONG then + -- menu is currently displayed + menuActive = 1 + killEnterBreak = 1 + gState = MENU_DISP + elseif gState == MENU_DISP then + -- normal page viewing + if event == EVT_EXIT_BREAK then + gState = PAGE_DISPLAY + elseif event == EVT_VIRTUAL_PREV then + incMenu(-1) + elseif event == EVT_VIRTUAL_NEXT then + incMenu(1) + elseif event == EVT_ENTER_BREAK then + if RADIO == '480x272' then + if killEnterBreak == 1 then + killEnterBreak = 0 + else + gState = PAGE_DISPLAY + menuList[menuActive].f() + end + else + gState = PAGE_DISPLAY + menuList[menuActive].f() + end + end + elseif gState <= PAGE_DISPLAY then + -- editing value + if event == EVT_VIRTUAL_PREV_PAGE then + incPage(-1) + elseif event == EVT_VIRTUAL_NEXT_PAGE then + incPage(1) + elseif event == EVT_VIRTUAL_PREV or event == EVT_VIRTUAL_PREV_REPT then + incLine(-1) + elseif event == EVT_VIRTUAL_NEXT or event == EVT_VIRTUAL_NEXT_REPT then + incLine(1) + elseif event == EVT_VIRTUAL_ENTER then + local field = ActivePage.fields[currentLine] + local idx = field.i or currentLine + if ActivePage.values and ActivePage.values[idx] and (field.ro ~= true) then + gState = EDITING + end + end + elseif gState == EDITING then + if event == EVT_VIRTUAL_EXIT or event == EVT_VIRTUAL_ENTER then + gState = PAGE_DISPLAY + elseif event == EVT_VIRTUAL_INC then + incValue(1) + elseif event == EVT_VIRTUAL_INC_REP then + incValue(10) + elseif event == EVT_VIRTUAL_DEC then + incValue(-1) + elseif event == EVT_VIRTUAL_DEC_REPT then + incValue(-10) + end + end + + local page_locked = false + + if ActivePage.values == nil then + requestPage() + page_locked = true + end + + lcd.clear() + drawScreen(page_locked) + + if isTelemetryPresent() ~= true then + drawTelemetry() + invalidatePage() + end + + if gState == MENU_DISP then + drawMenu(menuList, menuActive) + elseif gState == PAGE_SAVING then + drawSaving() + end + + processKissReply(kissPollReply()) + return 0 end -return {run=run} +return {run = run} --- END UI \ No newline at end of file +-- END UI From 986acb40a69ebef1354cade6774b202503910dde Mon Sep 17 00:00:00 2001 From: Carsten Wache Date: Tue, 31 Dec 2019 10:00:44 +0100 Subject: [PATCH 3/6] add for debug --- Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 441ce98..87dea2e 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,8 @@ lua: cp -R src/128x64/KISS obj/128x64/KISS cp -R src/480x272/KISS obj/480x272/KISS +.PHONY: luamin +luamin: find ./obj/ -type f -name '*.lua' -exec sh -c 'node node_modules/luamin/bin/luamin --file {} > {}.tmp' \; -exec sh -c 'mv {}.tmp {} ' \; .PHONY: zip @@ -57,5 +59,6 @@ zip: cd obj/480x272/; zip -r ../../dist/kiss-480x272-lua-scripts-${VERSION}.zip * .PHONY: dist -dist: clean prepare luatmp lua zip - +dist: clean prepare luatmp lua luamin zip +.PHONY: debug +debug: clean prepare luatmp lua From 232aa047bc98845bd825d0f640330f4d70375ab8 Mon Sep 17 00:00:00 2001 From: Carsten Wache Date: Tue, 31 Dec 2019 10:01:00 +0100 Subject: [PATCH 4/6] LCD version fix --- src/480x272/Kiss.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/src/480x272/Kiss.lua b/src/480x272/Kiss.lua index 6000262..2df8746 100644 --- a/src/480x272/Kiss.lua +++ b/src/480x272/Kiss.lua @@ -3,7 +3,6 @@ local RADIO = '480x272' local drawScreenTitle = function(title, currentPage, totalPages) - lcd.drawScreenTitle('KISS: ' .. title, currentPage, totalPages) lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) lcd.drawText(1, 5, title, MENU_TITLE_COLOR) end From e14e369a03844138c2519c511878becfb18d4bdb Mon Sep 17 00:00:00 2001 From: Carsten Wache Date: Fri, 17 Jan 2020 14:06:34 +0100 Subject: [PATCH 5/6] some progress --- src/common/KissProtocolCF.lua | 2 ++ src/common/KissProtocolSPort.lua | 1 + src/common/KissUI.lua | 15 ++++++++------- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/common/KissProtocolCF.lua b/src/common/KissProtocolCF.lua index 36736d9..404cc47 100644 --- a/src/common/KissProtocolCF.lua +++ b/src/common/KissProtocolCF.lua @@ -2,6 +2,8 @@ -- KISS/CF code -- Kiss version by Alex Fedorov aka FedorComander +local toolName = "TNS|KISS Crossfire|TNE" + LOCAL_DEVICE_ID = 0xEA -- transmitter REMOTE_DEVICE_ID = 0xC8 -- flight controller diff --git a/src/common/KissProtocolSPort.lua b/src/common/KissProtocolSPort.lua index 00707f7..07b51f3 100644 --- a/src/common/KissProtocolSPort.lua +++ b/src/common/KissProtocolSPort.lua @@ -6,6 +6,7 @@ -- Kiss version by Alex Fedorov aka FedorComander -- SPORT BEGIN +local toolName = "TNS|KISS SPort|TNE" SPORT_KISS_VERSION = bit32.lshift(1, 5) SPORT_KISS_STARTFLAG = bit32.lshift(1, 4) diff --git a/src/common/KissUI.lua b/src/common/KissUI.lua index 3343a94..742e12d 100644 --- a/src/common/KissUI.lua +++ b/src/common/KissUI.lua @@ -6,6 +6,7 @@ local saveTS = 0 local saveTimeout = 0 local saveRetries = 0 local saveMaxRetries = 0 +local killEnterBreak = 0 local REQ_TIMEOUT = 200 -- 1000ms request timeout @@ -284,14 +285,14 @@ local function run(event) incMenu(-1) elseif event == EVT_VIRTUAL_NEXT then incMenu(1) - elseif event == EVT_ENTER_BREAK then + elseif event == EVT_VIRTUAL_ENTER then if RADIO == '480x272' then - if killEnterBreak == 1 then - killEnterBreak = 0 - else - gState = PAGE_DISPLAY - menuList[menuActive].f() - end + if killEnterBreak == 1 then + killEnterBreak = 0 + else + gState = PAGE_DISPLAY + menuList[menuActive].f() + end else gState = PAGE_DISPLAY menuList[menuActive].f() From 4cdbf73cf6c78df558de85e2fe832f7204f2729e Mon Sep 17 00:00:00 2001 From: Carsten Wache Date: Sat, 1 Feb 2020 09:41:31 +0100 Subject: [PATCH 6/6] some small adjustments and fix of Horus menuline --- src/480x272/KISS/setpnt.lua | 2 +- src/480x272/Kiss.lua | 3 ++- src/common/KissUI.lua | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/480x272/KISS/setpnt.lua b/src/480x272/KISS/setpnt.lua index 8472452..c79e93f 100644 --- a/src/480x272/KISS/setpnt.lua +++ b/src/480x272/KISS/setpnt.lua @@ -14,6 +14,6 @@ return { title = 'Setpoints', text = {}, fields = { - {t = 'D Setpoint', x = 100, y = 96, sp = 70, i = 1, min = 0, max = 100} + {t = 'D Setpoint', x = 100, y = 96, sp = 100, i = 1, min = 0, max = 100} } } diff --git a/src/480x272/Kiss.lua b/src/480x272/Kiss.lua index 2df8746..514695b 100644 --- a/src/480x272/Kiss.lua +++ b/src/480x272/Kiss.lua @@ -4,7 +4,8 @@ local RADIO = '480x272' local drawScreenTitle = function(title, currentPage, totalPages) lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_TITLE_COLOR) + lcd.drawText(LCD_W - 50, 5, currentPage .. '/' .. totalPages, MENU_TITLE_COLOR) end local drawTelemetry = function() diff --git a/src/common/KissUI.lua b/src/common/KissUI.lua index 742e12d..2a8e59c 100644 --- a/src/common/KissUI.lua +++ b/src/common/KissUI.lua @@ -269,17 +269,17 @@ local function run(event) end -- navigation - if event == EVT_VIRTUAL_MENU_LONG or event == EVT_SHIFT_LONG then + if event == EVT_VIRTUAL_MENU_LONG then menuActive = 1 gState = MENU_DISP - elseif EVT_PAGEUP_FIRST and event == EVT_VIRTUAL_ENTER_LONG then + elseif event == EVT_VIRTUAL_ENTER_LONG then -- menu is currently displayed menuActive = 1 killEnterBreak = 1 gState = MENU_DISP elseif gState == MENU_DISP then -- normal page viewing - if event == EVT_EXIT_BREAK then + if event == EVT_VIRTUAL_EXIT then gState = PAGE_DISPLAY elseif event == EVT_VIRTUAL_PREV then incMenu(-1)