mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 21:38:14 +00:00
62aa58d32d
1. NEW Black&White Radios new model setup. Now it can setup completely a plane from zero 2. Color version; simplified code for Tail mixes, and fix Taileron setup
168 lines
4.7 KiB
Lua
168 lines
4.7 KiB
Lua
local MODEL, M_DATA, LOG_write = ...
|
|
|
|
--[[
|
|
local MODEL = {
|
|
modelName = "", -- The name of the model comming from OTX/ETX
|
|
hashName = "",
|
|
modelOutputChannel = {}, -- Output information from OTX/ETX
|
|
|
|
TX_CH_TEXT= { [0]=""},
|
|
PORT_TEXT = { [0]=""},
|
|
|
|
DSM_ChannelInfo = {} -- Data Created by DSM Configuration Script
|
|
}
|
|
|
|
-- MENU DATA Management
|
|
local M_DATA = {} -- Store the variables used in the Menus.
|
|
|
|
--]]
|
|
|
|
local DATA_PATH = "/MODELS/DSMDATA"
|
|
local TX_CHANNELS = 12
|
|
|
|
local MV_DATA_END = 1040
|
|
|
|
|
|
local function hashName(mName)
|
|
local c=10000;
|
|
|
|
local prefix = string.gsub(mName,"%.","_") -- Change any "." to "_"
|
|
prefix = string.gsub(prefix,"% ","_") -- Change any space to "_"
|
|
prefix = string.sub(prefix,1,5) -- Take the first 5 characters
|
|
|
|
-- Simple Hash of the Model Name adding each character
|
|
for i = 1, #mName do
|
|
local ch = string.byte(mName,i,i)
|
|
c=c+ch
|
|
end
|
|
|
|
return (prefix .. c) -- Return Prefix + Hash
|
|
end
|
|
|
|
-- Load Menu Data from a file
|
|
local function ST_LoadFileData()
|
|
local fname = hashName(MODEL.modelName)..".txt"
|
|
MODEL.hashName = fname
|
|
|
|
-- Clear Menu Data
|
|
for i = 0, MV_DATA_END do
|
|
M_DATA[i]=nil
|
|
end
|
|
|
|
print("Loading File:"..fname)
|
|
|
|
local dataFile = io.open(DATA_PATH .. "/".. fname, "r") -- read File
|
|
-- cannot read file???
|
|
if (dataFile==nil) then return 0 end
|
|
|
|
local line = io.read(dataFile, 5000)
|
|
io.close(dataFile)
|
|
|
|
if #line == 0 then return 0 end -- No data??
|
|
|
|
-- Process the input, each line is "Var_Id : Value" format
|
|
-- Store it into MANU_DATA
|
|
local i=0
|
|
for k, v in string.gmatch(line, "(%d+):(%d+)") do
|
|
M_DATA[k+0]=v+0 -- do aritmentic to convert string to number
|
|
i=i+1
|
|
end
|
|
|
|
-- Return 0 if no lines processed, 1 otherwise
|
|
if (i > 0) then return 1 else return 0 end
|
|
end
|
|
|
|
local function getModuleChannelOrder(num)
|
|
--Determine fist 4 channels order
|
|
local ch_n={}
|
|
local st_n = {[0]= "R", "E", "T", "A" }
|
|
local c_ord=num -- ch order
|
|
if (c_ord == -1) then
|
|
ch_n[0] = st_n[3]
|
|
ch_n[1] = st_n[1]
|
|
ch_n[2] = st_n[2]
|
|
ch_n[3] = st_n[0]
|
|
else
|
|
ch_n[bit32.band(c_ord,3)] = st_n[3]
|
|
c_ord = math.floor(c_ord/4)
|
|
ch_n[bit32.band(c_ord,3)] = st_n[1]
|
|
c_ord = math.floor(c_ord/4)
|
|
ch_n[bit32.band(c_ord,3)] = st_n[2]
|
|
c_ord = math.floor(c_ord/4)
|
|
ch_n[bit32.band(c_ord,3)] = st_n[0]
|
|
end
|
|
|
|
local s = ""
|
|
for i=0,3 do
|
|
s=s..ch_n[i]
|
|
end
|
|
return s
|
|
end
|
|
|
|
local function ReadTxModelData()
|
|
local TRANSLATE_AETR_TO_TAER=false
|
|
local table = model.getInfo() -- Get the model name
|
|
MODEL.modelName = table.name
|
|
|
|
local module = model.getModule(0) -- Internal
|
|
if (module==nil or module.Type~=6) then module = model.getModule(1) end -- External
|
|
if (module~=nil) then
|
|
if (module.Type==6 ) then -- MULTI-MODULE
|
|
local chOrder = module.channelsOrder
|
|
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
|
|
|
|
-- Read Ch1 to Ch10
|
|
local i= 0
|
|
for i = 0, TX_CHANNELS-1 do
|
|
local ch = model.getOutput(i) -- Zero base
|
|
if (ch~=nil) then
|
|
MODEL.modelOutputChannel[i] = ch
|
|
if (string.len(ch.name)==0) then
|
|
ch.formatCh = string.format("TX:Ch%i",i+1)
|
|
else
|
|
ch.formatCh = string.format("TX:Ch%i/%s",i+1,ch.name or "--")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Translate AETR to TAER
|
|
|
|
if (TRANSLATE_AETR_TO_TAER) then
|
|
LOG_write("Applying AETR -> TAER translation\n")
|
|
local ail = MODEL.modelOutputChannel[0]
|
|
local elv = MODEL.modelOutputChannel[1]
|
|
local thr = MODEL.modelOutputChannel[2]
|
|
|
|
MODEL.modelOutputChannel[0] = thr
|
|
MODEL.modelOutputChannel[1] = ail
|
|
MODEL.modelOutputChannel[2] = elv
|
|
end
|
|
|
|
-- Create the Port Text to be used
|
|
LOG_write("Ports/Channels:\n")
|
|
for i = 0, TX_CHANNELS-1 do
|
|
local ch = MODEL.modelOutputChannel[i]
|
|
if (ch~=nil) then
|
|
MODEL.TX_CH_TEXT[i] = ch.formatCh
|
|
MODEL.PORT_TEXT[i] = string.format("P%i (%s) ",i+1,MODEL.TX_CH_TEXT[i])
|
|
LOG_write("Port%d %s [%d,%d] Rev=%d, Off=%d, ppmC=%d, syn=%d\n",i+1,MODEL.TX_CH_TEXT[i],math.floor(ch.min/10),math.floor(ch.max/10), ch.revert, ch.offset, ch.ppmCenter, ch.symetrical)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Main Program
|
|
|
|
LOG_write("Reading Model Info\n")
|
|
ReadTxModelData()
|
|
local r = ST_LoadFileData()
|
|
return r
|
|
|
|
|