1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-23 16:25:31 +03:00

Fixed OSD warnings overlap to the right.

This commit is contained in:
mikeller 2018-02-23 00:46:16 +13:00 committed by Michael Keller
parent 9d7c8fbd46
commit c89f87018b
3 changed files with 32 additions and 11 deletions

View file

@ -29,10 +29,26 @@ uint16_t flightModeFlags = 0;
static uint32_t enabledSensors = 0; static uint32_t enabledSensors = 0;
// Must be shorter than OSD_WARNINGS_MAX_SIZE (11) to be displayed fully in OSD
const char *armingDisableFlagNames[]= { const char *armingDisableFlagNames[]= {
"NOGYRO", "FAILSAFE", "RXLOSS", "BADRX", "BOXFAILSAFE", "NOGYRO",
"RUNAWAY", "THROTTLE", "ANGLE", "BOOTGRACE", "NOPREARM", "LOAD", "FAILSAFE",
"CALIB", "CLI", "CMS", "OSD", "BST", "MSP", "ARMSWITCH" "RXLOSS",
"BADRX",
"BOXFAILSAFE",
"RUNAWAY",
"THROTTLE",
"ANGLE",
"BOOTGRACE",
"NOPREARM",
"LOAD",
"CALIB",
"CLI",
"CMS",
"OSD",
"BST",
"MSP",
"ARMSWITCH"
}; };
static armingDisableFlags_e armingDisableFlags = 0; static armingDisableFlags_e armingDisableFlags = 0;

View file

@ -645,19 +645,23 @@ static bool osdDrawSingleElement(uint8_t item)
case OSD_WARNINGS: case OSD_WARNINGS:
{ {
#define OSD_WARNINGS_MAX_SIZE 11
#define OSD_FORMAT_MESSAGE_BUFFER_SIZE (OSD_WARNINGS_MAX_SIZE + 1)
const uint16_t enabledWarnings = osdConfig()->enabledWarnings; const uint16_t enabledWarnings = osdConfig()->enabledWarnings;
const batteryState_e batteryState = getBatteryState(); const batteryState_e batteryState = getBatteryState();
if (enabledWarnings & OSD_WARNING_BATTERY_CRITICAL && batteryState == BATTERY_CRITICAL) { if (enabledWarnings & OSD_WARNING_BATTERY_CRITICAL && batteryState == BATTERY_CRITICAL) {
osdFormatMessage(buff, sizeof(buff), " LAND NOW"); osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, " LAND NOW");
break; break;
} }
// Warn when in flip over after crash mode // Warn when in flip over after crash mode
if ((enabledWarnings & OSD_WARNING_CRASH_FLIP) if ((enabledWarnings & OSD_WARNING_CRASH_FLIP)
&& (isFlipOverAfterCrashMode())) { && (isFlipOverAfterCrashMode())) {
osdFormatMessage(buff, sizeof(buff), "CRASH FLIP"); osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, "CRASH FLIP");
break; break;
} }
@ -666,7 +670,7 @@ static bool osdDrawSingleElement(uint8_t item)
const armingDisableFlags_e flags = getArmingDisableFlags(); const armingDisableFlags_e flags = getArmingDisableFlags();
for (int i = 0; i < ARMING_DISABLE_FLAGS_COUNT; i++) { for (int i = 0; i < ARMING_DISABLE_FLAGS_COUNT; i++) {
if (flags & (1 << i)) { if (flags & (1 << i)) {
osdFormatMessage(buff, sizeof(buff), armingDisableFlagNames[i]); osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, armingDisableFlagNames[i]);
break; break;
} }
} }
@ -674,24 +678,25 @@ static bool osdDrawSingleElement(uint8_t item)
} }
if (enabledWarnings & OSD_WARNING_BATTERY_WARNING && batteryState == BATTERY_WARNING) { if (enabledWarnings & OSD_WARNING_BATTERY_WARNING && batteryState == BATTERY_WARNING) {
osdFormatMessage(buff, sizeof(buff), "LOW BATTERY"); osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, "LOW BATTERY");
break; break;
} }
// Show warning if battery is not fresh // Show warning if battery is not fresh
if (enabledWarnings & OSD_WARNING_BATTERY_NOT_FULL && !ARMING_FLAG(WAS_EVER_ARMED) && (getBatteryState() == BATTERY_OK) if (enabledWarnings & OSD_WARNING_BATTERY_NOT_FULL && !ARMING_FLAG(WAS_EVER_ARMED) && (getBatteryState() == BATTERY_OK)
&& getBatteryAverageCellVoltage() < batteryConfig()->vbatfullcellvoltage) { && getBatteryAverageCellVoltage() < batteryConfig()->vbatfullcellvoltage) {
osdFormatMessage(buff, sizeof(buff), "BATT NOT FULL"); osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, "BATT < FULL");
break; break;
} }
// Visual beeper // Visual beeper
if (enabledWarnings & OSD_WARNING_VISUAL_BEEPER && showVisualBeeper) { if (enabledWarnings & OSD_WARNING_VISUAL_BEEPER && showVisualBeeper) {
osdFormatMessage(buff, sizeof(buff), " * * * *"); osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, " * * * *");
break; break;
} }
return true; osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, NULL);
break;
} }
case OSD_AVG_CELL_VOLTAGE: case OSD_AVG_CELL_VOLTAGE:

View file

@ -851,7 +851,7 @@ TEST(OsdTest, TestElementWarningsBattery)
osdRefresh(simulationTime); osdRefresh(simulationTime);
// then // then
displayPortTestBufferSubstring(9, 10, "BATT NOT FULL"); displayPortTestBufferSubstring(9, 10, "BATT < FULL");
// given // given
// full battery // full battery