#766 Fix for editable Gains + Number formatting (#770)

* #751 DSM Enhancements

 #751 DSM Forward Programming Enhancements (New GUI, etc)

* Make both work on EdgeTx and OpenTX

* #751 Turn OFF simulation by default

Distribution code with RX simulation OFF
Simulation should be only for Development

* #751 Update Readme Documentation

Updated the Readme.txt documentation
and removed compiled luac file that was check in by mistake

* #751 Fix problems With Reset RX

1. Fix problem when trying to Factory Reset. Enter Bind Mode. Save backup, Restore Backup

2. Found a way to advance on the Gyro initial Setup menus.. a bit of a hack, but works.

3. Handle RX resets properly. It needed after initial setup

* #751 Cosmetic and Show Orientation Images

#751
1. Fix problems when text contradictions between Menu/Line Headers and List Values
2. Show Images of RX orientations
3. Able to Hack getting into Initial Setup and other menus who was failing before
4. Custumize the way Flight Mode reports the Value on Screen

* #751 add check for required libraries

Add check that the required files in DSMLIB exist

* #751

Write documentation about the protocol so that we don't forget later what we know, and enable others to understand the logs and maybe help solve problems.

* #766

Change the way to detect that the files exist. now works on both ETX and OTX

* #766 Strange Flickering in OTX

Strange Flickering happening on OTX. Refreshing the screen on every cycle fixed the problem

* #766 Change way of dectecting EdgeTX

Change way of detecting OTX in multiple versions: OTX 2.3.14 and 2.3.15

* #766  make editable Gain Values

Gains and other settings should be editable even when they are VALUE_NOCHANGING. Flight Mode is an exception that is handled properly. Right align numbers.

Co-authored-by: pascallanger <pascal_langer@yahoo.fr>
This commit is contained in:
Frankie Arzu 2022-11-28 13:00:16 -06:00 committed by GitHub
parent 2e7b1dc904
commit 5901bac374
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 131 additions and 100 deletions

View File

@ -156,7 +156,7 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing)
---------- NAME Part ---------- NAME Part
local header = line.Text local header = line.Text
-- ONLY do this for Flight Mode (Right Align or Centered) -- ONLY do this for Flight Mode (Right Align or Centered)
if (dsmLib.isFlightModeText(line.TextId)) then if (dsmLib.isFlightModeLine(line)) then
-- Display Header + Value together -- Display Header + Value together
header = dsmLib.GetFlightModeValue(line.TextId,header,value) header = dsmLib.GetFlightModeValue(line.TextId,header,value)
@ -180,9 +180,8 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing)
lcd.drawText(x, y, header, bold + TEXT_SIZE) -- display Line Header lcd.drawText(x, y, header, bold + TEXT_SIZE) -- display Line Header
--------- VALUE PART, Skip for Flight Mode since already show the value --------- VALUE PART, Skip for Flight Mode since already show the value
if not dsmLib.isFlightModeText(line.TextId) then if not dsmLib.isFlightModeLine(line) then
local attrib = 0 local attrib = 0
value = value .. (line.Format or "") -- Append % if needed
if selected then if selected then
attrib = INVERS attrib = INVERS
@ -192,6 +191,7 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing)
end end
end end
value = value .. " " .. (line.Format or "") -- Append % if needed
lcd.drawText(LCD_X_LINE_VALUE,y, value, attrib + TEXT_SIZE) -- display value lcd.drawText(LCD_X_LINE_VALUE,y, value, attrib + TEXT_SIZE) -- display value
end end
@ -307,10 +307,9 @@ local function GUI_HandleEvent(event, touchState)
else else
if ctx.isEditing() then -- Editing a Line, need to restore original value if ctx.isEditing() then -- Editing a Line, need to restore original value
ctx.MenuLines[ctx.EditLine].Val = originalValue ctx.MenuLines[ctx.EditLine].Val = originalValue
dsmLib.ChangePhase(PHASE.VALUE_CHANGE_END) -- Update+Validate value in RX dsmLib.Value_Write_Validate(menuLines[ctx.EditLine])
ctx.EditLine = nil -- Exit Edit Mode (By clearing the line editing)
else else
dsmLib.ChangePhase(PHASE.EXIT) dsmLib.ChangePhase(PHASE.EXIT) -- Exit
end end
end end
return return
@ -372,8 +371,7 @@ local function GUI_HandleEvent(event, touchState)
-- Editing a Line???? -- Editing a Line????
if ctx.isEditing() then if ctx.isEditing() then
-- Change the Value and exit edit -- Change the Value and exit edit
ctx.EditLine = nil dsmLib.Value_Write_Validate(menuLines[ctx.SelLine])
dsmLib.ChangePhase(PHASE.VALUE_CHANGE_END)
else else
-- enter Edit the current line -- enter Edit the current line
ctx.EditLine = ctx.SelLine ctx.EditLine = ctx.SelLine

View File

@ -146,7 +146,7 @@ end
-------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------
-- Display Text inside a Rectangle. Inv: true means solid rectangle, false=only perimeter -- Display Text inside a Rectangle. Inv: true means solid rectangle, false=only perimeter
local function GUI_Display_Boxed_Text(lineNum,x,y,w,h,text,inv) local function GUI_Display_Boxed_Text(lineNum,x,y,w,h,text,inv, isNumber)
local ctx = DSM_Context local ctx = DSM_Context
local txtColor = GUI_GetTextColor(lineNum) local txtColor = GUI_GetTextColor(lineNum)
local frameColor = GUI_GetFrameColor(lineNum) local frameColor = GUI_GetFrameColor(lineNum)
@ -159,13 +159,17 @@ local function GUI_Display_Boxed_Text(lineNum,x,y,w,h,text,inv)
else else
lcd.drawRectangle(x-5, y-2, w, h, frameColor) lcd.drawRectangle(x-5, y-2, w, h, frameColor)
end end
if (isNumber) then
print("DRAW NUMBER")
lcd.drawNumber(x+w-10 , y, text, txtColor + RIGHT)
else
lcd.drawText(x , y, text, txtColor) lcd.drawText(x , y, text, txtColor)
end
end end
------ Display Pre/Next/Back buttons ------ Display Pre/Next/Back buttons
local function GUI_Diplay_Button(x,y,w,h,text,selected) local function GUI_Diplay_Button(x,y,w,h,text,selected)
GUI_Display_Boxed_Text(-1,x,y,w,h,text,selected) GUI_Display_Boxed_Text(-1,x,y,w,h,text,selected, false)
end end
------ Display MENU type of lines (Navigation, SubHeaders, and plain text comments) ------ Display MENU type of lines (Navigation, SubHeaders, and plain text comments)
@ -178,7 +182,7 @@ local function GUI_Display_Line_Menu(lineNum,line,selected)
local x = LCD_X_LINE_MENU local x = LCD_X_LINE_MENU
if dsmLib.isSelectableLine(line) then -- Draw Selectable Menus in Boxes if dsmLib.isSelectableLine(line) then -- Draw Selectable Menus in Boxes
GUI_Display_Boxed_Text(lineNum,x, y, LCD_W_LINE_MENU, LCD_Y_LINE_HEIGHT, line.Text,selected) GUI_Display_Boxed_Text(lineNum,x, y, LCD_W_LINE_MENU, LCD_Y_LINE_HEIGHT, line.Text,selected, false)
GUI_addTouchButton(x, y, LCD_W_LINE_MENU, LCD_Y_LINE_HEIGHT,lineNum) GUI_addTouchButton(x, y, LCD_W_LINE_MENU, LCD_Y_LINE_HEIGHT,lineNum)
else else
-- Non Selectable Menu Lines, plain text -- Non Selectable Menu Lines, plain text
@ -206,14 +210,10 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing)
local y = LCD_Y_LINE_START+(LCD_Y_LINE_HEIGHT*lineNum) local y = LCD_Y_LINE_START+(LCD_Y_LINE_HEIGHT*lineNum)
local x = LCD_X_LINE_TITLE local x = LCD_X_LINE_TITLE
--if (editing) then -- Any Special color/effect when editing??
-- value = "["..value .. "]"
--end
---------- NAME Part ---------- NAME Part
local header = line.Text local header = line.Text
-- ONLY do this for Flight Mode (Right Align or Centered) -- ONLY do this for Flight Mode (Right Align or Centered)
if (dsmLib.isFlightModeText(line.TextId)) then if (dsmLib.isFlightModeLine(line)) then
-- Display Header + Value together -- Display Header + Value together
header = dsmLib.GetFlightModeValue(line.TextId,header,value) header = dsmLib.GetFlightModeValue(line.TextId,header,value)
@ -235,14 +235,17 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing)
lcd.drawText(x, y, header, txtColor + bold) -- display Line Header lcd.drawText(x, y, header, txtColor + bold) -- display Line Header
--------- VALUE PART, Skip for Flight Mode since already show the value --------- VALUE PART, Skip for Flight Mode since already show the value
if not dsmLib.isFlightModeText(line.TextId) then if not dsmLib.isFlightModeLine(line) then
value = value .. (line.Format or "") -- Append % if needed
if dsmLib.isSelectableLine(line) then if dsmLib.isSelectableLine(line) then
--if (editing) then -- Any Special color/effect when editing??
-- value = "["..value .. "]"
--end
-- Can select/edit value, Box it -- Can select/edit value, Box it
local tw = my_lcd_sizeText(value)+10 -- Width of the Text in the lcd local tw = math.max(my_lcd_sizeText(value)+10,45) -- Width of the Text in the lcd
GUI_Display_Boxed_Text(lineNum,LCD_X_LINE_VALUE,y,tw,LCD_Y_LINE_HEIGHT,value,selected) GUI_Display_Boxed_Text(lineNum,LCD_X_LINE_VALUE,y,tw,LCD_Y_LINE_HEIGHT,value,selected, not dsmLib.isListLine(line))
GUI_addTouchButton(LCD_X_LINE_VALUE,y,tw,LCD_Y_LINE_HEIGHT,lineNum) GUI_addTouchButton(LCD_X_LINE_VALUE,y,tw,LCD_Y_LINE_HEIGHT,lineNum)
lcd.drawText(LCD_X_LINE_VALUE+tw+5, y, (line.Format or ""), txtColor + bold)
else -- Not Editable, Plain Text else -- Not Editable, Plain Text
lcd.drawText(LCD_X_LINE_VALUE, y, value, txtColor) lcd.drawText(LCD_X_LINE_VALUE, y, value, txtColor)
end end
@ -494,9 +497,9 @@ local function GUI_HandleEvent(event, touchState)
dsmLib.ReleaseConnection() -- Just Exit the Script dsmLib.ReleaseConnection() -- Just Exit the Script
else else
if ctx.isEditing() then -- Editing a Line, need to restore original value if ctx.isEditing() then -- Editing a Line, need to restore original value
ctx.MenuLines[ctx.EditLine].Val = originalValue local line = ctx.MenuLines[ctx.EditLine]
dsmLib.ChangePhase(PHASE.VALUE_CHANGE_END) -- Update + Validate value in RX line.Val = originalValue
ctx.EditLine = nil -- Exit Edit Mode (By clearing the line editing) dsmLib.Value_Write_Validate(line)
else else
dsmLib.ChangePhase(PHASE.EXIT) dsmLib.ChangePhase(PHASE.EXIT)
end end
@ -558,8 +561,7 @@ local function GUI_HandleEvent(event, touchState)
end end
else -- Enter on a Value else -- Enter on a Value
if ctx.isEditing() then -- already editing a Line???? if ctx.isEditing() then -- already editing a Line????
ctx.EditLine = nil -- Exit Edit Mode (By clearing the line editing) dsmLib.Value_Write_Validate(menuLines[ctx.SelLine])
dsmLib.ChangePhase(PHASE.VALUE_CHANGE_END) -- Request change the value on RX
else -- Edit the current value else -- Edit the current value
ctx.EditLine = ctx.SelLine ctx.EditLine = ctx.SelLine
originalValue = menuLines[ctx.SelLine].Val originalValue = menuLines[ctx.SelLine].Val

View File

@ -81,7 +81,7 @@ local LINE_TYPE = {
} }
local DISP_ATTR = { local DISP_ATTR = {
BOLD = 0x01, RIGHT=0x02, CENTER=0x04, PERCENT = 0x10 BOLD = 0x01, RIGHT=0x02, CENTER=0x04, PERCENT = 0x10, DEGREES=0x20, FORCED_MENU = 0x40
} }
local DSM_Context = { local DSM_Context = {
@ -160,18 +160,25 @@ end
------------- Line Type helper functions ------------------------------------------------------------------ ------------- Line Type helper functions ------------------------------------------------------------------
-- Check if the text are Flight modes, who will be treated different for Display
local function isFlightModeLine(line)
return (line.TextId >= 0x8000 and line.TextId <= 0x8003)
end
local function isSelectableLine(line) -- is the display line Selectable?? local function isSelectableLine(line) -- is the display line Selectable??
-- values who are not selectable -- values who are not selectable
if (line.Type == 0 or line.Type == LINE_TYPE.VALUE_NOCHANGING) then return false end -- No Changing Value if (line.Type == 0) then return false end -- Empty Line
if (line.Type == LINE_TYPE.MENU and line.ValId == line.MenuId) then return false end -- Menu that navigates to Itself? if (line.Type == LINE_TYPE.MENU and line.ValId == line.MenuId and bit32.band(line.TextAttr, DISP_ATTR.FORCED_MENU)==0) then return false end -- Menu that navigates to Itself?
if (line.Min==0 and line.Max==0 and line.Def==0) then return false end -- Values with no Range are only for display if (line.Min==0 and line.Max==0 and line.Def==0) then return false end -- Values with no Range are only for display
if (line.Type == LINE_TYPE.VALUE_NOCHANGING and isFlightModeLine(line)) then return false end -- Flight mode is not Selectable
return true return true
end end
local function isEditableLine(line) -- is the display line editable?? local function isEditableLine(line) -- is the display line editable??
-- values who are not editable -- values who are not editable
if (line.Type == 0 or line.Type == LINE_TYPE.VALUE_NOCHANGING or line.Type == LINE_TYPE.MENU) then return false end if (line.Type == 0 or line.Type == LINE_TYPE.MENU) then return false end -- Menus are not editable
if (line.Min==0 and line.Max==0 and line.Def==0) then return false end -- Values with no Range are only for display if (line.Min==0 and line.Max==0 and line.Def==0) then return false end -- Values with no Range are only for display
if (line.Type == LINE_TYPE.VALUE_NOCHANGING and isFlightModeLine(line)) then return false end -- Flight mode is not Editable
-- any other is Editable -- any other is Editable
return true return true
end end
@ -194,7 +201,12 @@ end
local function isNumberValueLine(line) -- is it a number ?? local function isNumberValueLine(line) -- is it a number ??
if (isListLine(line) or line.Type == LINE_TYPE.MENU or line.Type == 0) then return false if (isListLine(line) or line.Type == LINE_TYPE.MENU or line.Type == 0) then return false
else return false end else return true end
end
local function isIncrementalValueUpdate(line)
if (line.Type == LINE_TYPE.LIST_MENU0 or line.Type == LINE_TYPE.VALUE_NOCHANGING) then return false end
return true
end end
------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------
@ -245,7 +257,7 @@ end
local function lineType2String(index) local function lineType2String(index)
local out = LineTypeText[index] local out = LineTypeText[index]
return out or ("LT_" .. string.format("%X", index)) return out or ("LT_" .. string.format("%X", index or 0xFF))
end end
local function lineValue2String(l) local function lineValue2String(l)
@ -369,6 +381,11 @@ local function ExtractDisplayAttr(text1, attr)
attr = bit32.bor(attr, DISP_ATTR.BOLD) attr = bit32.bor(attr, DISP_ATTR.BOLD)
end end
text, pos = string.gsub(text, "/M", "")
if (pos>0) then -- FORCED MENU Button
attr = bit32.bor(attr, DISP_ATTR.FORCED_MENU)
end
return text, attr return text, attr
end end
@ -397,10 +414,13 @@ local function DSM_MenuLinePostProcessing(line)
line.Max = line.Max - line.Min -- normalize max index line.Max = line.Max - line.Min -- normalize max index
line.Min = 0 -- min index line.Min = 0 -- min index
else -- default to numerical value else -- default to numerical value
if isPercentValueLine(line) then if isPercentValueLine(line) or isPercentValueLineByMinMax(line) then
-- either explicit Percent or NO-Change value, but range is %Percent -- either explicit Percent or NO-Change value, but range is %Percent
line.Format ="%" line.Format ="%"
line.TextAttr = bit32.bor(line.TextAttr,DISP_ATTR.PERCENT) line.TextAttr = bit32.bor(line.TextAttr,DISP_ATTR.PERCENT)
elseif (line.Type == LINE_TYPE.VALUE_DEGREES) then
line.Format ="o"
line.TextAttr = bit32.bor(line.TextAttr,DISP_ATTR.DEGREES)
end end
end end
@ -502,25 +522,27 @@ local function DSM_Value_Add(line, inc)
end end
end end
if (origVal~=line.Val) then if (origVal~=line.Val and isIncrementalValueUpdate(line)) then
if line.Type ~= LINE_TYPE.LIST_MENU0 then -- Listof channels only change on the Screen until is Done
-- Update RX value on every change -- Update RX value on every change
DSM_ChangePhase(PHASE.VALUE_CHANGING) DSM_ChangePhase(PHASE.VALUE_CHANGING)
end end
end end
end
local function DSM_Value_Default(line) local function DSM_Value_Default(line)
local origVal = line.Val local origVal = line.Val
if (DEBUG_ON) then LOG_write("%3.3f %s: DSM_Value_Default(%s)\n", getElapsedTime(), phase2String(DSM_Context.Phase), menuLine2String(line)) end if (DEBUG_ON) then LOG_write("%3.3f %s: DSM_Value_Default(%s)\n", getElapsedTime(), phase2String(DSM_Context.Phase), menuLine2String(line)) end
line.Val = line.Def line.Val = line.Def
if (origVal~=line.Val) then if (origVal~=line.Val and isIncrementalValueUpdate(line)) then
if line.Type ~= LINE_TYPE.LIST_MENU0 then -- Listof channels only change on the Screen until is Done
-- Update RX value on every change -- Update RX value on every change
DSM_ChangePhase(PHASE.VALUE_CHANGING) DSM_ChangePhase(PHASE.VALUE_CHANGING)
end end
end end
local function DSM_Value_Write_Validate(line)
if (DEBUG_ON) then LOG_write("%3.3f %s: DSM_Value_Write_Validate(%s)\n", getElapsedTime(), phase2String(DSM_Context.Phase), menuLine2String(line)) end
DSM_ChangePhase(PHASE.VALUE_CHANGE_END) -- Update + Validate value in RX
DSM_Context.EditLine = nil -- Exit Edit Mode (By clearing the line editing)
end end
local function DSM_GotoMenu(menuId, lastSelectedLine) local function DSM_GotoMenu(menuId, lastSelectedLine)
@ -1063,6 +1085,8 @@ local function DSM_Init_Text(rxId)
-- Text allightment: /c = CENTER, /r = RIGHT -- Text allightment: /c = CENTER, /r = RIGHT
-- Text effects: /b = BOLD -- Text effects: /b = BOLD
-- Text formatting: /p = PERCENT numbers (forced if not in Line Type=PERCENT) -- Text formatting: /p = PERCENT numbers (forced if not in Line Type=PERCENT)
-- Navigaton: /M = Force to be a Menu button, when a menu navigates to itself,
-- is usually a message line.. but sometimes, we want to navigate to the same page to refresh values
-- array List_Values: -- array List_Values:
-- For some Menu LIST VALUES, special Lines of type:LIST_MENU1, the valod options seems not -- For some Menu LIST VALUES, special Lines of type:LIST_MENU1, the valod options seems not
@ -1072,9 +1096,14 @@ local function DSM_Init_Text(rxId)
-- usually is Ihnibit + range of contiguos values, but cant seems to find in the RX data receive the values -- usually is Ihnibit + range of contiguos values, but cant seems to find in the RX data receive the values
-- to do it automatically -- to do it automatically
-- Om/Off List Options -- On/Off List Options (TODO: i think they are reversed?? 0x0001 is OFF )
List_Text[0x0001] = "On" List_Text[0x0001] = "On (might be reversed, check)"
List_Text[0x0002] = "Off" List_Text[0x0002] = "Off (might be reversed, check)"
if (rxId == RX.FC6250HX) then -- For sure in the Blade FC6250HX they are reversed, override
List_Text[0x0001] = "Off"
List_Text[0x0002] = "On"
end
-- Ihn/Act List Options -- Ihn/Act List Options
List_Text[0x0003] = "Inh" List_Text[0x0003] = "Inh"
@ -1219,7 +1248,7 @@ local function DSM_Init_Text(rxId)
Text[0x00C7] = "Calibrate Sensor" Text[0x00C7] = "Calibrate Sensor"
Text[0x00C8] = "Complete" -- FC6250HX calibration complete Text[0x00C8] = "Complete" -- FC6250HX calibration complete
Text[0x00CA] = "SAFE/Panic Mode Setup" Text[0x00CA] = "SAFE/Panic Mode Setup"
Text[0x00CD] = "Level model and capture attiude/c"; -- Different from List_Text Text[0x00CD] = "Level model and capture attiude/M"; -- Different from List_Text , and force it to be a menu button
-- RX Orientations for AR631/AR637 (on the Heli Receiver is different, see below) -- RX Orientations for AR631/AR637 (on the Heli Receiver is different, see below)
-- Optionally attach an Image to display -- Optionally attach an Image to display
@ -1249,7 +1278,7 @@ local function DSM_Init_Text(rxId)
List_Text[0x00E2] = "RX Pos 24"; List_Text_Img[0x00E2] = "rx_pos_24.png|Pilot View: RX Label Right, Pins Up" List_Text[0x00E2] = "RX Pos 24"; List_Text_Img[0x00E2] = "rx_pos_24.png|Pilot View: RX Label Right, Pins Up"
List_Text[0x00E3] = "RX Pos Invalid"; List_Text_Img[0x00E3] = "rx_pos_25.png|Cannot detect orientation of RX" List_Text[0x00E3] = "RX Pos Invalid"; List_Text_Img[0x00E3] = "rx_pos_25.png|Cannot detect orientation of RX"
Text[0x00D1] = "?? Unknown_D1" -- TODO: Find the Spektrum Value (Orientation Save&Reset final page AR631) Text[0x00D1] = "Unknown_D1" -- TODO: Find the Spektrum Value (Orientation Save&Reset final page AR631)
--FC6250HX --FC6250HX
Text[0x00D2] = "Panic Channel" Text[0x00D2] = "Panic Channel"
if (rxId ~= RX.FC6250HX) then List_Values[0x00D2]=channelValues end --FC6250HX uses other range if (rxId ~= RX.FC6250HX) then List_Values[0x00D2]=channelValues end --FC6250HX uses other range
@ -1259,7 +1288,7 @@ local function DSM_Init_Text(rxId)
Text[0x00D8] = "Stop" Text[0x00D8] = "Stop"
Text[0x00DA] = "SAFE" Text[0x00DA] = "SAFE"
Text[0x00DB] = "Stability" Text[0x00DB] = "Stability"
Text[0x00DC] = "@ per sec" Text[0x00DC] = "Deg. per sec"
Text[0x00DD] = "Tail rotor" Text[0x00DD] = "Tail rotor"
Text[0x00DE] = "Setup" Text[0x00DE] = "Setup"
Text[0x00DF] = "AFR" Text[0x00DF] = "AFR"
@ -1291,7 +1320,7 @@ local function DSM_Init_Text(rxId)
Text[0x010A] = "" -- empty?? Text[0x010A] = "" -- empty??
Text[0x010B] = "" -- empty?? Text[0x010B] = "" -- empty??
Text[0x0190] = "Relearn Servo Settings" Text[0x0190] = "DONT USE! Relearn Servo Settings"
Text[0x019C] = "Enter Receiver Bind Mode" Text[0x019C] = "Enter Receiver Bind Mode"
Text[0x01D7] = "SAFE Select Channel" Text[0x01D7] = "SAFE Select Channel"
Text[0x01DC] = "AS3X/c/b" -- Subtitle, Center+bold Text[0x01DC] = "AS3X/c/b" -- Subtitle, Center+bold
@ -1384,10 +1413,10 @@ local function DSM_Init_Text(rxId)
Text[0x0254] = "Postive = Up, Negative = Down" Text[0x0254] = "Postive = Up, Negative = Down"
--Utilities, Copy flight mode (Copy Confirmation, oveerriding FM) TODO:Check with real Spektrum radio. --Utilities, Copy flight mode (Copy Confirmation, oveerriding FM)
Text[0x0251] = "WARNING: \"Target\" IN USE" Text[0x0251] = "Are you sure you want to ovewrite the \"Target\""
Text[0x0252] = "flight mode will be overwritten" Text[0x0252] = "with the \"Source\" ? "
Text[0x0253] = "by \"Source\"" Text[0x0253] = "" -- Blank
-- First time safe setup Page 1 (maybe ask to select Flight Mode cannel) -- First time safe setup Page 1 (maybe ask to select Flight Mode cannel)
Text[0x0255] = "Before setting up SAFE" Text[0x0255] = "Before setting up SAFE"
@ -1401,8 +1430,8 @@ local function DSM_Init_Text(rxId)
Text[0x025D] = "" -- Blank Text[0x025D] = "" -- Blank
Text[0x025E] = "" -- Blank Text[0x025E] = "" -- Blank
--Utilities, Copy flight mode --Utilities, Copy flight mode (Confirm)
Text[0x0259] = "Copy" --- TODO: Check Specktrum..Just guessing here.. Text[0x0259] = "YES"
Text[0x0260] = "WARNING: \"Target\"" Text[0x0260] = "WARNING: \"Target\""
Text[0x0261] = "flight mode will be overwritten" Text[0x0261] = "flight mode will be overwritten"
Text[0x0262] = "by \"Source\"" Text[0x0262] = "by \"Source\""
@ -1420,25 +1449,25 @@ local function DSM_Init_Text(rxId)
Text[0x8003] = "Flight Mode 3/c/b" Text[0x8003] = "Flight Mode 3/c/b"
end end
-- Check if the text are Flight modes, who will be treated different for Display
local function isFlightModeText(textId)
return (textId >= 0x8000 and textId <= 0x8003)
end
-- Adjust the displayed value for Flight mode as needed -- Adjust the displayed value for Flight mode as needed
local function GetFlightModeValue(textId, header, value) local function GetFlightModeValue(textId, header, value)
local out = value local out = value
if (textId == 0x8000) then
if (DSM_Context.RX.Id == RX.FC6250HX) then if (DSM_Context.RX.Id == RX.FC6250HX) then
-- Helicopter Flights modes -- Helicopter Flights modes
if (value==1) then out = header .. " Normal" if (value==1) then out = header .. " 1 / Normal"
elseif (value==2) then out = header .. " Stunt 1" elseif (value==2) then out = header .. " 2 / Stunt 1"
elseif (value==3) then out = header .. " Stunt 2" elseif (value==3) then out = header .. " 3 / Stunt 2"
elseif (value==4) then out = header .. " Hold" elseif (value==4) then out = header .. " 4 / Hold"
else else
out = header .. " " .. value out = header .. " " .. value
end end
elseif (DSM_Context.RX.Id == RX.AR631 or DSM_Context.RX.Id == RX.AR637T or DSM_Context.RX.Id == RX.AR637TA) then else
-- No adjustment needed
out = header .. " " .. value
end
elseif (textId == 0x8001) then -- AR632/637
-- Seems that we really have to add +1 to the value, so Flight Mode 0 is Really Flight Mode 1 -- Seems that we really have to add +1 to the value, so Flight Mode 0 is Really Flight Mode 1
out = header .. " " .. (value + 1) out = header .. " " .. (value + 1)
else else
@ -1485,7 +1514,7 @@ Lib.isPercentValueLine = isPercentValueLine
Lib.isPercentValueLineByMinMax = isPercentValueLineByMinMax Lib.isPercentValueLineByMinMax = isPercentValueLineByMinMax
Lib.isNumberValueLine = isNumberValueLine Lib.isNumberValueLine = isNumberValueLine
Lib.isDisplayAttr = isDisplayAttr Lib.isDisplayAttr = isDisplayAttr
Lib.isFlightModeText = isFlightModeText Lib.isFlightModeLine = isFlightModeLine
Lib.GetFlightModeValue = GetFlightModeValue Lib.GetFlightModeValue = GetFlightModeValue
Lib.StartConnection = DSM_StartConnection Lib.StartConnection = DSM_StartConnection
@ -1495,6 +1524,7 @@ Lib.MenuPostProcessing = DSM_MenuPostProcessing
Lib.MenuLinePostProcessing = DSM_MenuLinePostProcessing Lib.MenuLinePostProcessing = DSM_MenuLinePostProcessing
Lib.Value_Add = DSM_Value_Add Lib.Value_Add = DSM_Value_Add
Lib.Value_Default = DSM_Value_Default Lib.Value_Default = DSM_Value_Default
Lib.Value_Write_Validate = DSM_Value_Write_Validate
Lib.GotoMenu = DSM_GotoMenu Lib.GotoMenu = DSM_GotoMenu
Lib.MoveSelectionLine = DSM_MoveSelectionLine Lib.MoveSelectionLine = DSM_MoveSelectionLine
Lib.Send_Receive = DSM_Send_Receive Lib.Send_Receive = DSM_Send_Receive

View File

@ -148,8 +148,8 @@ local function AR631_loadMenu(menuId)
ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x8001, ValId = 0x1000, Min=0, Max=10, Def=0, Val=1 } ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x8001, ValId = 0x1000, Min=0, Max=10, Def=0, Val=1 }
ctx.MenuLines[2] = { Type = LINE_TYPE.MENU, TextId = 0x1E0, ValId = 0x1012 } ctx.MenuLines[2] = { Type = LINE_TYPE.MENU, TextId = 0x1E0, ValId = 0x1012 }
ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x40, ValId = 0x1004, Min=0, Max=100, Def=40, Val=40 } ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x40, ValId = 0x1004, Min=0, Max=100, Def=40, Val=40 }
ctx.MenuLines[4] = { Type = LINE_TYPE.VALUE_PERCENT, TextId = 0x41, ValId = 0x1005, Min=0, Max=100, Def=50, Val=50 } ctx.MenuLines[4] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x41, ValId = 0x1005, Min=0, Max=100, Def=50, Val=50 }
ctx.MenuLines[5] = { Type = LINE_TYPE.VALUE_PERCENT, TextId = 0x42, ValId = 0x1006, Min=0, Max=100, Def=60, Val=60 } ctx.MenuLines[5] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x42, ValId = 0x1006, Min=0, Max=100, Def=60, Val=60 }
ctx.SelLine = 3 ctx.SelLine = 3
lastGoodMenu = menuId lastGoodMenu = menuId
@ -165,8 +165,8 @@ local function AR631_loadMenu(menuId)
ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x8001, ValId = 0x1000, Min=0, Max=10, Def=0, Val=1 } ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x8001, ValId = 0x1000, Min=0, Max=10, Def=0, Val=1 }
ctx.MenuLines[2] = { Type = LINE_TYPE.MENU, TextId = 0xFE, ValId = 0x1013 } ctx.MenuLines[2] = { Type = LINE_TYPE.MENU, TextId = 0xFE, ValId = 0x1013 }
ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x40, ValId = 0x1004, Min=0, Max=160, Def=100, Val=160 } ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x40, ValId = 0x1004, Min=0, Max=160, Def=100, Val=160 }
ctx.MenuLines[4] = { Type = LINE_TYPE.VALUE_NUM_I8, TextId = 0x41, ValId = 0x1005, Min=0, Max=160, Def=100, Val=160 } ctx.MenuLines[4] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x41, ValId = 0x1005, Min=0, Max=160, Def=100, Val=160 }
ctx.MenuLines[5] = { Type = LINE_TYPE.VALUE_NUM_I8, TextId = 0x42, ValId = 0x1006, Min=0, Max=160, Def=100, Val=160 } ctx.MenuLines[5] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x42, ValId = 0x1006, Min=0, Max=160, Def=100, Val=160 }
ctx.SelLine = 3 ctx.SelLine = 3
lastGoodMenu = menuId lastGoodMenu = menuId
@ -480,7 +480,7 @@ local function AR631_loadMenu(menuId)
ctx.MenuLines[1] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x40, ValId = 0x1000, Min=53, Max=85, Def=53, Val=0 } ctx.MenuLines[1] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x40, ValId = 0x1000, Min=53, Max=85, Def=53, Val=0 }
ctx.MenuLines[2] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x41, ValId = 0x1001, Min=53, Max=85, Def=53, Val=0 } ctx.MenuLines[2] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x41, ValId = 0x1001, Min=53, Max=85, Def=53, Val=0 }
ctx.MenuLines[3] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x42, ValId = 0x1002, Min=53, Max=85, Def=53, Val=0 } ctx.MenuLines[3] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x42, ValId = 0x1002, Min=53, Max=85, Def=53, Val=0 }
ctx.MenuLines[4] = { Type = LINE_TYPE.MENU, TextId = 0x267, ValId = 0x1029 } ctx.MenuLines[4] = { Type = LINE_TYPE.MENU, TextId = 0xDA, ValId = 0x1029 }
ctx.MenuLines[5] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x40, ValId = 0x1004, Min=53, Max=85, Def=53, Val=0 } ctx.MenuLines[5] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x40, ValId = 0x1004, Min=53, Max=85, Def=53, Val=0 }
ctx.MenuLines[6] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x41, ValId = 0x1005, Min=53, Max=85, Def=53, Val=0 } ctx.MenuLines[6] = { Type = LINE_TYPE.LIST_MENU1, TextId = 0x41, ValId = 0x1005, Min=53, Max=85, Def=53, Val=0 }
@ -488,7 +488,7 @@ local function AR631_loadMenu(menuId)
lastGoodMenu = menuId lastGoodMenu = menuId
elseif (menuId==0x1030) then elseif (menuId==0x1030) then
--M[Id=0x1030 P=0x0 N=0x0 B=0x102A Text="Attitude Trim"[0x1E6]] --M[Id=0x1030 P=0x0 N=0x0 B=0x102A Text="Attitude Trim"[0x1E6]]
--L[#0 T=M VId=0x1030 Text="Level model and capture attiude"[0xCD] MId=0x1030 ] --L[#0 T=M VId=0x1030 Text="Level model and capture attiude/M"[0xCD] MId=0x1030 ] FORCED MENU
--L[#1 T=M VId=0x1030 Text="Attitude Trim"[0x1E6] MId=0x1030 ] --L[#1 T=M VId=0x1030 Text="Attitude Trim"[0x1E6] MId=0x1030 ]
--L[#2 T=V_de VId=0x1002 Text="Roll"[0x40] Val=-1 [-45->45,0] MId=0x1030 ] --L[#2 T=V_de VId=0x1002 Text="Roll"[0x40] Val=-1 [-45->45,0] MId=0x1030 ]
--L[#3 T=V_de VId=0x1003 Text="Pitch"[0x41] Val=7 [-45->45,0] MId=0x1030 ] --L[#3 T=V_de VId=0x1003 Text="Pitch"[0x41] Val=7 [-45->45,0] MId=0x1030 ]
@ -496,14 +496,14 @@ local function AR631_loadMenu(menuId)
--L[#6 T=M VId=0x1030 Text="Negative = Nose Down/Roll Left"[0x268] MId=0x1030 ] --L[#6 T=M VId=0x1030 Text="Negative = Nose Down/Roll Left"[0x268] MId=0x1030 ]
ctx.Menu = { MenuId = 0x1030, TextId = 0x1E6, PrevId = 0, NextId = 0, BackId = 0x102A } ctx.Menu = { MenuId = 0x1030, TextId = 0x1E6, PrevId = 0, NextId = 0, BackId = 0x102A }
ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0xCD, ValId = 0x1030 } ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0xCD, ValId = 0x1030 } -- FORCED MENU (/M)
ctx.MenuLines[1] = { Type = LINE_TYPE.MENU, TextId = 0x1E6, ValId = 0x1030 } ctx.MenuLines[1] = { Type = LINE_TYPE.MENU, TextId = 0x1E6, ValId = 0x1030 }
ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x40, ValId = 0x1002, Min=-45, Max=45, Def=0, Val=-1 } ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x40, ValId = 0x1002, Min=-45, Max=45, Def=0, Val=-1 }
ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x41, ValId = 0x1003, Min=-45, Max=45, Def=0, Val=7 } ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x41, ValId = 0x1003, Min=-45, Max=45, Def=0, Val=7 }
ctx.MenuLines[5] = { Type = LINE_TYPE.MENU, TextId = 0x267, ValId = 0x1030 } ctx.MenuLines[5] = { Type = LINE_TYPE.MENU, TextId = 0x267, ValId = 0x1030 }
ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x268, ValId = 0x1030 } ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x268, ValId = 0x1030 }
ctx.SelLine = 2 ctx.SelLine = 0
lastGoodMenu = menuId lastGoodMenu = menuId
elseif (menuId==0x1031) then elseif (menuId==0x1031) then
--M[Id=0x1031 P=0x0 N=0x0 B=0x102A Text="Failsafe Angles"[0x1F6]] --M[Id=0x1031 P=0x0 N=0x0 B=0x102A Text="Failsafe Angles"[0x1F6]]
@ -515,8 +515,8 @@ local function AR631_loadMenu(menuId)
ctx.Menu = { MenuId = 0x1031, TextId = 0x1F6, PrevId = 0, NextId = 0, BackId = 0x102A } ctx.Menu = { MenuId = 0x1031, TextId = 0x1F6, PrevId = 0, NextId = 0, BackId = 0x102A }
ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0x1F6, ValId = 0x1031 } ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0x1F6, ValId = 0x1031 }
ctx.MenuLines[1] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x40, ValId = 0x1001, Min=-90, Max=90, Def=0, Val=0 } ctx.MenuLines[1] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x40, ValId = 0x1001, Min=-90, Max=90, Def=0, Val=0 }
ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x41, ValId = 0x1002, Min=-90, Max=90, Def=0, Val=0 } ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x41, ValId = 0x1002, Min=-90, Max=90, Def=0, Val=0 }
ctx.MenuLines[5] = { Type = LINE_TYPE.MENU, TextId = 0x267, ValId = 0x1031 } ctx.MenuLines[5] = { Type = LINE_TYPE.MENU, TextId = 0x267, ValId = 0x1031 }
ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x268, ValId = 0x1031 } ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x268, ValId = 0x1031 }
@ -542,7 +542,7 @@ local function AR631_loadMenu(menuId)
--L[#3 T=M VId=0x1033 Text="by "Source""[0x262] MId=0x1033 ] --L[#3 T=M VId=0x1033 Text="by "Source""[0x262] MId=0x1033 ]
--L[#4 T=L_m0 VId=0x1004 Text="Source Flight Mode"[0x23E] Val=0|"FM1" NL=(0->9,0,S=182) [182->191,182] MId=0x1033 ] --L[#4 T=L_m0 VId=0x1004 Text="Source Flight Mode"[0x23E] Val=0|"FM1" NL=(0->9,0,S=182) [182->191,182] MId=0x1033 ]
--L[#5 T=L_m0 VId=0x1005 Text="Target Flight Mode"[0x23F] Val=0|"FM1" NL=(0->9,0,S=182) [182->191,182] MId=0x1033 ] --L[#5 T=L_m0 VId=0x1005 Text="Target Flight Mode"[0x23F] Val=0|"FM1" NL=(0->9,0,S=182) [182->191,182] MId=0x1033 ]
--L[#6 T=M VId=0x1035 Text="Copy"[0x259] MId=0x1034 ] --L[#6 T=M VId=0x1035 Text="Apply"[0x90] MId=0x1034 ]
ctx.Menu = { MenuId = 0x1033, TextId = 0x23D, PrevId = 0, NextId = 0, BackId = 0x1032 } ctx.Menu = { MenuId = 0x1033, TextId = 0x23D, PrevId = 0, NextId = 0, BackId = 0x1032 }
@ -552,19 +552,19 @@ local function AR631_loadMenu(menuId)
ctx.MenuLines[3] = { Type = LINE_TYPE.MENU, TextId = 0x262, ValId = 0x1033 } ctx.MenuLines[3] = { Type = LINE_TYPE.MENU, TextId = 0x262, ValId = 0x1033 }
ctx.MenuLines[4] = { Type = LINE_TYPE.LIST_MENU0, TextId = 0x23E, ValId = 0x1004, Min=182, Max=191, Def=182, Val=0 } ctx.MenuLines[4] = { Type = LINE_TYPE.LIST_MENU0, TextId = 0x23E, ValId = 0x1004, Min=182, Max=191, Def=182, Val=0 }
ctx.MenuLines[5] = { Type = LINE_TYPE.LIST_MENU0, TextId = 0x23F, ValId = 0x1005, Min=182, Max=191, Def=182, Val=0 } ctx.MenuLines[5] = { Type = LINE_TYPE.LIST_MENU0, TextId = 0x23F, ValId = 0x1005, Min=182, Max=191, Def=182, Val=0 }
ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x259, ValId = 0x1034 } ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x90, ValId = 0x1034 }
ctx.SelLine = 4 ctx.SelLine = 4
lastGoodMenu = menuId lastGoodMenu = menuId
elseif (menuId==0x1034) then elseif (menuId==0x1034) then
--M[Id=0x1033 P=0x0 N=0x0 B=0x1032 Text="Copy Flight Mode Settings"[0x23D]] --M[Id=0x1033 P=0x0 N=0x0 B=0x1032 Text="Copy Flight Mode Settings"[0x23D]]
--L[#1 T=M VId=0x1033 Text="WARNING: "Target" IN USE"[0x251] MId=0x1033 ] --L[#1 T=M VId=0x1033 Text="Are you sure you want to ovewrite the \"Target\""[0x251] MId=0x1033 ]
--L[#2 T=M VId=0x1033 Text="flight mode will be overwritten"[0x252] MId=0x1033 ] --L[#2 T=M VId=0x1033 Text="with the \"Source\" ? "[0x252] MId=0x1033 ]
--L[#3 T=M VId=0x1033 Text="by "Source""[0x253] MId=0x1033 ] --L[#3 T=M VId=0x1033 Text=""[0x253] MId=0x1033 ]
--L[#4 T=L_m0 VId=0x1004 Text="Source Flight Mode"[0x23E] Val=0|"FM1" NL=(0->0,0,S=182) [182->182,182] MId=0x1033 ] --L[#4 T=L_m0 VId=0x1004 Text="Source Flight Mode"[0x23E] Val=0|"FM1" NL=(0->0,0,S=182) [182->182,182] MId=0x1033 ]
--L[#5 T=L_m0 VId=0x1005 Text="Target Flight Mode"[0x23F] Val=1|"FM2" NL=(0->0,0,S=182) [182->182,182] MId=0x1033 ] --L[#5 T=L_m0 VId=0x1005 Text="Target Flight Mode"[0x23F] Val=1|"FM2" NL=(0->0,0,S=182) [182->182,182] MId=0x1033 ]
--L[#6 T=M VId=0x1035 Text="Copy"[0x259] MId=0x1034 ] --L[#6 T=M VId=0x1035 Text="YES"[0x259] MId=0x1034 ]
ctx.Menu = { MenuId = 0x1034, TextId = 0x23D, PrevId = 0x1033, NextId = 0, BackId = 0x1033 } ctx.Menu = { MenuId = 0x1034, TextId = 0x23D, PrevId = 0x1033, NextId = 0, BackId = 0x1033 }
@ -639,10 +639,10 @@ local function AR631_loadMenu(menuId)
ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0x254, ValId = 0x102D } ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0x254, ValId = 0x102D }
ctx.MenuLines[1] = { Type = LINE_TYPE.MENU, TextId = 0x1EF, ValId = 0x102D } ctx.MenuLines[1] = { Type = LINE_TYPE.MENU, TextId = 0x1EF, ValId = 0x102D }
ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x1F3, ValId = 0x1001, Min=0, Max=50, Def=30, Val=30 } ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x1F3, ValId = 0x1001, Min=0, Max=50, Def=30, Val=30 }
ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x1F4, ValId = 0x1002, Min=-45, Max=45, Def=0, Val=0 } ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x1F4, ValId = 0x1002, Min=-45, Max=45, Def=0, Val=0 }
ctx.MenuLines[4] = { Type = LINE_TYPE.MENU, TextId = 0x1F0, ValId = 0x102D } ctx.MenuLines[4] = { Type = LINE_TYPE.MENU, TextId = 0x1F0, ValId = 0x102D }
ctx.MenuLines[5] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x1F3, ValId = 0x1005, Min=51, Max=100, Def=70, Val=70 } ctx.MenuLines[5] = { Type = LINE_TYPE.VALUE_NOCHANGING, TextId = 0x1F3, ValId = 0x1005, Min=51, Max=100, Def=70, Val=70 }
ctx.MenuLines[6] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x1F4, ValId = 0x1006, Min=-45, Max=45, Def=0, Val=0 } ctx.MenuLines[6] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x1F4, ValId = 0x1006, Min=-45, Max=45, Def=0, Val=0 }
ctx.SelLine = 2 ctx.SelLine = 2
lastGoodMenu = menuId lastGoodMenu = menuId
@ -816,8 +816,8 @@ local function AR631_loadMenu(menuId)
ctx.Menu = { MenuId = 0x1059, TextId = 0x20D, PrevId = 0x1057, NextId = 0x105A, BackId = 0x1010 } ctx.Menu = { MenuId = 0x1059, TextId = 0x20D, PrevId = 0x1057, NextId = 0x105A, BackId = 0x1010 }
ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0xCD, ValId = 0x1059 } ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, TextId = 0xCD, ValId = 0x1059 }
ctx.MenuLines[1] = { Type = LINE_TYPE.MENU, TextId = 0x1E6, ValId = 0x1059 } ctx.MenuLines[1] = { Type = LINE_TYPE.MENU, TextId = 0x1E6, ValId = 0x1059 }
ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x40, ValId = 0x1002, Min=-45, Max=45, Def=0, Val=13 } ctx.MenuLines[2] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x40, ValId = 0x1002, Min=-45, Max=45, Def=0, Val=13 }
ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_DEGRES, TextId = 0x41, ValId = 0x1003, Min=-45, Max=45, Def=0, Val=5 } ctx.MenuLines[3] = { Type = LINE_TYPE.VALUE_DEGREES, TextId = 0x41, ValId = 0x1003, Min=-45, Max=45, Def=0, Val=5 }
ctx.MenuLines[5] = { Type = LINE_TYPE.MENU, TextId = 0x267, ValId = 0x1059 } ctx.MenuLines[5] = { Type = LINE_TYPE.MENU, TextId = 0x267, ValId = 0x1059 }
ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x268, ValId = 0x1059 } ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, TextId = 0x268, ValId = 0x1059 }
@ -1271,7 +1271,7 @@ local function FC6250HX_loadMenu(menuId)
ctx.Menu = { MenuId = 0x140, TextId = 0x8B, PrevId = 0, NextId = 0, BackId = 0x1400 } ctx.Menu = { MenuId = 0x140, TextId = 0x8B, PrevId = 0, NextId = 0, BackId = 0x1400 }
ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NUM_I8, TextId = 0x1E7, ValId = 0x141, Min=5, Max=90, Def=45, Val=30 } ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NUM_I8, TextId = 0x1E7, ValId = 0x141, Min=5, Max=90, Def=45, Val=30 }
ctx.MenuLines[1] = { Type = LINE_TYPE.VALUE_NUM_I8, TextId = 0x1E7, ValId = 0x42, Min=25, Max=100, Def=50, Val=30 } ctx.MenuLines[1] = { Type = LINE_TYPE.VALUE_NUM_I8, TextId = 0x42, ValId = 0x142, Min=25, Max=100, Def=50, Val=30 }
ctx.SelLine = 0 ctx.SelLine = 0
lastGoodMenu = menuId lastGoodMenu = menuId
@ -1281,8 +1281,8 @@ local function FC6250HX_loadMenu(menuId)
--L[#1 T=V_s16 VId=0x1422 Text="Pitch"[0x41] val=58 [-850->850,0] MId=0x1420 ] --L[#1 T=V_s16 VId=0x1422 Text="Pitch"[0x41] val=58 [-850->850,0] MId=0x1420 ]
ctx.Menu = { MenuId = 0x1420, TextId = 0x1E6, PrevId = 0, NextId = 0, BackId = 0x1400 } ctx.Menu = { MenuId = 0x1420, TextId = 0x1E6, PrevId = 0, NextId = 0, BackId = 0x1400 }
ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NUM_SI16, TextId = 0x1E7, ValId = 0x40, Min=-850, Max=850, Def=450, Val=274 } ctx.MenuLines[0] = { Type = LINE_TYPE.VALUE_NUM_SI16, TextId = 0x40, ValId = 0x1421, Min=-850, Max=850, Def=450, Val=274 }
ctx.MenuLines[1] = { Type = LINE_TYPE.VALUE_NUM_SI16, TextId = 0x1E7, ValId = 0x41, Min=-850, Max=850, Def=0, Val=58 } ctx.MenuLines[1] = { Type = LINE_TYPE.VALUE_NUM_SI16, TextId = 0x41, ValId = 0x1422, Min=-850, Max=850, Def=0, Val=58 }
ctx.SelLine = 0 ctx.SelLine = 0
lastGoodMenu = menuId lastGoodMenu = menuId
@ -1358,7 +1358,7 @@ local function loadMenu(menuId)
elseif (menuId==0x1001) then elseif (menuId==0x1001) then
RX_Initialized = false RX_Initialized = false
ctx.RX.Id = dsmLib.RX.AR631 ctx.RX.Id = dsmLib.RX.AR631
ctx.RX.Name = "AR631/AR637 -NEW-SIM" ctx.RX.Name = "AR631/AR637-SIM"
ctx.RX.Version = "2.38.5" ctx.RX.Version = "2.38.5"
dsmLib.Init_Text(ctx.RX.Id) dsmLib.Init_Text(ctx.RX.Id)
@ -1366,7 +1366,7 @@ local function loadMenu(menuId)
RX_loadMenu(0x01000) RX_loadMenu(0x01000)
elseif (menuId==0x1002) then elseif (menuId==0x1002) then
ctx.RX.Id = dsmLib.RX.AR631 ctx.RX.Id = dsmLib.RX.AR631
ctx.RX.Name = "AR631/AR637 -SIM" ctx.RX.Name = "AR631/637-SIM"
ctx.RX.Version = "2.38.5" ctx.RX.Version = "2.38.5"
dsmLib.Init_Text(ctx.RX.Id) dsmLib.Init_Text(ctx.RX.Id)
@ -1467,7 +1467,7 @@ SimLib.isListLine = dsmLib.isListLine
SimLib.isPercentValueLine = dsmLib.isPercentValueLine SimLib.isPercentValueLine = dsmLib.isPercentValueLine
SimLib.isNumberValueLine = dsmLib.isNumberValueLine SimLib.isNumberValueLine = dsmLib.isNumberValueLine
SimLib.isDisplayAttr = dsmLib.isDisplayAttr SimLib.isDisplayAttr = dsmLib.isDisplayAttr
SimLib.isFlightModeText = dsmLib.isFlightModeText SimLib.isFlightModeLine = dsmLib.isFlightModeLine
SimLib.GetFlightModeValue = dsmLib.GetFlightModeValue SimLib.GetFlightModeValue = dsmLib.GetFlightModeValue
SimLib.StartConnection = SIM_StartConnection -- Override Function SimLib.StartConnection = SIM_StartConnection -- Override Function
@ -1475,6 +1475,7 @@ SimLib.ReleaseConnection = SIM_ReleaseConnection -- Override Function
SimLib.ChangePhase = dsmLib.ChangePhase SimLib.ChangePhase = dsmLib.ChangePhase
SimLib.Value_Add = dsmLib.Value_Add SimLib.Value_Add = dsmLib.Value_Add
SimLib.Value_Default = dsmLib.Value_Default SimLib.Value_Default = dsmLib.Value_Default
SimLib.Value_Write_Validate = dsmLib.Value_Write_Validate
SimLib.GotoMenu = dsmLib.GotoMenu SimLib.GotoMenu = dsmLib.GotoMenu
SimLib.MoveSelectionLine = dsmLib.MoveSelectionLine SimLib.MoveSelectionLine = dsmLib.MoveSelectionLine
SimLib.Send_Receive = SIM_Send_Receive -- Override Function SimLib.Send_Receive = SIM_Send_Receive -- Override Function