mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 21:08:12 +00:00
172 lines
5.6 KiB
Lua
172 lines
5.6 KiB
Lua
---- #########################################################################
|
|
---- # #
|
|
---- # Copyright (C) OpenTX #
|
|
-----# #
|
|
---- # License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html #
|
|
---- # #
|
|
---- # This program is free software; you can redistribute it and/or modify #
|
|
---- # it under the terms of the GNU General Public License version 2 as #
|
|
---- # published by the Free Software Foundation. #
|
|
---- # #
|
|
---- # This program is distributed in the hope that it will be useful #
|
|
---- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
---- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
---- # GNU General Public License for more details. #
|
|
---- # #
|
|
---- #########################################################################
|
|
|
|
|
|
--###############################################################################
|
|
-- Multi buffer for HoTT description
|
|
-- To start operation:
|
|
-- Write "HoTT" at address 0..3
|
|
-- Write 0xFF at address 4 will request the buffer to be cleared
|
|
-- Write 0x0F at address 5
|
|
-- Read buffer from address 6 access the RX text for 168 bytes, 21 caracters
|
|
-- by 8 lines
|
|
-- Write at address 5 sends an order to the RX: 0xXF=start, 0xX7=prev page,
|
|
-- 0xXE=next page, 0xX9=enter, 0xXD=next or 0xXB=prev with X being the sensor
|
|
-- to request data from 8=RX only, 9=Vario, A=GPS, B=Cust, C=ESC, D=GAM, E=EAM
|
|
-- Write at address 4 the value 0xFF will request the buffer to be cleared
|
|
-- !! Before exiting the script must write 0 at address 0 for normal operation !!
|
|
--###############################################################################
|
|
|
|
HoTT_Sensor = 0
|
|
Timer_128 = 100
|
|
|
|
local function HoTT_Release()
|
|
multiBuffer( 0, 0 )
|
|
end
|
|
|
|
local function HoTT_Send(button)
|
|
multiBuffer( 5, 0x80+(HoTT_Sensor*16) + button)
|
|
end
|
|
|
|
local function HoTT_Sensor_Inc()
|
|
local detected_sensors=multiBuffer( 4 )
|
|
local a
|
|
if detected_sensors ~= 0xFF then
|
|
repeat
|
|
HoTT_Sensor=(HoTT_Sensor+1)%7 -- Switch to next sensor
|
|
if HoTT_Sensor ~= 0 then
|
|
a = math.floor(detected_sensors/ (2^(HoTT_Sensor-1))) -- shift right
|
|
end
|
|
until HoTT_Sensor==0 or a % 2 == 1
|
|
HoTT_Send( 0x0F )
|
|
end
|
|
end
|
|
|
|
local function HoTT_Draw_LCD()
|
|
local i
|
|
local value
|
|
local line
|
|
local result
|
|
local offset=0
|
|
|
|
local sensor_name = { "", "+Vario", "+GPS", "+Cust", "+ESC", "+GAM", "+EAM" }
|
|
|
|
lcd.clear()
|
|
|
|
if LCD_W == 480 then
|
|
--Draw title
|
|
lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR)
|
|
lcd.drawText(1, 5, "Graupner HoTT: config RX" .. sensor_name[HoTT_Sensor+1] .. " - Menu cycle Sensors", MENU_TITLE_COLOR)
|
|
--Draw RX Menu
|
|
if multiBuffer( 4 ) == 0xFF then
|
|
lcd.drawText(10,50,"No HoTT telemetry...", BLINK)
|
|
else
|
|
for line = 0, 7, 1 do
|
|
for i = 0, 21-1, 1 do
|
|
value=multiBuffer( line*21+6+i )
|
|
if value > 0x80 then
|
|
value = value - 0x80
|
|
lcd.drawText(10+i*16,32+20*line,string.char(value).." ",INVERS)
|
|
else
|
|
lcd.drawText(10+i*16,32+20*line,string.char(value))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
--Draw RX Menu on LCD_W=128
|
|
if multiBuffer( 4 ) == 0xFF then
|
|
lcd.drawText(2,17,"No HoTT telemetry...",SMLSIZE)
|
|
else
|
|
if Timer_128 ~= 0 then
|
|
--Intro page
|
|
Timer_128 = Timer_128 - 1
|
|
lcd.drawScreenTitle("Graupner Hott",0,0)
|
|
lcd.drawText(2,17,"Configuration of RX" .. sensor_name[HoTT_Sensor+1] ,SMLSIZE)
|
|
lcd.drawText(2,37,"Press menu to cycle Sensors" ,SMLSIZE)
|
|
else
|
|
--Menu page
|
|
for line = 0, 7, 1 do
|
|
for i = 0, 21-1, 1 do
|
|
value=multiBuffer( line*21+6+i )
|
|
if value > 0x80 then
|
|
value = value - 0x80
|
|
lcd.drawText(2+i*6,1+8*line,string.char(value).." ",SMLSIZE+INVERS)
|
|
else
|
|
lcd.drawText(2+i*6,1+8*line,string.char(value),SMLSIZE)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Init
|
|
local function HoTT_Init()
|
|
--Set protocol to talk to
|
|
multiBuffer( 0, string.byte('H') )
|
|
--test if value has been written
|
|
if multiBuffer( 0 ) ~= string.byte('H') then
|
|
error("Not enough memory!")
|
|
return 2
|
|
end
|
|
multiBuffer( 1, string.byte('o') )
|
|
multiBuffer( 2, string.byte('T') )
|
|
multiBuffer( 3, string.byte('T') )
|
|
--Request init of the RX buffer
|
|
multiBuffer( 4, 0xFF )
|
|
--Request RX to send the config menu
|
|
HoTT_Send( 0x0F )
|
|
HoTT_Sensor = 0;
|
|
HoTT_Detected_Sensors=0;
|
|
Timer_128 = 100
|
|
end
|
|
|
|
-- Main
|
|
local function HoTT_Run(event)
|
|
if event == nil then
|
|
error("Cannot be run as a model script!")
|
|
return 2
|
|
elseif event == EVT_VIRTUAL_EXIT then
|
|
HoTT_Release()
|
|
return 2
|
|
else
|
|
if event == EVT_VIRTUAL_PREV_PAGE then
|
|
killEvents(event)
|
|
HoTT_Send( 0x07 )
|
|
elseif event == EVT_VIRTUAL_ENTER then
|
|
HoTT_Send( 0x09 )
|
|
elseif event == EVT_VIRTUAL_PREV then
|
|
HoTT_Send( 0x0B )
|
|
elseif event == EVT_VIRTUAL_NEXT then
|
|
HoTT_Send( 0x0D )
|
|
elseif event == EVT_VIRTUAL_NEXT_PAGE then
|
|
HoTT_Send( 0x0E )
|
|
elseif event == EVT_VIRTUAL_MENU then
|
|
Timer_128 = 100
|
|
HoTT_Sensor_Inc()
|
|
else
|
|
HoTT_Send( 0x0F )
|
|
end
|
|
HoTT_Draw_LCD()
|
|
return 0
|
|
end
|
|
end
|
|
|
|
return { init=HoTT_Init, run=HoTT_Run }
|