From d50d3b7d45c977e49ffaa6e33ef4dca83410f211 Mon Sep 17 00:00:00 2001 From: OptimusTi Date: Tue, 9 Feb 2021 13:50:36 -0500 Subject: [PATCH] Disarm Statistics Pages Divides disarm stats into pages. Roll stick can be used to go back and forth pages. --- src/main/io/osd.c | 71 ++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 3612ef00d5..2667c10ca8 100755 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -115,6 +115,8 @@ FILE_COMPILE_FOR_SPEED #define GFORCE_FILTER_TC 0.2 #define DELAYED_REFRESH_RESUME_COMMAND (checkStickPosition(THR_HI) || checkStickPosition(PIT_HI)) +#define STATS_PAGE2 (checkStickPosition(ROL_HI)) +#define STATS_PAGE1 (checkStickPosition(ROL_LO)) #define SPLASH_SCREEN_DISPLAY_TIME 4000 // ms #define ARMED_SCREEN_DISPLAY_TIME 1500 // ms @@ -785,7 +787,7 @@ static const char * navigationStateMessage(void) break; case MW_NAV_STATE_RTH_START: return OSD_MESSAGE_STR(OSD_MSG_STARTING_RTH); - case MW_NAV_STATE_RTH_CLIMB: + case MW_NAV_STATE_RTH_CLIMB: return OSD_MESSAGE_STR(OSD_MSG_RTH_CLIMB); case MW_NAV_STATE_RTH_ENROUTE: return OSD_MESSAGE_STR(OSD_MSG_HEADING_HOME); @@ -2929,8 +2931,7 @@ static void osdUpdateStats(void) stats.max_altitude = MAX(stats.max_altitude, osdGetAltitude()); } -/* Attention: NTSC screen only has 12 fully visible lines - it is FULL now! */ -static void osdShowStats(void) +static void osdShowStatsPage1(void) { const char * disarmReasonStr[DISARM_REASON_COUNT] = { "UNKNOWN", "TIMEOUT", "STICKS", "SWITCH", "SWITCH", "KILLSW", "FAILSAFE", "NAV SYS" }; uint8_t top = 1; /* first fully visible line */ @@ -2940,8 +2941,8 @@ static void osdShowStats(void) displayBeginTransaction(osdDisplayPort, DISPLAY_TRANSACTION_OPT_RESET_DRAWING); displayClearScreen(osdDisplayPort); - if (osdDisplayIsPAL()) - displayWrite(osdDisplayPort, statNameX, top++, " --- STATS ---"); + + displayWrite(osdDisplayPort, statNameX, top++, "--- STATS --- 1/2"); if (feature(FEATURE_GPS)) { displayWrite(osdDisplayPort, statNameX, top, "MAX SPEED :"); @@ -2962,17 +2963,43 @@ static void osdShowStats(void) osdFormatAltitudeStr(buff, stats.max_altitude); displayWrite(osdDisplayPort, statValuesX, top++, buff); + displayWrite(osdDisplayPort, statNameX, top, "MIN RSSI :"); + itoa(stats.min_rssi, buff, 10); + strcat(buff, "%"); + displayWrite(osdDisplayPort, statValuesX, top++, buff); + + displayWrite(osdDisplayPort, statNameX, top, "FLY TIME :"); + uint16_t flySeconds = getFlightTime(); + uint16_t flyMinutes = flySeconds / 60; + flySeconds %= 60; + uint16_t flyHours = flyMinutes / 60; + flyMinutes %= 60; + tfp_sprintf(buff, "%02u:%02u:%02u", flyHours, flyMinutes, flySeconds); + displayWrite(osdDisplayPort, statValuesX, top++, buff); + + displayWrite(osdDisplayPort, statNameX, top, "DISARMED BY :"); + displayWrite(osdDisplayPort, statValuesX, top++, disarmReasonStr[getDisarmReason()]); + displayCommitTransaction(osdDisplayPort); +} + +static void osdShowStatsPage2(void) +{ + uint8_t top = 1; /* first fully visible line */ + const uint8_t statNameX = 1; + const uint8_t statValuesX = 20; + char buff[10]; + + displayBeginTransaction(osdDisplayPort, DISPLAY_TRANSACTION_OPT_RESET_DRAWING); + displayClearScreen(osdDisplayPort); + + displayWrite(osdDisplayPort, statNameX, top++, "--- STATS --- 2/2"); + displayWrite(osdDisplayPort, statNameX, top, "MIN BATTERY VOLT :"); osdFormatCentiNumber(buff, stats.min_voltage, 0, osdConfig()->main_voltage_decimals, 0, osdConfig()->main_voltage_decimals + 2); strcat(buff, "V"); osdLeftAlignString(buff); displayWrite(osdDisplayPort, statValuesX, top++, buff); - displayWrite(osdDisplayPort, statNameX, top, "MIN RSSI :"); - itoa(stats.min_rssi, buff, 10); - strcat(buff, "%"); - displayWrite(osdDisplayPort, statValuesX, top++, buff); - if (feature(FEATURE_CURRENT_METER)) { displayWrite(osdDisplayPort, statNameX, top, "MAX CURRENT :"); itoa(stats.max_current, buff, 10); @@ -3023,15 +3050,6 @@ static void osdShowStats(void) } } - displayWrite(osdDisplayPort, statNameX, top, "FLY TIME :"); - uint16_t flySeconds = getFlightTime(); - uint16_t flyMinutes = flySeconds / 60; - flySeconds %= 60; - uint16_t flyHours = flyMinutes / 60; - flyMinutes %= 60; - tfp_sprintf(buff, "%02u:%02u:%02u", flyHours, flyMinutes, flySeconds); - displayWrite(osdDisplayPort, statValuesX, top++, buff); - const float max_gforce = accGetMeasuredMaxG(); displayWrite(osdDisplayPort, statNameX, top, "MAX G-FORCE :"); osdFormatCentiNumber(buff, max_gforce * 100, 0, 2, 0, 3); @@ -3044,9 +3062,6 @@ static void osdShowStats(void) displayWrite(osdDisplayPort, statValuesX, top, buff); osdFormatCentiNumber(buff, acc_extremes[Z].max * 100, 0, 2, 0, 3); displayWrite(osdDisplayPort, statValuesX + 5, top++, buff); - - displayWrite(osdDisplayPort, statNameX, top, "DISARMED BY :"); - displayWrite(osdDisplayPort, statValuesX, top++, disarmReasonStr[getDisarmReason()]); displayCommitTransaction(osdDisplayPort); } @@ -3165,7 +3180,7 @@ static void osdRefresh(timeUs_t currentTimeUs) #endif osdSetNextRefreshIn(delay); } else { - osdShowStats(); // show statistic + osdShowStatsPage1(); // show first page of statistic osdSetNextRefreshIn(STATS_SCREEN_DISPLAY_TIME); } @@ -3184,6 +3199,10 @@ static void osdRefresh(timeUs_t currentTimeUs) if ((currentTimeUs > resumeRefreshAt) || ((!refreshWaitForResumeCmdRelease) && DELAYED_REFRESH_RESUME_COMMAND)) { displayClearScreen(osdDisplayPort); resumeRefreshAt = 0; + } else if ((currentTimeUs > resumeRefreshAt) || ((!refreshWaitForResumeCmdRelease) && STATS_PAGE1)) { + osdShowStatsPage1(); + } else if ((currentTimeUs > resumeRefreshAt) || ((!refreshWaitForResumeCmdRelease) && STATS_PAGE2)) { + osdShowStatsPage2(); } else { displayHeartbeat(osdDisplayPort); } @@ -3381,7 +3400,7 @@ textAttributes_t osdGetSystemMessage(char *buff, size_t buff_size, bool isCenter if (FLIGHT_MODE(NAV_RTH_MODE) || FLIGHT_MODE(NAV_WP_MODE) || navigationIsExecutingAnEmergencyLanding()) { if (NAV_Status.state == MW_NAV_STATE_WP_ENROUTE) { // Countdown display for remaining Waypoints - tfp_sprintf(messageBuf, "TO WP %u/%u", posControl.activeWaypointIndex + 1, posControl.waypointCount); + tfp_sprintf(messageBuf, "TO WP %u/%u", posControl.activeWaypointIndex + 1, posControl.waypointCount); messages[messageCount++] = messageBuf; } else if (NAV_Status.state == MW_NAV_STATE_HOLD_TIMED) { // WP hold time countdown in seconds @@ -3391,8 +3410,8 @@ textAttributes_t osdGetSystemMessage(char *buff, size_t buff_size, bool isCenter tfp_sprintf(messageBuf, "HOLDING WP FOR %2u S", holdTimeRemaining); messages[messageCount++] = messageBuf; } - } else { - const char *navStateMessage = navigationStateMessage(); + } else { + const char *navStateMessage = navigationStateMessage(); if (navStateMessage) { messages[messageCount++] = navStateMessage; }