mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-17 13:25:30 +03:00
Added warnings for RSSI and Link Quality, added Link Quality alarm.
This commit is contained in:
parent
eb7e6c0b39
commit
11dd4e7598
5 changed files with 57 additions and 3 deletions
|
@ -1123,8 +1123,15 @@ const clivalue_t valueTable[] = {
|
||||||
#endif
|
#endif
|
||||||
{ "osd_warn_no_gps_rescue", VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos = OSD_WARNING_GPS_RESCUE_UNAVAILABLE, PG_OSD_CONFIG, offsetof(osdConfig_t, enabledWarnings)},
|
{ "osd_warn_no_gps_rescue", VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos = OSD_WARNING_GPS_RESCUE_UNAVAILABLE, PG_OSD_CONFIG, offsetof(osdConfig_t, enabledWarnings)},
|
||||||
{ "osd_warn_gps_rescue_disabled", VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos = OSD_WARNING_GPS_RESCUE_DISABLED, PG_OSD_CONFIG, offsetof(osdConfig_t, enabledWarnings)},
|
{ "osd_warn_gps_rescue_disabled", VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos = OSD_WARNING_GPS_RESCUE_DISABLED, PG_OSD_CONFIG, offsetof(osdConfig_t, enabledWarnings)},
|
||||||
|
{ "osd_warn_rssi", VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos = OSD_WARNING_RSSI, PG_OSD_CONFIG, offsetof(osdConfig_t, enabledWarnings)},
|
||||||
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
|
{ "osd_warn_link_quality", VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos = OSD_WARNING_LINK_QUALITY, PG_OSD_CONFIG, offsetof(osdConfig_t, enabledWarnings)},
|
||||||
|
#endif
|
||||||
|
|
||||||
{ "osd_rssi_alarm", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 100 }, PG_OSD_CONFIG, offsetof(osdConfig_t, rssi_alarm) },
|
{ "osd_rssi_alarm", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 100 }, PG_OSD_CONFIG, offsetof(osdConfig_t, rssi_alarm) },
|
||||||
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
|
{ "osd_link_quality_alarm", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 100 }, PG_OSD_CONFIG, offsetof(osdConfig_t, link_quality_alarm) },
|
||||||
|
#endif
|
||||||
{ "osd_cap_alarm", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 20000 }, PG_OSD_CONFIG, offsetof(osdConfig_t, cap_alarm) },
|
{ "osd_cap_alarm", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 20000 }, PG_OSD_CONFIG, offsetof(osdConfig_t, cap_alarm) },
|
||||||
{ "osd_alt_alarm", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 10000 }, PG_OSD_CONFIG, offsetof(osdConfig_t, alt_alarm) },
|
{ "osd_alt_alarm", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 10000 }, PG_OSD_CONFIG, offsetof(osdConfig_t, alt_alarm) },
|
||||||
{ "osd_esc_temp_alarm", VAR_INT8 | MASTER_VALUE, .config.minmax = { INT8_MIN, INT8_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, esc_temp_alarm) },
|
{ "osd_esc_temp_alarm", VAR_INT8 | MASTER_VALUE, .config.minmax = { INT8_MIN, INT8_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, esc_temp_alarm) },
|
||||||
|
|
|
@ -809,6 +809,13 @@ static bool mspCommonProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProce
|
||||||
sbufWriteU8(dst, 0);
|
sbufWriteU8(dst, 0);
|
||||||
#endif // USE_OSD_STICK_OVERLAY
|
#endif // USE_OSD_STICK_OVERLAY
|
||||||
|
|
||||||
|
// API >= 1.42
|
||||||
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
|
sbufWriteU8(dst, osdConfig()->link_quality_alarm);
|
||||||
|
#else
|
||||||
|
sbufWriteU8(dst, 0);
|
||||||
|
#endif // USE_RX_LINK_QUALITY_INFO
|
||||||
|
|
||||||
#endif // USE_OSD
|
#endif // USE_OSD
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2764,14 +2771,23 @@ static mspResult_e mspCommonProcessInCommand(uint8_t cmdMSP, sbuf_t *src, mspPos
|
||||||
if (sbufBytesRemaining(src) >= 1) {
|
if (sbufBytesRemaining(src) >= 1) {
|
||||||
// API >= 1.41
|
// API >= 1.41
|
||||||
// OSD stick overlay mode
|
// OSD stick overlay mode
|
||||||
|
|
||||||
#ifdef USE_OSD_STICK_OVERLAY
|
#ifdef USE_OSD_STICK_OVERLAY
|
||||||
osdConfigMutable()->overlay_radio_mode = sbufReadU8(src);
|
osdConfigMutable()->overlay_radio_mode = sbufReadU8(src);
|
||||||
#else
|
#else
|
||||||
sbufReadU8(src);
|
sbufReadU8(src);
|
||||||
#endif // USE_OSD_STICK_OVERLAY
|
#endif // USE_OSD_STICK_OVERLAY
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sbufBytesRemaining(src) >= 1) {
|
||||||
|
// API >= 1.42
|
||||||
|
// Link Quality alarm
|
||||||
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
|
osdConfigMutable()->link_quality_alarm = sbufReadU8(src);
|
||||||
|
#else
|
||||||
|
sbufReadU8(src);
|
||||||
|
#endif // USE_RX_LINK_QUALITY_INFO
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
} else if ((int8_t)addr == -2) {
|
} else if ((int8_t)addr == -2) {
|
||||||
#if defined(USE_OSD)
|
#if defined(USE_OSD)
|
||||||
|
|
|
@ -233,6 +233,9 @@ void pgResetFn_osdConfig(osdConfig_t *osdConfig)
|
||||||
for (int i=0; i < OSD_WARNING_COUNT; i++) {
|
for (int i=0; i < OSD_WARNING_COUNT; i++) {
|
||||||
osdWarnSetState(i, true);
|
osdWarnSetState(i, true);
|
||||||
}
|
}
|
||||||
|
// turn off RSSI & Link Quality warnings by default
|
||||||
|
osdWarnSetState(OSD_WARNING_RSSI, false);
|
||||||
|
osdWarnSetState(OSD_WARNING_LINK_QUALITY, false);
|
||||||
|
|
||||||
osdConfig->timers[OSD_TIMER_1] = OSD_TIMER(OSD_TIMER_SRC_ON, OSD_TIMER_PREC_SECOND, 10);
|
osdConfig->timers[OSD_TIMER_1] = OSD_TIMER(OSD_TIMER_SRC_ON, OSD_TIMER_PREC_SECOND, 10);
|
||||||
osdConfig->timers[OSD_TIMER_2] = OSD_TIMER(OSD_TIMER_SRC_TOTAL_ARMED, OSD_TIMER_PREC_SECOND, 10);
|
osdConfig->timers[OSD_TIMER_2] = OSD_TIMER(OSD_TIMER_SRC_TOTAL_ARMED, OSD_TIMER_PREC_SECOND, 10);
|
||||||
|
@ -240,6 +243,7 @@ void pgResetFn_osdConfig(osdConfig_t *osdConfig)
|
||||||
osdConfig->overlay_radio_mode = 2;
|
osdConfig->overlay_radio_mode = 2;
|
||||||
|
|
||||||
osdConfig->rssi_alarm = 20;
|
osdConfig->rssi_alarm = 20;
|
||||||
|
osdConfig->link_quality_alarm = 80;
|
||||||
osdConfig->cap_alarm = 2200;
|
osdConfig->cap_alarm = 2200;
|
||||||
osdConfig->alt_alarm = 100; // meters or feet depend on configuration
|
osdConfig->alt_alarm = 100; // meters or feet depend on configuration
|
||||||
osdConfig->esc_temp_alarm = ESC_TEMP_ALARM_OFF; // off by default
|
osdConfig->esc_temp_alarm = ESC_TEMP_ALARM_OFF; // off by default
|
||||||
|
|
|
@ -203,6 +203,8 @@ typedef enum {
|
||||||
OSD_WARNING_LAUNCH_CONTROL,
|
OSD_WARNING_LAUNCH_CONTROL,
|
||||||
OSD_WARNING_GPS_RESCUE_UNAVAILABLE,
|
OSD_WARNING_GPS_RESCUE_UNAVAILABLE,
|
||||||
OSD_WARNING_GPS_RESCUE_DISABLED,
|
OSD_WARNING_GPS_RESCUE_DISABLED,
|
||||||
|
OSD_WARNING_RSSI,
|
||||||
|
OSD_WARNING_LINK_QUALITY,
|
||||||
OSD_WARNING_COUNT // MUST BE LAST
|
OSD_WARNING_COUNT // MUST BE LAST
|
||||||
} osdWarningsFlags_e;
|
} osdWarningsFlags_e;
|
||||||
|
|
||||||
|
@ -222,6 +224,7 @@ typedef struct osdConfig_s {
|
||||||
uint16_t cap_alarm;
|
uint16_t cap_alarm;
|
||||||
uint16_t alt_alarm;
|
uint16_t alt_alarm;
|
||||||
uint8_t rssi_alarm;
|
uint8_t rssi_alarm;
|
||||||
|
uint8_t link_quality_alarm;
|
||||||
|
|
||||||
osd_unit_e units;
|
osd_unit_e units;
|
||||||
|
|
||||||
|
|
|
@ -1020,7 +1020,7 @@ static void osdElementVtxChannel(osdElementParms_t *element)
|
||||||
|
|
||||||
static void osdElementWarnings(osdElementParms_t *element)
|
static void osdElementWarnings(osdElementParms_t *element)
|
||||||
{
|
{
|
||||||
#define OSD_WARNINGS_MAX_SIZE 11
|
#define OSD_WARNINGS_MAX_SIZE 12
|
||||||
#define OSD_FORMAT_MESSAGE_BUFFER_SIZE (OSD_WARNINGS_MAX_SIZE + 1)
|
#define OSD_FORMAT_MESSAGE_BUFFER_SIZE (OSD_WARNINGS_MAX_SIZE + 1)
|
||||||
|
|
||||||
STATIC_ASSERT(OSD_FORMAT_MESSAGE_BUFFER_SIZE <= OSD_ELEMENT_BUFFER_LENGTH, osd_warnings_size_exceeds_buffer_size);
|
STATIC_ASSERT(OSD_FORMAT_MESSAGE_BUFFER_SIZE <= OSD_ELEMENT_BUFFER_LENGTH, osd_warnings_size_exceeds_buffer_size);
|
||||||
|
@ -1112,6 +1112,22 @@ static void osdElementWarnings(osdElementParms_t *element)
|
||||||
}
|
}
|
||||||
#endif // USE_LAUNCH_CONTROL
|
#endif // USE_LAUNCH_CONTROL
|
||||||
|
|
||||||
|
// RSSI
|
||||||
|
if (osdWarnGetState(OSD_WARNING_RSSI) && (getRssiPercent() < osdConfig()->rssi_alarm)) {
|
||||||
|
osdFormatMessage(element->buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, "RSSI LOW");
|
||||||
|
SET_BLINK(OSD_WARNINGS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
|
// Link Quality
|
||||||
|
if (osdWarnGetState(OSD_WARNING_LINK_QUALITY) && (rxGetLinkQualityPercent() < osdConfig()->link_quality_alarm)) {
|
||||||
|
osdFormatMessage(element->buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, "LINK QUALITY");
|
||||||
|
SET_BLINK(OSD_WARNINGS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif // USE_RX_LINK_QUALITY_INFO
|
||||||
|
|
||||||
if (osdWarnGetState(OSD_WARNING_BATTERY_CRITICAL) && batteryState == BATTERY_CRITICAL) {
|
if (osdWarnGetState(OSD_WARNING_BATTERY_CRITICAL) && batteryState == BATTERY_CRITICAL) {
|
||||||
osdFormatMessage(element->buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, " LAND NOW");
|
osdFormatMessage(element->buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, " LAND NOW");
|
||||||
SET_BLINK(OSD_WARNINGS);
|
SET_BLINK(OSD_WARNINGS);
|
||||||
|
@ -1520,6 +1536,14 @@ void osdUpdateAlarms(void)
|
||||||
CLR_BLINK(OSD_RSSI_VALUE);
|
CLR_BLINK(OSD_RSSI_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
|
if (rxGetLinkQualityPercent() < osdConfig()->link_quality_alarm) {
|
||||||
|
SET_BLINK(OSD_LINK_QUALITY);
|
||||||
|
} else {
|
||||||
|
CLR_BLINK(OSD_LINK_QUALITY);
|
||||||
|
}
|
||||||
|
#endif // USE_RX_LINK_QUALITY_INFO
|
||||||
|
|
||||||
if (getBatteryState() == BATTERY_OK) {
|
if (getBatteryState() == BATTERY_OK) {
|
||||||
CLR_BLINK(OSD_MAIN_BATT_VOLTAGE);
|
CLR_BLINK(OSD_MAIN_BATT_VOLTAGE);
|
||||||
CLR_BLINK(OSD_AVG_CELL_VOLTAGE);
|
CLR_BLINK(OSD_AVG_CELL_VOLTAGE);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue