1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-25 01:05:27 +03:00

Fix handling of attribute byte (#12701)

This commit is contained in:
Steve Evans 2023-04-20 23:15:04 +01:00 committed by GitHub
parent 3167bf756c
commit 445758f3ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 101 additions and 101 deletions

View file

@ -239,7 +239,7 @@ enum {UP, DOWN};
static int osdDisplayWrite(osdElementParms_t *element, uint8_t x, uint8_t y, uint8_t attr, const char *s)
{
if (IS_BLINK(element->item)) {
attr |= DISPLAYPORT_ATTR_BLINK;
attr |= DISPLAYPORT_BLINK;
}
return displayWrite(element->osdDisplayPort, x, y, attr, s);
@ -287,7 +287,7 @@ static void renderOsdEscRpmOrFreq(getEscRpmOrFreqFnPtr escFnPtr, osdElementParms
const int rpm = MIN((*escFnPtr)(i),99999);
const int len = tfp_sprintf(rpmStr, "%d", rpm);
rpmStr[len] = '\0';
osdDisplayWrite(element, x, y + i, DISPLAYPORT_ATTR_NORMAL, rpmStr);
osdDisplayWrite(element, x, y + i, DISPLAYPORT_SEVERITY_NORMAL, rpmStr);
}
element->drawElement = false;
}
@ -666,7 +666,7 @@ static void osdElementAltitude(osdElementParms_t *element)
int32_t alt = osdGetMetersToSelectedUnit(getEstimatedAltitudeCm()) / 100;
if ((alt >= osdConfig()->alt_alarm) && ARMING_FLAG(ARMED)) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
if (haveBaro || haveGps) {
@ -713,7 +713,7 @@ static void osdElementArtificialHorizon(osdElementParms_t *element)
for (int x = -4; x <= 4; x++) {
const int y = ((-rollAngle * x) / 64) - pitchAngle;
if (y >= 0 && y <= 81) {
osdDisplayWriteChar(element, element->elemPosX + x, element->elemPosY + (y / AH_SYMBOL_COUNT), DISPLAYPORT_ATTR_NORMAL, (SYM_AH_BAR9_0 + (y % AH_SYMBOL_COUNT)));
osdDisplayWriteChar(element, element->elemPosX + x, element->elemPosY + (y / AH_SYMBOL_COUNT), DISPLAYPORT_SEVERITY_NORMAL, (SYM_AH_BAR9_0 + (y % AH_SYMBOL_COUNT)));
}
}
@ -743,7 +743,7 @@ static void osdElementUpDownReference(osdElementParms_t *element)
int posX = element->elemPosX + lrintf(scaleRangef(psiB, -M_PIf / 4, M_PIf / 4, -14, 14));
int posY = element->elemPosY + lrintf(scaleRangef(thetaB, -M_PIf / 4, M_PIf / 4, -8, 8));
osdDisplayWrite(element, posX, posY, DISPLAYPORT_ATTR_NORMAL, symbol[direction]);
osdDisplayWrite(element, posX, posY, DISPLAYPORT_SEVERITY_NORMAL, symbol[direction]);
}
element->drawElement = false; // element already drawn
}
@ -756,10 +756,10 @@ static void osdElementAverageCellVoltage(osdElementParms_t *element)
switch (batteryState) {
case BATTERY_WARNING:
element->attr = DISPLAYPORT_ATTR_WARNING;
element->attr = DISPLAYPORT_SEVERITY_WARNING;
break;
case BATTERY_CRITICAL:
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
break;
default:
break;
@ -795,12 +795,12 @@ static void osdBackgroundCameraFrame(osdElementParms_t *element)
element->buff[width - 1] = SYM_STICK_OVERLAY_CENTER;
element->buff[width] = 0; // string terminator
osdDisplayWrite(element, xpos, ypos, DISPLAYPORT_ATTR_NORMAL, element->buff);
osdDisplayWrite(element, xpos, ypos, DISPLAYPORT_SEVERITY_NORMAL, element->buff);
for (int i = 1; i < (height - 1); i++) {
osdDisplayWriteChar(element, xpos, ypos + i, DISPLAYPORT_ATTR_NORMAL, SYM_STICK_OVERLAY_VERTICAL);
osdDisplayWriteChar(element, xpos + width - 1, ypos + i, DISPLAYPORT_ATTR_NORMAL, SYM_STICK_OVERLAY_VERTICAL);
osdDisplayWriteChar(element, xpos, ypos + i, DISPLAYPORT_SEVERITY_NORMAL, SYM_STICK_OVERLAY_VERTICAL);
osdDisplayWriteChar(element, xpos + width - 1, ypos + i, DISPLAYPORT_SEVERITY_NORMAL, SYM_STICK_OVERLAY_VERTICAL);
}
osdDisplayWrite(element, xpos, ypos + height - 1, DISPLAYPORT_ATTR_NORMAL, element->buff);
osdDisplayWrite(element, xpos, ypos + height - 1, DISPLAYPORT_SEVERITY_NORMAL, element->buff);
element->drawElement = false; // element already drawn
}
@ -1080,15 +1080,15 @@ static void osdElementGpsCoordinate(osdElementParms_t *element)
static void osdElementGpsSats(osdElementParms_t *element)
{
if ((STATE(GPS_FIX) == 0) || (gpsSol.numSat < GPS_MIN_SAT_COUNT) ) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
#ifdef USE_GPS_RESCUE
else if ((gpsSol.numSat < gpsRescueConfig()->minSats) && gpsRescueIsConfigured()) {
element->attr = DISPLAYPORT_ATTR_WARNING;
element->attr = DISPLAYPORT_SEVERITY_WARNING;
}
#endif
else {
element->attr = DISPLAYPORT_ATTR_INFO;
element->attr = DISPLAYPORT_SEVERITY_INFO;
}
if (!gpsIsHealthy()) {
@ -1135,13 +1135,13 @@ static void osdBackgroundHorizonSidebars(osdElementParms_t *element)
const int8_t hudwidth = AH_SIDEBAR_WIDTH_POS;
const int8_t hudheight = AH_SIDEBAR_HEIGHT_POS;
for (int y = -hudheight; y <= hudheight; y++) {
osdDisplayWriteChar(element, element->elemPosX - hudwidth, element->elemPosY + y, DISPLAYPORT_ATTR_NORMAL, SYM_AH_DECORATION);
osdDisplayWriteChar(element, element->elemPosX + hudwidth, element->elemPosY + y, DISPLAYPORT_ATTR_NORMAL, SYM_AH_DECORATION);
osdDisplayWriteChar(element, element->elemPosX - hudwidth, element->elemPosY + y, DISPLAYPORT_SEVERITY_NORMAL, SYM_AH_DECORATION);
osdDisplayWriteChar(element, element->elemPosX + hudwidth, element->elemPosY + y, DISPLAYPORT_SEVERITY_NORMAL, SYM_AH_DECORATION);
}
// AH level indicators
osdDisplayWriteChar(element, element->elemPosX - hudwidth + 1, element->elemPosY, DISPLAYPORT_ATTR_NORMAL, SYM_AH_LEFT);
osdDisplayWriteChar(element, element->elemPosX + hudwidth - 1, element->elemPosY, DISPLAYPORT_ATTR_NORMAL, SYM_AH_RIGHT);
osdDisplayWriteChar(element, element->elemPosX - hudwidth + 1, element->elemPosY, DISPLAYPORT_SEVERITY_NORMAL, SYM_AH_LEFT);
osdDisplayWriteChar(element, element->elemPosX + hudwidth - 1, element->elemPosY, DISPLAYPORT_SEVERITY_NORMAL, SYM_AH_RIGHT);
element->drawElement = false; // element already drawn
}
@ -1152,7 +1152,7 @@ static void osdElementLinkQuality(osdElementParms_t *element)
uint16_t osdLinkQuality = 0;
if (rxGetLinkQualityPercent() < osdConfig()->link_quality_alarm) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
if (linkQualitySource == LQ_SOURCE_RX_PROTOCOL_CRSF) { // 0-99
@ -1209,7 +1209,7 @@ static void osdElementMahDrawn(osdElementParms_t *element)
const int mAhDrawn = getMAhDrawn();
if (mAhDrawn >= osdConfig()->cap_alarm) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
tfp_sprintf(element->buff, "%4d%c", mAhDrawn, SYM_MAH);
@ -1221,7 +1221,7 @@ static void osdElementWattHoursDrawn(osdElementParms_t *element)
const float wattHoursDrawn = getWhDrawn();
if (mAhDrawn >= osdConfig()->cap_alarm) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
if (wattHoursDrawn < 1.0f) {
@ -1243,7 +1243,7 @@ static void osdElementMainBatteryUsage(osdElementParms_t *element)
int displayBasis = usedCapacity;
if (mAhDrawn >= osdConfig()->cap_alarm) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
switch (element->type) {
@ -1298,10 +1298,10 @@ static void osdElementMainBatteryVoltage(osdElementParms_t *element)
switch (batteryState) {
case BATTERY_WARNING:
element->attr = DISPLAYPORT_ATTR_WARNING;
element->attr = DISPLAYPORT_SEVERITY_WARNING;
break;
case BATTERY_CRITICAL:
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
break;
default:
break;
@ -1402,7 +1402,7 @@ static void osdElementRcChannels(osdElementParms_t *element)
// Decimal notation can be added when tfp_sprintf supports float among fancy options.
char fmtbuf[6];
tfp_sprintf(fmtbuf, "%5d", data);
osdDisplayWrite(element, xpos, ypos + i, DISPLAYPORT_ATTR_NORMAL, fmtbuf);
osdDisplayWrite(element, xpos, ypos + i, DISPLAYPORT_SEVERITY_NORMAL, fmtbuf);
}
}
@ -1414,7 +1414,7 @@ static void osdElementRemainingTimeEstimate(osdElementParms_t *element)
const int mAhDrawn = getMAhDrawn();
if (mAhDrawn >= osdConfig()->cap_alarm) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
if (mAhDrawn <= 0.1 * osdConfig()->cap_alarm) { // also handles the mAhDrawn == 0 condition
@ -1435,7 +1435,7 @@ static void osdElementRssi(osdElementParms_t *element)
}
if (getRssiPercent() < osdConfig()->rssi_alarm) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
tfp_sprintf(element->buff, "%c%2d", SYM_RSSI, osdRssi);
@ -1481,11 +1481,11 @@ static void osdBackgroundStickOverlay(osdElementParms_t *element)
for (unsigned y = 0; y < OSD_STICK_OVERLAY_HEIGHT; y++) {
// draw the axes, vertical and horizonal
if ((x == ((OSD_STICK_OVERLAY_WIDTH - 1) / 2)) && (y == (OSD_STICK_OVERLAY_HEIGHT - 1) / 2)) {
osdDisplayWriteChar(element, xpos + x, ypos + y, DISPLAYPORT_ATTR_NORMAL, SYM_STICK_OVERLAY_CENTER);
osdDisplayWriteChar(element, xpos + x, ypos + y, DISPLAYPORT_SEVERITY_NORMAL, SYM_STICK_OVERLAY_CENTER);
} else if (x == ((OSD_STICK_OVERLAY_WIDTH - 1) / 2)) {
osdDisplayWriteChar(element, xpos + x, ypos + y, DISPLAYPORT_ATTR_NORMAL, SYM_STICK_OVERLAY_VERTICAL);
osdDisplayWriteChar(element, xpos + x, ypos + y, DISPLAYPORT_SEVERITY_NORMAL, SYM_STICK_OVERLAY_VERTICAL);
} else if (y == ((OSD_STICK_OVERLAY_HEIGHT - 1) / 2)) {
osdDisplayWriteChar(element, xpos + x, ypos + y, DISPLAYPORT_ATTR_NORMAL, SYM_STICK_OVERLAY_HORIZONTAL);
osdDisplayWriteChar(element, xpos + x, ypos + y, DISPLAYPORT_SEVERITY_NORMAL, SYM_STICK_OVERLAY_HORIZONTAL);
}
}
}
@ -1513,7 +1513,7 @@ static void osdElementStickOverlay(osdElementParms_t *element)
const uint8_t cursorY = OSD_STICK_OVERLAY_VERTICAL_POSITIONS - 1 - scaleRange(constrain(rcData[vertical_channel], PWM_RANGE_MIN, PWM_RANGE_MAX - 1), PWM_RANGE_MIN, PWM_RANGE_MAX, 0, OSD_STICK_OVERLAY_VERTICAL_POSITIONS);
const char cursor = SYM_STICK_OVERLAY_SPRITE_HIGH + (cursorY % OSD_STICK_OVERLAY_SPRITE_HEIGHT);
osdDisplayWriteChar(element, xpos + cursorX, ypos + cursorY / OSD_STICK_OVERLAY_SPRITE_HEIGHT, DISPLAYPORT_ATTR_NORMAL, cursor);
osdDisplayWriteChar(element, xpos + cursorX, ypos + cursorY / OSD_STICK_OVERLAY_SPRITE_HEIGHT, DISPLAYPORT_SEVERITY_NORMAL, cursor);
element->drawElement = false; // element already drawn
}
@ -1531,7 +1531,7 @@ static void osdElementTimer(osdElementParms_t *element)
const timeUs_t time = osdGetTimerValue(OSD_TIMER_SRC(timer));
const timeUs_t alarmTime = OSD_TIMER_ALARM(timer) * 60000000; // convert from minutes to us
if (alarmTime != 0 && time >= alarmTime) {
element->attr = DISPLAYPORT_ATTR_CRITICAL;
element->attr = DISPLAYPORT_SEVERITY_CRITICAL;
}
}
@ -1959,7 +1959,7 @@ static void osdDrawSingleElement(displayPort_t *osdDisplayPort, uint8_t item)
element.buff = (char *)&buff;
element.osdDisplayPort = osdDisplayPort;
element.drawElement = true;
element.attr = DISPLAYPORT_ATTR_NORMAL;
element.attr = DISPLAYPORT_SEVERITY_NORMAL;
// Call the element drawing function
if ((item >= OSD_SYS_GOGGLE_VOLTAGE) && (item < OSD_ITEM_COUNT)) {
@ -1995,7 +1995,7 @@ static void osdDrawSingleElementBackground(displayPort_t *osdDisplayPort, uint8_
// Call the element background drawing function
osdElementBackgroundFunction[item](&element);
if (element.drawElement) {
osdDisplayWrite(&element, elemPosX, elemPosY, DISPLAYPORT_ATTR_NORMAL, buff);
osdDisplayWrite(&element, elemPosX, elemPosY, DISPLAYPORT_SEVERITY_NORMAL, buff);
}
}