You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
--[[ |
|
Simple example that sends rpm info down the frsky link |
|
it works with SPort using SERIAL_PROTOCOL=4,10 and with |
|
FPort using SERIAL_PROTOCOL=23. |
|
|
|
We'll be using OpenTX genuine RPM data IDs (https://github.com/opentx/opentx/blob/2.3/radio/src/telemetry/frsky.h) |
|
|
|
RPM_FIRST_ID 0x0500 |
|
RPM_LAST_ID 0x050F |
|
|
|
and we'll be responding to unused sensor IDs. |
|
This is a list of IDs we can't use: |
|
- serial protocol 4 uses IDs 0,2,3 and 6 |
|
- serial protocol 10 uses ID 7,13,20,27 |
|
- serial protocol 23, no IDs used |
|
|
|
For this test we'll use sensor ID 4 (0xE4), |
|
Note: 4 is the index, 0xE4 is the actual ID |
|
--]] |
|
|
|
local loop_time = 250 -- number of ms between runs |
|
local sport_data_frame = 0x10 |
|
local sensor_id = 0xE4 |
|
--[[ |
|
we use the last 2 data ids so we hopefully don't interfere with pre existing sensors |
|
this is a suggestion but if we know our RPM sensors are going to be |
|
the only RPM sensors on the bus we can use 0x0500 and 0x0501 |
|
--]] |
|
local data_ids = { |
|
[0] = 0x050E, |
|
[1] = 0x050F, |
|
} |
|
|
|
local function rpm_data_sent(instance, rpm) |
|
gcs:send_text(7, string.format("rpm_data_sent() %d: %s", instance, tostring(rpm))) |
|
end |
|
|
|
local function send_rpm_data(instance, callback) |
|
local rpm = RPM:get_rpm(instance) |
|
gcs:send_text(7,string.format("send_rpm_data() %d, %s", instance, tostring(rpm))) |
|
if rpm ~= nil then |
|
if frsky_sport:sport_telemetry_push(sensor_id, sport_data_frame, data_ids[instance], rpm) then |
|
callback(instance, rpm) |
|
end |
|
end |
|
end |
|
|
|
local rpm_idx = 0 |
|
|
|
function update() |
|
send_rpm_data(rpm_idx, rpm_data_sent) |
|
rpm_idx = (rpm_idx+1)%2 |
|
return update, loop_time |
|
end |
|
|
|
return update() -- run immediately before starting to reschedule
|
|
|