mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-07-02 19:37:52 +00:00
#751 More fixes on mixers and servo reverse
-- Fix problem reversing servos when using vtail/delta mix -- Properly detect ch order of multimodule
This commit is contained in:
parent
e0bccd87ff
commit
4bbca5a849
@ -1,5 +1,5 @@
|
|||||||
local toolName = "TNS|DSM Forward Prog v0.51 (Text B&W) |TNE"
|
local toolName = "TNS|DSM Forward Prog v0.52 (Text B&W) |TNE"
|
||||||
local VERSION = "v0.51"
|
local VERSION = "v0.52"
|
||||||
|
|
||||||
---- #########################################################################
|
---- #########################################################################
|
||||||
---- # #
|
---- # #
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
local toolName = "TNS|DSM Forward Prog v0.51 (Color+Touch) |TNE"
|
local toolName = "TNS|DSM Forward Prog v0.52 (Color+Touch) |TNE"
|
||||||
local VERSION = "v0.51"
|
local VERSION = "v0.52"
|
||||||
|
|
||||||
---- #########################################################################
|
---- #########################################################################
|
||||||
---- # #
|
---- # #
|
||||||
|
@ -40,8 +40,7 @@
|
|||||||
|
|
||||||
|
|
||||||
local DEBUG_ON = ... -- Get Debug_ON from parameters. -- 0=NO DEBUG, 1=HIGH LEVEL 2=MORE DETAILS
|
local DEBUG_ON = ... -- Get Debug_ON from parameters. -- 0=NO DEBUG, 1=HIGH LEVEL 2=MORE DETAILS
|
||||||
local LIB_VERSION = "0.51"
|
local LIB_VERSION = "0.52"
|
||||||
local TRANSLATE_AETR_TO_TAER = true -- TRANSLATE TX channel info from AETR to TAER
|
|
||||||
|
|
||||||
local Lib = { Init_Text = function (rxId) end }
|
local Lib = { Init_Text = function (rxId) end }
|
||||||
|
|
||||||
@ -96,8 +95,14 @@ local CH_TYPE = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
local CH_MIX_TYPE = {
|
local CH_MIX_TYPE = {
|
||||||
NONE = 0x00,
|
NORMAL = 0x00,
|
||||||
MIX_ELE = 0x20, -- For VTIAL and Delta-ELEVON
|
MIX_AIL_B = 0x10, -- Traileron B
|
||||||
|
MIX_ELE_A = 0x20, -- For VTIAL and Delta-ELEVON A
|
||||||
|
MIX_ELE_B_REV= 0x30, -- For VTIAL and Delta-ELEVON B
|
||||||
|
MIX_ELE_B = 0x40, -- For VTIAL and Delta-ELEVON B
|
||||||
|
MIX_ELE_A_REV= 0x50, -- For VTIAL and Delta-ELEVON A
|
||||||
|
MIX_AIL_B_REV= 0x60, -- Traileron B Rev
|
||||||
|
NORM_REV = 0x70
|
||||||
}
|
}
|
||||||
|
|
||||||
local DISP_ATTR = {
|
local DISP_ATTR = {
|
||||||
@ -382,6 +387,7 @@ end
|
|||||||
local function channelType2String(byte1, byte2)
|
local function channelType2String(byte1, byte2)
|
||||||
local s = ""
|
local s = ""
|
||||||
|
|
||||||
|
if (byte2==0) then return s end;
|
||||||
if (bit32.band(byte2,CH_TYPE.AIL)>0) then s=s.."AIL " end
|
if (bit32.band(byte2,CH_TYPE.AIL)>0) then s=s.."AIL " end
|
||||||
if (bit32.band(byte2,CH_TYPE.ELE)>0) then s=s.."ELE " end
|
if (bit32.band(byte2,CH_TYPE.ELE)>0) then s=s.."ELE " end
|
||||||
if (bit32.band(byte2,CH_TYPE.RUD)>0) then s=s.."RUD " end
|
if (bit32.band(byte2,CH_TYPE.RUD)>0) then s=s.."RUD " end
|
||||||
@ -389,7 +395,16 @@ local function channelType2String(byte1, byte2)
|
|||||||
if (bit32.band(byte2,CH_TYPE.SLAVE)>0) then s=s.."SLAVE " end
|
if (bit32.band(byte2,CH_TYPE.SLAVE)>0) then s=s.."SLAVE " end
|
||||||
if (bit32.band(byte2,CH_TYPE.REVERSE)>0) then s=s.."REVERSE " end
|
if (bit32.band(byte2,CH_TYPE.REVERSE)>0) then s=s.."REVERSE " end
|
||||||
|
|
||||||
if (bit32.band(byte1,CH_MIX_TYPE.MIX_ELE)>0) then s=s.."*MIX_ELE_0x20? " end
|
|
||||||
|
if (byte1==CH_MIX_TYPE.NORMAL) then s=s.." MIX_NOR"
|
||||||
|
elseif (byte1==CH_MIX_TYPE.MIX_AIL_B) then s=s.." MIX_AIL_B"
|
||||||
|
elseif (byte1==CH_MIX_TYPE.MIX_ELE_A) then s=s.." MIX_ELE_A"
|
||||||
|
elseif (byte1==CH_MIX_TYPE.MIX_ELE_B_REV) then s=s.." MIX_ELE_B_Rev"
|
||||||
|
elseif (byte1==CH_MIX_TYPE.MIX_ELE_B) then s=s.." MIX_ELE_B"
|
||||||
|
elseif (byte1==CH_MIX_TYPE.MIX_ELE_A_REV) then s=s.." MIX_ELE_A_Rev"
|
||||||
|
elseif (byte1==CH_MIX_TYPE.MIX_AIL_B_REV) then s=s.." MIX_AIL_B_Rev"
|
||||||
|
elseif (byte1==CH_MIX_TYPE.NORM_REV) then s=s.." MIX_NOR_Rev"
|
||||||
|
end
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
end
|
end
|
||||||
@ -531,7 +546,36 @@ end
|
|||||||
|
|
||||||
-------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------
|
||||||
-- Read the model information from OTX/ETX
|
-- Read the model information from OTX/ETX
|
||||||
|
|
||||||
|
local function getModuleChannelOrder(num)
|
||||||
|
--Determine fist 4 channels order
|
||||||
|
local channel_names={}
|
||||||
|
local stick_names = {[0]= "R", "E", "T", "A" }
|
||||||
|
local ch_order=num
|
||||||
|
if (ch_order == -1) then
|
||||||
|
channel_names[0] = stick_names[3]
|
||||||
|
channel_names[1] = stick_names[1]
|
||||||
|
channel_names[2] = stick_names[2]
|
||||||
|
channel_names[3] = stick_names[0]
|
||||||
|
else
|
||||||
|
channel_names[bit32.band(ch_order,3)] = stick_names[3]
|
||||||
|
ch_order = math.floor(ch_order/4)
|
||||||
|
channel_names[bit32.band(ch_order,3)] = stick_names[1]
|
||||||
|
ch_order = math.floor(ch_order/4)
|
||||||
|
channel_names[bit32.band(ch_order,3)] = stick_names[2]
|
||||||
|
ch_order = math.floor(ch_order/4)
|
||||||
|
channel_names[bit32.band(ch_order,3)] = stick_names[0]
|
||||||
|
end
|
||||||
|
|
||||||
|
local s = ""
|
||||||
|
for i=0,3 do
|
||||||
|
s=s..channel_names[i]
|
||||||
|
end
|
||||||
|
return s
|
||||||
|
end
|
||||||
|
|
||||||
local function DSM_ReadTxModelData()
|
local function DSM_ReadTxModelData()
|
||||||
|
local TRANSLATE_AETR_TO_TAER=false
|
||||||
local table = model.getInfo() -- Get the model name
|
local table = model.getInfo() -- Get the model name
|
||||||
MODEL.modelName = table.name
|
MODEL.modelName = table.name
|
||||||
|
|
||||||
@ -540,7 +584,12 @@ local function DSM_ReadTxModelData()
|
|||||||
if (module~=nil) then
|
if (module~=nil) then
|
||||||
if (module.Type==6 ) then -- MULTI-MODULE
|
if (module.Type==6 ) then -- MULTI-MODULE
|
||||||
local chOrder = module.channelsOrder
|
local chOrder = module.channelsOrder
|
||||||
LOG_write("MultiChannel Ch Order: [%s]\n",chOrder)
|
local s = getModuleChannelOrder(chOrder)
|
||||||
|
LOG_write("MultiChannel Ch Order: [%s] %s\n",chOrder,s)
|
||||||
|
|
||||||
|
if (s=="AETR") then TRANSLATE_AETR_TO_TAER=true
|
||||||
|
else TRANSLATE_AETR_TO_TAER=false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
local DEBUG_ON, SIMULATION_ON = ... -- Get DebugON from parameters
|
local DEBUG_ON, SIMULATION_ON = ... -- Get DebugON from parameters
|
||||||
|
|
||||||
local SETUP_LIB_VERSION = "0.51"
|
local SETUP_LIB_VERSION = "0.52"
|
||||||
local DATA_PATH = "/SCRIPTS/TOOLS/DSMLIB/data/" -- Path to store model settings files
|
local DATA_PATH = "/SCRIPTS/TOOLS/DSMLIB/data/" -- Path to store model settings files
|
||||||
local dsmLib = assert(loadScript("/SCRIPTS/TOOLS/DSMLIB/DsmFwPrgLib.lua"))(DEBUG_ON)
|
local dsmLib = assert(loadScript("/SCRIPTS/TOOLS/DSMLIB/DsmFwPrgLib.lua"))(DEBUG_ON)
|
||||||
|
|
||||||
@ -115,7 +115,9 @@ local MEMU_VAR = {
|
|||||||
PORT7_MODE = 1026,
|
PORT7_MODE = 1026,
|
||||||
PORT8_MODE = 1027,
|
PORT8_MODE = 1027,
|
||||||
PORT9_MODE = 1028,
|
PORT9_MODE = 1028,
|
||||||
PORT10_MODE = 1019,
|
PORT10_MODE = 1029,
|
||||||
|
|
||||||
|
DATA_END = 1040
|
||||||
}
|
}
|
||||||
|
|
||||||
local SetupLib = {}
|
local SetupLib = {}
|
||||||
@ -133,10 +135,11 @@ local lastGoodMenu=0
|
|||||||
|
|
||||||
local function printChannelSummary()
|
local function printChannelSummary()
|
||||||
-- Summary
|
-- Summary
|
||||||
|
print("CHANNEL INFORMATION")
|
||||||
print("Aircraft:".. (aircraft_type_text[currAircraftType] or "--"))
|
print("Aircraft:".. (aircraft_type_text[currAircraftType] or "--"))
|
||||||
print("Wing Type:".. (wing_type_text[currWingType] or "--"))
|
print("Wing Type:".. (wing_type_text[currWingType] or "--"))
|
||||||
print("Tail Type:".. (tail_type_text[currTailType] or "--"))
|
print("Tail Type:".. (tail_type_text[currTailType] or "--"))
|
||||||
print("Thr:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_THR] or 30)] or "--"))
|
print("Thr:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_THR] or 30)] or "--")) -- use fake ch30 for non existing channels
|
||||||
print("LAil:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_L_AIL] or 30)] or "--"))
|
print("LAil:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_L_AIL] or 30)] or "--"))
|
||||||
print("RAil:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_R_AIL] or 30)] or "--"))
|
print("RAil:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_R_AIL] or 30)] or "--"))
|
||||||
print("LFlp:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_L_FLP] or 30)] or "--"))
|
print("LFlp:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_L_FLP] or 30)] or "--"))
|
||||||
@ -147,6 +150,16 @@ local function printChannelSummary()
|
|||||||
print("RRud:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_R_RUD] or 30)] or "--"))
|
print("RRud:".. (MODEL.PORT_TEXT[(MENU_DATA[MEMU_VAR.CH_R_RUD] or 30)] or "--"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function printServoReverseInfo()
|
||||||
|
print("SERVO Normal/Reversed INFORMATION")
|
||||||
|
for i=0,10 do
|
||||||
|
local s="--"
|
||||||
|
if (MENU_DATA[MEMU_VAR.PORT1_MODE+i] or 0) == 0 then s="NORMAL" else s="REVERT" end
|
||||||
|
print(string.format("Port%d: %s", i+1, s))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local function ST_PlaneWingInit(wingType)
|
local function ST_PlaneWingInit(wingType)
|
||||||
print("Change Plane WingType:"..wing_type_text[wingType])
|
print("Change Plane WingType:"..wing_type_text[wingType])
|
||||||
|
|
||||||
@ -359,8 +372,7 @@ local function ST_Default_Data()
|
|||||||
print("Initializing Menu DATA")
|
print("Initializing Menu DATA")
|
||||||
ST_AircraftInit(AIRCRAFT_TYPE.PLANE)
|
ST_AircraftInit(AIRCRAFT_TYPE.PLANE)
|
||||||
|
|
||||||
MENU_DATA[MEMU_VAR.CH_THR] = PORT.PORT1
|
print("Initializing Servo Reverse from TX output settings")
|
||||||
|
|
||||||
MENU_DATA[MEMU_VAR.PORT1_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT1].revert
|
MENU_DATA[MEMU_VAR.PORT1_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT1].revert
|
||||||
MENU_DATA[MEMU_VAR.PORT2_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT2].revert
|
MENU_DATA[MEMU_VAR.PORT2_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT2].revert
|
||||||
MENU_DATA[MEMU_VAR.PORT3_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT3].revert
|
MENU_DATA[MEMU_VAR.PORT3_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT3].revert
|
||||||
@ -371,6 +383,8 @@ local function ST_Default_Data()
|
|||||||
MENU_DATA[MEMU_VAR.PORT8_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT8].revert
|
MENU_DATA[MEMU_VAR.PORT8_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT8].revert
|
||||||
MENU_DATA[MEMU_VAR.PORT9_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT9].revert
|
MENU_DATA[MEMU_VAR.PORT9_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT9].revert
|
||||||
MENU_DATA[MEMU_VAR.PORT10_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT10].revert
|
MENU_DATA[MEMU_VAR.PORT10_MODE] = CH_MODE_TYPE.NORMAL + MODEL.modelOutputChannel[PORT.PORT10].revert
|
||||||
|
|
||||||
|
printServoReverseInfo()
|
||||||
end
|
end
|
||||||
|
|
||||||
----------------------- FILE MANAGEMENT ---------------------------------------------
|
----------------------- FILE MANAGEMENT ---------------------------------------------
|
||||||
@ -429,6 +443,7 @@ function ST_LoadFileData()
|
|||||||
print(string.format("TAIL_TYPE(%d)=%s", MEMU_VAR.TAIL_TYPE, tail_type_text[currTailType]))
|
print(string.format("TAIL_TYPE(%d)=%s", MEMU_VAR.TAIL_TYPE, tail_type_text[currTailType]))
|
||||||
|
|
||||||
printChannelSummary()
|
printChannelSummary()
|
||||||
|
printServoReverseInfo()
|
||||||
|
|
||||||
-- No need to save right now
|
-- No need to save right now
|
||||||
menuDataChanged = false
|
menuDataChanged = false
|
||||||
@ -445,7 +460,7 @@ function ST_SaveFileData()
|
|||||||
local dataFile = io.open(DATA_PATH .. fname, "w") -- write File
|
local dataFile = io.open(DATA_PATH .. fname, "w") -- write File
|
||||||
|
|
||||||
-- Foreach MENU_DATA with a value write Var_Id:Value into file
|
-- Foreach MENU_DATA with a value write Var_Id:Value into file
|
||||||
for i = 0, MEMU_VAR.PORT10_MODE do
|
for i = 0, MEMU_VAR.DATA_END do
|
||||||
if (MENU_DATA[i]~=nil) then
|
if (MENU_DATA[i]~=nil) then
|
||||||
--print(string.format("Write MENU_DATA[%s] : %s",i,MENU_DATA[i]))
|
--print(string.format("Write MENU_DATA[%s] : %s",i,MENU_DATA[i]))
|
||||||
io.write(dataFile,string.format("%s:%s\n",i,MENU_DATA[i]))
|
io.write(dataFile,string.format("%s:%s\n",i,MENU_DATA[i]))
|
||||||
@ -462,52 +477,57 @@ local function CreateDSMPortChannelInfo()
|
|||||||
-- ELEVON
|
-- ELEVON
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x20 end; -- 0x03
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x20 end; -- 0x03
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x50 end; -- 0x23
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x50 end; -- 0x23
|
||||||
|
|
||||||
|
-- Default normal/reverse behaviour
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x00 end; -- 0x83
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x00 end; -- 0x83
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x70 end; -- 0xA3
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x70 end; -- 0xA3
|
||||||
end
|
end
|
||||||
|
|
||||||
local function ApplyTailMixA(b2)
|
|
||||||
-- VTAIL
|
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE) then return 0x00 end; -- 0x06
|
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x26
|
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x20 end; -- 0x86
|
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x50 end; -- 0xA6
|
|
||||||
|
|
||||||
--TRAILERON
|
|
||||||
if (b2==CH_TYPE.AIL) then return 0x00 end; -- 0x01
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x00 end; -- 0x03
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.REVERSE) then return 0x70 end; -- 0x21
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x23
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.SLAVE) then return 0x00 end; -- 0x81
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x10 end; -- 0x83
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x70 end; -- 0xA1
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x60 end; -- 0xA3
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
local function ApplyWingMixB(b2)
|
local function ApplyWingMixB(b2)
|
||||||
-- ELEVON
|
-- ELEVON
|
||||||
|
-- Default normal/reverse behaviour
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x00 end; -- 0x03
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x00 end; -- 0x03
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x23
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x23
|
||||||
|
|
||||||
|
-- Difference with B
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x20 end; -- 0x83
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x20 end; -- 0x83
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x50 end; -- 0xA3
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x50 end; -- 0xA3
|
||||||
end
|
end
|
||||||
|
|
||||||
local function ApplyTailMixB(b2)
|
local function ApplyTailMixA(b2)
|
||||||
-- VTAIL
|
-- VTAIL
|
||||||
|
-- Default normal/reverse behaviour
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE) then return 0x00 end; -- 0x06
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE) then return 0x00 end; -- 0x06
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x26
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x26
|
||||||
|
|
||||||
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x20 end; -- 0x86
|
||||||
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x50 end; -- 0xA6
|
||||||
|
|
||||||
|
--TRAILERON
|
||||||
|
-- Default normal/reverse behaviour
|
||||||
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x00 end; -- 0x03
|
||||||
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x23
|
||||||
|
|
||||||
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x10 end; -- 0x83
|
||||||
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x60 end; -- 0xA3
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
local function ApplyTailMixB(b2)
|
||||||
|
-- VTAIL
|
||||||
|
-- Default normal/reverse behaviour
|
||||||
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE) then return 0x00 end; -- 0x06
|
||||||
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x70 end; -- 0x26
|
||||||
|
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x40 end; -- 0x86
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x40 end; -- 0x86
|
||||||
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x30 end; -- 0xA6
|
if (b2==CH_TYPE.RUD+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x30 end; -- 0xA6
|
||||||
|
|
||||||
--TAILERON
|
--TAILERON
|
||||||
if (b2==CH_TYPE.AIL) then return 0x00 end; -- 0x01
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x10 end; -- 0x03
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE) then return 0x10 end; -- 0x03
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.REVERSE) then return 0x70 end; -- 0x21
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x60 end; -- 0x23
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.REVERSE) then return 0x60 end; -- 0x23
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.SLAVE) then return 0x00 end; -- 0x81
|
|
||||||
|
-- Default normal/reverse behaviour
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x00 end; -- 0x83
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE) then return 0x00 end; -- 0x83
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x70 end; -- 0xA1
|
|
||||||
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x70 end; -- 0xA3
|
if (b2==CH_TYPE.AIL+CH_TYPE.ELE+CH_TYPE.SLAVE+CH_TYPE.REVERSE) then return 0x70 end; -- 0xA3
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -579,6 +599,7 @@ local function CreateDSMPortChannelInfo()
|
|||||||
-- Apply Gyro Reverse as needed for each channel as long as it is used
|
-- Apply Gyro Reverse as needed for each channel as long as it is used
|
||||||
for i=0, 9 do
|
for i=0, 9 do
|
||||||
if (MENU_DATA[MEMU_VAR.PORT_BASE+i]==CH_MODE_TYPE.REVERSE and DSM_ChannelInfo[i][1]>0) then
|
if (MENU_DATA[MEMU_VAR.PORT_BASE+i]==CH_MODE_TYPE.REVERSE and DSM_ChannelInfo[i][1]>0) then
|
||||||
|
DSM_ChannelInfo[i][0]=DSM_ChannelInfo[i][1]+0x70 -- ALL REVERSE is 0x70 for normal
|
||||||
DSM_ChannelInfo[i][1]=DSM_ChannelInfo[i][1]+CH_TYPE.REVERSE
|
DSM_ChannelInfo[i][1]=DSM_ChannelInfo[i][1]+CH_TYPE.REVERSE
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -594,22 +615,16 @@ local function CreateDSMPortChannelInfo()
|
|||||||
|
|
||||||
-- TRAILERRON: ELE + AIL
|
-- TRAILERRON: ELE + AIL
|
||||||
if (tailType==TAIL_TYPE.TRAILERON_A) then
|
if (tailType==TAIL_TYPE.TRAILERON_A) then
|
||||||
if (lAilCh~=nil) then DSM_ChannelInfo[lAilCh][1] = ApplyTailMixA(DSM_ChannelInfo[lAilCh][1]) end
|
|
||||||
if (rAilCh~=nil) then DSM_ChannelInfo[rAilCh][1] = ApplyTailMixA(DSM_ChannelInfo[rAilCh][1]) end
|
|
||||||
|
|
||||||
DSM_ChannelInfo[lElevCh][1] = ApplyTailMixA(DSM_ChannelInfo[lElevCh][1])
|
DSM_ChannelInfo[lElevCh][1] = ApplyTailMixA(DSM_ChannelInfo[lElevCh][1])
|
||||||
DSM_ChannelInfo[rElevCh][1] = ApplyTailMixA(DSM_ChannelInfo[rElevCh][1])
|
DSM_ChannelInfo[rElevCh][1] = ApplyTailMixA(DSM_ChannelInfo[rElevCh][1])
|
||||||
elseif (tailType==TAIL_TYPE.TRAILERON_B) then
|
elseif (tailType==TAIL_TYPE.TRAILERON_B) then
|
||||||
if (lAilCh~=nil) then DSM_ChannelInfo[lAilCh][1] = ApplyTailMixB(DSM_ChannelInfo[lAilCh][1]) end
|
|
||||||
if (rAilCh~=nil) then DSM_ChannelInfo[rAilCh][1] = ApplyTailMixB(DSM_ChannelInfo[rAilCh][1]) end
|
|
||||||
|
|
||||||
DSM_ChannelInfo[lElevCh][1] = ApplyTailMixB(DSM_ChannelInfo[lElevCh][1])
|
DSM_ChannelInfo[lElevCh][1] = ApplyTailMixB(DSM_ChannelInfo[lElevCh][1])
|
||||||
DSM_ChannelInfo[rElevCh][1] = ApplyTailMixB(DSM_ChannelInfo[rElevCh][1])
|
DSM_ChannelInfo[rElevCh][1] = ApplyTailMixB(DSM_ChannelInfo[rElevCh][1])
|
||||||
end
|
end
|
||||||
|
|
||||||
---- ELEVON : AIL + ELE
|
---- ELEVON : AIL + ELE
|
||||||
if (wingType==WING_TYPE.ELEVON_A) then
|
if (wingType==WING_TYPE.ELEVON_A) then
|
||||||
DSM_ChannelInfo[lAilCh][0] = ApplyWinglMixA(DSM_ChannelInfo[lAilCh][1])
|
DSM_ChannelInfo[lAilCh][0] = ApplyWingMixA(DSM_ChannelInfo[lAilCh][1])
|
||||||
DSM_ChannelInfo[rAilCh][0] = ApplyWingMixA(DSM_ChannelInfo[rAilCh][1])
|
DSM_ChannelInfo[rAilCh][0] = ApplyWingMixA(DSM_ChannelInfo[rAilCh][1])
|
||||||
elseif (wingType==WING_TYPE.ELEVON_B) then
|
elseif (wingType==WING_TYPE.ELEVON_B) then
|
||||||
DSM_ChannelInfo[lAilCh][0] = ApplyWingMixB(DSM_ChannelInfo[lAilCh][1])
|
DSM_ChannelInfo[lAilCh][0] = ApplyWingMixB(DSM_ChannelInfo[lAilCh][1])
|
||||||
@ -671,7 +686,7 @@ local function ST_LoadMenu(menuId)
|
|||||||
local ctx = dsmLib.DSM_Context
|
local ctx = dsmLib.DSM_Context
|
||||||
|
|
||||||
local function formatTXRevert(port)
|
local function formatTXRevert(port)
|
||||||
return ((MODEL.modelOutputChannel[port].revert==0 and "(Tx:Normal)") or "(Tx:Reverted)")
|
return ((MODEL.modelOutputChannel[port].revert==0 and " (Tx:Normal)") or " (Tx:Reverted)")
|
||||||
end
|
end
|
||||||
|
|
||||||
clearMenuLines()
|
clearMenuLines()
|
||||||
@ -817,13 +832,27 @@ local function ST_LoadMenu(menuId)
|
|||||||
|
|
||||||
elseif (menuId==0x1030) then
|
elseif (menuId==0x1030) then
|
||||||
printChannelSummary()
|
printChannelSummary()
|
||||||
ctx.Menu = { MenuId = 0x1030, Text = "Gyro Channel Reverse (Needed? not saved yet)", PrevId = 0, NextId = 0, BackId = 0x1001, TextId=0 }
|
ctx.Menu = { MenuId = 0x1030, Text = "Gyro Channel Reverse (Port 1-5)", PrevId = 0, NextId = 0x1031, BackId = 0x1001, TextId=0 }
|
||||||
ctx.MenuLines[0] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT1], TextId = 0, ValId = MEMU_VAR.PORT1_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT1_MODE], Format = formatTXRevert(PORT.PORT1) }
|
ctx.MenuLines[0] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT1], TextId = 0, ValId = MEMU_VAR.PORT1_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT1_MODE], Format = formatTXRevert(PORT.PORT1) }
|
||||||
ctx.MenuLines[1] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT2], TextId = 0, ValId = MEMU_VAR.PORT2_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT2_MODE], Format = formatTXRevert(PORT.PORT2) }
|
ctx.MenuLines[1] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT2], TextId = 0, ValId = MEMU_VAR.PORT2_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT2_MODE], Format = formatTXRevert(PORT.PORT2) }
|
||||||
ctx.MenuLines[2] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT3], TextId = 0, ValId = MEMU_VAR.PORT3_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT3_MODE], Format = formatTXRevert(PORT.PORT3) }
|
ctx.MenuLines[2] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT3], TextId = 0, ValId = MEMU_VAR.PORT3_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT3_MODE], Format = formatTXRevert(PORT.PORT3) }
|
||||||
ctx.MenuLines[3] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT4], TextId = 0, ValId = MEMU_VAR.PORT4_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT4_MODE], Format = formatTXRevert(PORT.PORT4) }
|
ctx.MenuLines[3] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT4], TextId = 0, ValId = MEMU_VAR.PORT4_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT4_MODE], Format = formatTXRevert(PORT.PORT4) }
|
||||||
ctx.MenuLines[4] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT5], TextId = 0, ValId = MEMU_VAR.PORT5_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT5_MODE], Format = formatTXRevert(PORT.PORT5) }
|
ctx.MenuLines[4] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT5], TextId = 0, ValId = MEMU_VAR.PORT5_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT5_MODE], Format = formatTXRevert(PORT.PORT5) }
|
||||||
ctx.MenuLines[5] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT6], TextId = 0, ValId = MEMU_VAR.PORT6_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT6_MODE], Format = formatTXRevert(PORT.PORT6) }
|
|
||||||
|
ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, Text=" Usually Rud/Ail needs to be the oposite of the TX", TextId = 0, ValId = 0x1030 }
|
||||||
|
|
||||||
|
ctx.SelLine = 0
|
||||||
|
lastGoodMenu = menuId
|
||||||
|
elseif (menuId==0x1031) then
|
||||||
|
printChannelSummary()
|
||||||
|
ctx.Menu = { MenuId = 0x1031, Text = "Gyro Channel Reverse (Port 6-10)", PrevId = 0x1030, NextId = 0, BackId = 0x1001, TextId=0 }
|
||||||
|
ctx.MenuLines[0] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT6], TextId = 0, ValId = MEMU_VAR.PORT6_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT6_MODE], Format = formatTXRevert(PORT.PORT6) }
|
||||||
|
ctx.MenuLines[1] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT7], TextId = 0, ValId = MEMU_VAR.PORT7_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT7_MODE], Format = formatTXRevert(PORT.PORT7) }
|
||||||
|
ctx.MenuLines[2] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT8], TextId = 0, ValId = MEMU_VAR.PORT8_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT8_MODE], Format = formatTXRevert(PORT.PORT8) }
|
||||||
|
ctx.MenuLines[3] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT9], TextId = 0, ValId = MEMU_VAR.PORT9_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT9_MODE], Format = formatTXRevert(PORT.PORT9) }
|
||||||
|
ctx.MenuLines[4] = { Type = LINE_TYPE.LIST_MENU_NC, Text=MODEL.PORT_TEXT[PORT.PORT10], TextId = 0, ValId = MEMU_VAR.PORT10_MODE, Min=300, Max=301, Def=300, Val=MENU_DATA[MEMU_VAR.PORT10_MODE], Format = formatTXRevert(PORT.PORT10) }
|
||||||
|
|
||||||
|
ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, Text=" Usually Rud/Ail needs to be the oposite of the TX", TextId = 0, ValId = 0x1031 }
|
||||||
|
|
||||||
ctx.SelLine = 0
|
ctx.SelLine = 0
|
||||||
lastGoodMenu = menuId
|
lastGoodMenu = menuId
|
||||||
|
@ -125,7 +125,10 @@ If you go to the logs, you can see that the RX was correcting the value:
|
|||||||
20.680 VALUE_CHANGE_END: RESPONSE MenuValue: UPDATED: L[#0 T=L_m1 VId=0x1000 Text="FM Channel"[0x78] Val=6|"Aux1" NL=(0->32,0,S=53) [53->85,53] MId=0x7CA6 ]
|
20.680 VALUE_CHANGE_END: RESPONSE MenuValue: UPDATED: L[#0 T=L_m1 VId=0x1000 Text="FM Channel"[0x78] Val=6|"Aux1" NL=(0->32,0,S=53) [53->85,53] MId=0x7CA6 ]
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
# Version 0.52
|
||||||
|
- Fix Reversing of Servos
|
||||||
|
- Properly detect Moltimodule Ch settings AETR
|
||||||
---
|
---
|
||||||
# Version 0.51
|
# Version 0.51
|
||||||
- New Screens to Configure Model (Wing Type/Tail Tail, etc)
|
- New Screens to Configure Model (Wing Type/Tail Tail, etc)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user