mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-23 16:25:26 +03:00
Disarm Statistics Pages
Divides disarm stats into pages. Roll stick can be used to go back and forth pages.
This commit is contained in:
parent
02b3cc907d
commit
d50d3b7d45
1 changed files with 45 additions and 26 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue