Поддержка ExpressLRS #3
Replies: 3 comments
-
Существуют скрипты для настройки передатчиков напрямую с аппаратуры: ELRSv2.LUA и CRSF.LUA. Из них можно выделить общее поведение:
В скрипте искомого протокола есть интересная строчка, в которой определяется тип устройства по id и серийному номеру: deviceIsELRS_TX = ((fieldGetValue(data,offset,4) == 0x454C5253) and (deviceId == 0xEE)) or nil |
Beta Was this translation helpful? Give feedback.
-
Тестовый скрипт для определения local function fieldGetString(data, offset)
local result = ""
while data[offset] ~= 0 do
result = result .. string.char(data[offset])
offset = offset + 1
end
return result, offset + 1
end
local function fieldGetValue(data, offset, size)
local result = 0
for i = 0, size - 1 do
result = bit32.lshift(result, 8) + data[offset + i]
end
return result
end
local function run(event)
local command, data = crossfireTelemetryPop()
if command == 0x29 then
deviceName, offset = fieldGetString(data, 3)
elrs = fieldGetValue(data, offset, 4) == 0x454C5253 and data[2] == 0xEE
crsf = true
end
if crsf and elrs then
popupWarning("You have ELRS!", event)
elseif crsf then
popupWarning("You have CRSF!", event)
else
popupWarning("---", event)
end
return 0
end
return { run = run } |
Beta Was this translation helpful? Give feedback.
-
Финальная версия скрипта для определения типа установленного дальнобойного модуля. При поступлении данных пропускаем из ответа имя устройства и берем 4 символа (искомый серийник). local toolName = "TNS|ELRS Detector|TNE"
local function run(event)
if crsf and elrs == nil then
local shift, command, data = 3, crossfireTelemetryPop()
if command == 0x29 and data[2] == 0xEE then
while data[shift] ~= 0 do
shift = shift + 1
end
elrs = (data[shift + 1] == 0x45 and data[shift + 2] == 0x4c and data[shift + 3] == 0x52 and data[shift + 4] == 0x53)
else
crossfireTelemetryPush(0x28, {0x00, 0xEA})
end
end
popupWarning(crsf and (elrs and "ELRS" or "CRSF") or "No crossfire", event)
return 0
end
local function init()
crsf = crossfireTelemetryPush() ~= nil
end
return { run = run, init = init } |
Beta Was this translation helpful? Give feedback.
-
Текущая реализация скрипта на 99% позволяется отобразить информацию, принимаемую с приемника
ExpressLRS
.Данный модуль работает аналогичным образом, как и
TBS Crossfire
. Единственное отличие - частотная сеткаRFMD
.Показать правильную частоту в своем скрипте не представляется возможным из-за отличий в 1 и 2 каналах.
В этой связи возникает вопрос как возможно понять что в аппаратуру установлен приемник
ELRS
, а неCRSF
?Beta Was this translation helpful? Give feedback.
All reactions