Skip to content

Commit

Permalink
add attempt at OSD lua scripting support
Browse files Browse the repository at this point in the history
  • Loading branch information
olliw42 committed Feb 8, 2025
1 parent 85dfa5a commit 7d26b30
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 6 deletions.
5 changes: 5 additions & 0 deletions libraries/AP_OSD/AP_OSD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,11 @@ void AP_OSD::osd_thread()
while (true) {
hal.scheduler->delay(100);
if (!_disable) {
//OW OSD
#if AP_OSD_EXTENDED_LNK_STATS
update_radio_link_stats();
#endif
//OWEND
update_stats();
update_current_screen();
}
Expand Down
53 changes: 53 additions & 0 deletions libraries/AP_OSD/AP_OSD.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@
#include <AC_Fence/AC_Fence_config.h>
#include <AP_RangeFinder/AP_RangeFinder_config.h>

//OW OSD
#include <AP_RCProtocol/AP_RCProtocol_CRSF.h>
//OWEND

class AP_OSD_Backend;
class AP_MSP;

Expand Down Expand Up @@ -693,6 +697,55 @@ class AP_OSD
return _sem;
}

//OW OSD
#if AP_OSD_EXTENDED_LNK_STATS
void set_rc_tx_power(int16_t tx_power) {
radio_link_stats.tx_power = tx_power; radio_link_stats.tlast_ms = AP_HAL::millis();
}
void set_rc_rssi_dbm(int8_t rssi_dbm) {
radio_link_stats.rssi_dbm = rssi_dbm; radio_link_stats.tlast_ms = AP_HAL::millis();
}
void set_rc_snr(int8_t snr) {
radio_link_stats.snr = snr; radio_link_stats.tlast_ms = AP_HAL::millis();
}
void set_rc_active_antenna(int8_t active_antenna) {
radio_link_stats.active_antenna = active_antenna; radio_link_stats.tlast_ms = AP_HAL::millis();
}

int16_t get_rc_tx_power() {
return (radio_link_stats.tx_power >= 0) ? radio_link_stats.tx_power : AP::crsf()->get_link_status().tx_power;
}
int8_t get_rc_rssi_dbm() {
return (radio_link_stats.rssi_dbm >= 0) ? radio_link_stats.rssi_dbm : AP::RC().get_link_status().rssi_dbm; // AP::crsf()->get_link_status().rssi_dbm;
}
int8_t get_rc_snr() {
return (radio_link_stats.snr >= INT8_MIN) ? radio_link_stats.snr : AP::RC().get_link_status().snr; // AP::crsf()->get_link_status().snr;
}
int8_t get_rc_active_antenna() {
return (radio_link_stats.active_antenna >= 0) ? radio_link_stats.active_antenna : AP::crsf()->get_link_status().active_antenna;
}

void update_radio_link_stats()
{
uint32_t tnow_ms = AP_HAL::millis();
if (tnow_ms - radio_link_stats.tlast_ms > 2000) {
radio_link_stats.tx_power = -1;
radio_link_stats.rssi_dbm = -1;
radio_link_stats.snr = INT8_MIN;
radio_link_stats.active_antenna = -1;
}
}

struct {
uint32_t tlast_ms;
int16_t tx_power = -1;
int8_t rssi_dbm = -1;
int8_t snr = INT8_MIN;
int8_t active_antenna = -1;
} radio_link_stats;
#endif
//OWEND

private:
void osd_thread();
#if OSD_ENABLED
Expand Down
27 changes: 21 additions & 6 deletions libraries/AP_OSD/AP_OSD_Screen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2064,7 +2064,10 @@ bool AP_OSD_Screen::is_btfl_fonts()

void AP_OSD_Screen::draw_rc_tx_power(uint8_t x, uint8_t y)
{
const int16_t tx_power = AP::crsf()->get_link_status().tx_power;
//OW OSD
//const int16_t tx_power = AP::crsf()->get_link_status().tx_power;
const int16_t tx_power = osd->get_rc_tx_power();
//OWEND
bool btfl = is_btfl_fonts();
if (tx_power > 0) {
if (tx_power < 1000) {
Expand Down Expand Up @@ -2092,7 +2095,10 @@ void AP_OSD_Screen::draw_rc_tx_power(uint8_t x, uint8_t y)

void AP_OSD_Screen::draw_rc_rssi_dbm(uint8_t x, uint8_t y)
{
const int8_t rssidbm = AP::RC().get_link_status().rssi_dbm; //OW AP::crsf()->get_link_status().rssi_dbm;
//OW OSD
//const int8_t rssidbm = AP::RC().get_link_status().rssi_dbm; //OW RADIOLINK AP::crsf()->get_link_status().rssi_dbm;
const int8_t rssidbm = osd->get_rc_rssi_dbm();
//OWEND
const bool blink = -rssidbm < osd->warn_rssi;
bool btfl = is_btfl_fonts();

Expand All @@ -2115,7 +2121,10 @@ void AP_OSD_Screen::draw_rc_rssi_dbm(uint8_t x, uint8_t y)

void AP_OSD_Screen::draw_rc_snr(uint8_t x, uint8_t y)
{
const int8_t snr = AP::RC().get_link_status().snr; //OW AP::crsf()->get_link_status().snr;
//OW OSD
//const int8_t snr = AP::RC().get_link_status().snr; //OW RADIOLINK AP::crsf()->get_link_status().snr;
const int8_t snr = osd->get_rc_snr();
//OWEND
const bool blink = snr < osd->warn_snr;
bool btfl = is_btfl_fonts();
if (snr == INT8_MIN) {
Expand All @@ -2135,7 +2144,10 @@ void AP_OSD_Screen::draw_rc_snr(uint8_t x, uint8_t y)

void AP_OSD_Screen::draw_rc_active_antenna(uint8_t x, uint8_t y)
{
const int8_t active_antenna = AP::crsf()->get_link_status().active_antenna;
//OW OSD
//const int8_t active_antenna = AP::crsf()->get_link_status().active_antenna;
const int8_t active_antenna = osd->get_rc_active_antenna();
//OWEND
bool btfl = is_btfl_fonts();
if (active_antenna < 0) {
if (btfl) {
Expand All @@ -2153,8 +2165,11 @@ void AP_OSD_Screen::draw_rc_active_antenna(uint8_t x, uint8_t y)
}

void AP_OSD_Screen::draw_rc_lq(uint8_t x, uint8_t y)
{
const int16_t lqv = AP::RC().get_link_status().link_quality; //OW AP::crsf()->get_link_status().link_quality;
{
//OW RADIO_LINK
//const int16_t lqv = AP::crsf()->get_link_status().link_quality;
const int16_t lqv = AP::RC().get_link_status().link_quality;
//OWEND
const bool blink = lqv < osd->warn_lq;
bool btfl = is_btfl_fonts();
bool prefix_rf = check_option(AP_OSD::OPTION_RF_MODE_ALONG_WITH_LQ);
Expand Down
11 changes: 11 additions & 0 deletions libraries/AP_Scripting/generator/description/bindings.desc
Original file line number Diff line number Diff line change
Expand Up @@ -1074,3 +1074,14 @@ userdata AP_Servo_Telem::TelemetryData field motor_temperature_cdeg int16_t'skip
userdata AP_Servo_Telem::TelemetryData field pcb_temperature_cdeg int16_t'skip_check read valid_mask present_types AP_Servo_Telem::TelemetryData::Types::PCB_TEMP
userdata AP_Servo_Telem::TelemetryData field status_flags uint8_t'skip_check read valid_mask present_types AP_Servo_Telem::TelemetryData::Types::STATUS
userdata AP_Servo_Telem::TelemetryData field last_update_ms uint32_t'skip_check read

-- //OW
include AP_OSD/AP_OSD.h depends OSD_ENABLED
include AP_OSD/AP_OSD_config.h
singleton AP_OSD depends (OSD_ENABLED && AP_OSD_LINK_STATS_EXTENSIONS_ENABLED)
singleton AP_OSD rename osd
singleton AP_OSD method set_rc_tx_power void int16_t'skip_check
singleton AP_OSD method set_rc_rssi_dbm void int8_t'skip_check
singleton AP_OSD method set_rc_snr void int8_t'skip_check
singleton AP_OSD method set_rc_active_antenna void int8_t'skip_check
-- //OWEND
2 changes: 2 additions & 0 deletions libraries/bp_version.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@
search for //OW to find all changes THR_MINSPD THR_SLEW SUPP_MAN waiting for rudder release
on-top features:
- OSD (OW OSD)
- RADIO_LINK (OW RADIOLINK)
- RC_Channel, AUX_FUNC: CAMERA_SET_MODE, CAMERA_TRIG_MODE (eq CAM_MODE_TOGGLE) (OW CAMERA)
- Plane THR (OW THR_SUPP)
2025.02.08:
attempt at adding OSD lua script
change to "new" radio link stats/info messages, compiles, needs testing
upgraded to ArduPilot master 4.7.0-dev
few changes needed, got it to compile, but needs testing if it works
Expand Down

0 comments on commit 7d26b30

Please sign in to comment.