From 0c3b28546a665ab8d47bbe722a131ef1dd8e0191 Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 26 May 2014 15:01:12 +0200 Subject: [PATCH] Wizard servos settings screen (min/max/center/direction) --- radio/wizard/images/servoset.png | Bin 26794 -> 0 bytes radio/wizard/servo.bmp | Bin 0 -> 2218 bytes radio/wizard/wizard.lua | 177 ++++++++++++++++++++----------- 3 files changed, 116 insertions(+), 61 deletions(-) delete mode 100644 radio/wizard/images/servoset.png create mode 100755 radio/wizard/servo.bmp diff --git a/radio/wizard/images/servoset.png b/radio/wizard/images/servoset.png deleted file mode 100644 index 00ea099dd836e6103389699ad18e5786f9d54a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26794 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 HxLN!?n7`)EB0JdIOf7&%=5>_5Soozsf>+ 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 Qq5uE@07*qoM6N<$f?N=9e*gdg diff --git a/radio/wizard/servo.bmp b/radio/wizard/servo.bmp new file mode 100755 index 0000000000000000000000000000000000000000..92e9e2105b54c7955414bb5c0f68ae9eb4ad48e8 GIT binary patch literal 2218 zcmeH{J#HH@5QRrSYddk{g~HYdY#?wch)tRl76jN$08#+E)VhEx0d7;f))jJs)UE_y zz-{`}flB4g47q>St^@<_Oo`-j`SHEsP}KDMuM?8;g!Ufw7WFG?kA`T8{u~pHPPLw4 z%#~=HzA~8J%@pdPJOs}J8kJ`b*bJWOP1Y*fAa2A;hh zEtgALuh+EMY-qcM&w(YpvSi)s;2zvqVyKaMo}09CU~PuVrDROV(>(W>A1hK}a$iN5 zNu|{JWDa1i_cN7v8Q$qtQ*rgg*XGi|rFf+ur`NGp%WfS%GoZV5g5-di7!oJ5;pKhO z>1#}2$|MR5f*Ia=|3XTG@nw$KLCv7n&=E1!u@mTsUk7tR)Muy}a?tc%M`AyK7`yf*6>g-wYETa5d4ZoJU+^` PK>XTt%)L*&T?YOGHS}6% literal 0 HcmV?d00001 diff --git a/radio/wizard/wizard.lua b/radio/wizard/wizard.lua index e81143eac..ce75c2b34 100755 --- a/radio/wizard/wizard.lua +++ b/radio/wizard/wizard.lua @@ -34,6 +34,7 @@ local tailMode = 0 local eleCH1 = 0 local eleCH2 = 7 local rudCH1 = 0 +local servoPage = null -- Common functions @@ -49,20 +50,8 @@ local function blinkChanged() end end -local function keyIncDec(event, value, max, isvalue) - if isvalue then - if event == EVT_PLUS_BREAK then - if value < max then - value = (value + 1) - dirty = true - end - elseif event == EVT_MINUS_BREAK then - if value > 0 then - value = (value - 1) - dirty = true - end - end - else +local function fieldIncDec(event, value, max, force) + if edit or force==true then if event == EVT_PLUS_BREAK then value = (value + max) dirty = true @@ -75,13 +64,32 @@ local function keyIncDec(event, value, max, isvalue) return value end +local function valueIncDec(event, value, min, max) + if edit then + if event == EVT_PLUS_FIRST or event == EVT_PLUS_REPT then + if value < max then + value = (value + 1) + dirty = true + end + elseif event == EVT_MINUS_FIRST or event == EVT_MINUS_REPT then + if value > min then + value = (value - 1) + dirty = true + end + end + end + return value +end + local function navigate(event, fieldMax, prevPage, nextPage) if event == EVT_ENTER_BREAK then edit = not edit dirty = true - end - if edit then - if not dirty then + elseif edit then + if event == EVT_EXIT_BREAK then + edit = false + dirty = true + elseif not dirty then dirty = blinkChanged() end else @@ -93,7 +101,7 @@ local function navigate(event, fieldMax, prevPage, nextPage) killEvents(event); dirty = true else - field = keyIncDec(event, field, fieldMax) + field = fieldIncDec(event, field, fieldMax, true) end end end @@ -109,6 +117,16 @@ local function getFieldFlags(position) return flags end +local function channelIncDec(event, value) + if not edit and event==EVT_MENU_BREAK then + servoPage = value + dirty = true + else + value = valueIncDec(event, value, 0, 15) + end + return value +end + -- Init function local function init() @@ -153,7 +171,7 @@ local function modelTypeMenu(event) page = PLANE_MENU+(10*choice) dirty = true else - choice = keyIncDec(event, choice, 3) + choice = fieldIncDec(event, choice, 3) end end @@ -189,13 +207,11 @@ local function engineMenu(event) navigate(event, fieldsMax, MODELTYPE_MENU, page+1) - if edit then - if field==0 then - engineMode = keyIncDec(event, engineMode, 1) - elseif field==1 then - engineCH1 = keyIncDec(event, engineCH1, 7, true) - end - end + if field==0 then + engineMode = fieldIncDec(event, engineMode, 1) + elseif field==1 then + engineCH1 = channelIncDec(event, engineCH1) + end end -- Ailerons Menu @@ -238,15 +254,13 @@ local function aileronsMenu(event) navigate(event, fieldsMax, page-1, page+1) - if edit then - if field==0 then - aileronsMode = keyIncDec(event, aileronsMode, 2) - elseif field==1 then - aileronsCH1 = keyIncDec(event, aileronsCH1, 7, true) - elseif field==2 then - aileronsCH2 = keyIncDec(event, aileronsCH2, 7, true) - end - end + if field==0 then + aileronsMode = fieldIncDec(event, aileronsMode, 2) + elseif field==1 then + aileronsCH1 = channelIncDec(event, aileronsCH1) + elseif field==2 then + aileronsCH2 = channelIncDec(event, aileronsCH2) + end end -- Flaperons Menu @@ -289,15 +303,13 @@ local function flaperonsMenu(event) navigate(event, fieldsMax, page-1, page+1) - if edit then - if field==0 then - flaperonsMode = keyIncDec(event, flaperonsMode, 2) - elseif field==1 then - flaperonsCH1 = keyIncDec(event, flaperonsCH1, 7, true) - elseif field==2 then - flaperonsCH2 = keyIncDec(event, flaperonsCH2, 7, true) - end - end + if field==0 then + flaperonsMode = fieldIncDec(event, flaperonsMode, 2) + elseif field==1 then + flaperonsCH1 = channelIncDec(event, flaperonsCH1) + elseif field==2 then + flaperonsCH2 = channelIncDec(event, flaperonsCH2) + end end -- Airbrakes Menu @@ -340,14 +352,12 @@ local function brakesMenu(event) navigate(event, fieldsMax, page-1, page+1) - if edit then - if field==0 then - brakesMode = keyIncDec(event, brakesMode, 2) - elseif field==1 then - brakesCH1 = keyIncDec(event, brakesCH1, 7, true) - elseif field==2 then - brakesCH2 = keyIncDec(event, brakesCH2, 7, true) - end + if field==0 then + brakesMode = fieldIncDec(event, brakesMode, 2) + elseif field==1 then + brakesCH1 = channelIncDec(event, brakesCH1) + elseif field==2 then + brakesCH2 = channelIncDec(event, brakesCH2) end end @@ -401,28 +411,73 @@ local function tailMenu(event) navigate(event, fieldsMax, page-1, page+1) + if field==0 then + tailMode = fieldIncDec(event, tailMode, 3) + elseif field==1 then + eleCH1 = channelIncDec(event, eleCH1) + elseif (field==2 and tailMode==1) or field==3 then + rudCH1 = channelIncDec(event, rudCH1) + elseif field==2 then + eleCH2 = channelIncDec(event, eleCH2) + end +end + +-- Servo (limits) Menu + +local function drawServoMenu(limits) + lcd.clear() + lcd.drawSource(1, 0, SOURCE_FIRST_CH+servoPage, 0) + lcd.drawText(25, 0, "servo min/max/center/direction?", 0) + lcd.drawRect(0, 0, LCD_W, 8, GREY_DEFAULT+FILL_WHITE) + lcd.drawLine(LCD_W/2-1, 8, LCD_W/2-1, LCD_H, DOTTED, 0) + lcd.drawText(LCD_W/2-19, LCD_H-8, ">>>", 0); + lcd.drawPixmap(122, 8, "/TEMPLATES/servo.bmp") + lcd.drawNumber(140, 35, limits.min, PREC1+getFieldFlags(0)); + lcd.drawNumber(205, 35, limits.max, PREC1+getFieldFlags(1)); + lcd.drawNumber(170, 9, limits.offset, PREC1+getFieldFlags(2)); + if limits.revert == 0 then + lcd.drawText(129, 50, "\126", getFieldFlags(3)); + else + lcd.drawText(129, 50, "\127", getFieldFlags(3)); + end + fieldsMax = 3 +end + +local function servoMenu(event) + local limits = model.getOutput(servoPage) + + if dirty then + dirty = false + drawServoMenu(limits) + end + + navigate(event, fieldsMax, page, page) + if edit then if field==0 then - tailMode = keyIncDec(event, tailMode, 3) + limits.min = valueIncDec(event, limits.min, -1000, 0) elseif field==1 then - eleCH1 = keyIncDec(event, eleCH1, 7, true) - elseif (field==2 and tailMode==1) or field==3 then - rudCH1 = keyIncDec(event, rudCH1, 7, true) + limits.max = valueIncDec(event, limits.max, 0, 1000) elseif field==2 then - eleCH2 = keyIncDec(event, eleCH2, 7, true) + limits.offset = valueIncDec(event, limits.offset, -1000, 1000) + elseif field==3 then + limits.revert = fieldIncDec(event, limits.revert, 1) end - end + model.setOutput(servoPage, limits) + elseif event == EVT_EXIT_BREAK then + servoPage = null + dirty = true + end end -- Main local function run(event) - if event == EVT_EXIT_BREAK then - return 2 - end lcd.lock() if page == MODELTYPE_MENU then modelTypeMenu(event) + elseif servoPage ~= null then + servoMenu(event) elseif page == ENGINE_MENU then engineMenu(event) elseif page == AILERONS_MENU then