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 GFORCE_FILTER_TC 0.2
|
||||||
|
|
||||||
#define DELAYED_REFRESH_RESUME_COMMAND (checkStickPosition(THR_HI) || checkStickPosition(PIT_HI))
|
#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 SPLASH_SCREEN_DISPLAY_TIME 4000 // ms
|
||||||
#define ARMED_SCREEN_DISPLAY_TIME 1500 // ms
|
#define ARMED_SCREEN_DISPLAY_TIME 1500 // ms
|
||||||
|
@ -785,7 +787,7 @@ static const char * navigationStateMessage(void)
|
||||||
break;
|
break;
|
||||||
case MW_NAV_STATE_RTH_START:
|
case MW_NAV_STATE_RTH_START:
|
||||||
return OSD_MESSAGE_STR(OSD_MSG_STARTING_RTH);
|
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);
|
return OSD_MESSAGE_STR(OSD_MSG_RTH_CLIMB);
|
||||||
case MW_NAV_STATE_RTH_ENROUTE:
|
case MW_NAV_STATE_RTH_ENROUTE:
|
||||||
return OSD_MESSAGE_STR(OSD_MSG_HEADING_HOME);
|
return OSD_MESSAGE_STR(OSD_MSG_HEADING_HOME);
|
||||||
|
@ -2929,8 +2931,7 @@ static void osdUpdateStats(void)
|
||||||
stats.max_altitude = MAX(stats.max_altitude, osdGetAltitude());
|
stats.max_altitude = MAX(stats.max_altitude, osdGetAltitude());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attention: NTSC screen only has 12 fully visible lines - it is FULL now! */
|
static void osdShowStatsPage1(void)
|
||||||
static void osdShowStats(void)
|
|
||||||
{
|
{
|
||||||
const char * disarmReasonStr[DISARM_REASON_COUNT] = { "UNKNOWN", "TIMEOUT", "STICKS", "SWITCH", "SWITCH", "KILLSW", "FAILSAFE", "NAV SYS" };
|
const char * disarmReasonStr[DISARM_REASON_COUNT] = { "UNKNOWN", "TIMEOUT", "STICKS", "SWITCH", "SWITCH", "KILLSW", "FAILSAFE", "NAV SYS" };
|
||||||
uint8_t top = 1; /* first fully visible line */
|
uint8_t top = 1; /* first fully visible line */
|
||||||
|
@ -2940,8 +2941,8 @@ static void osdShowStats(void)
|
||||||
|
|
||||||
displayBeginTransaction(osdDisplayPort, DISPLAY_TRANSACTION_OPT_RESET_DRAWING);
|
displayBeginTransaction(osdDisplayPort, DISPLAY_TRANSACTION_OPT_RESET_DRAWING);
|
||||||
displayClearScreen(osdDisplayPort);
|
displayClearScreen(osdDisplayPort);
|
||||||
if (osdDisplayIsPAL())
|
|
||||||
displayWrite(osdDisplayPort, statNameX, top++, " --- STATS ---");
|
displayWrite(osdDisplayPort, statNameX, top++, "--- STATS --- 1/2");
|
||||||
|
|
||||||
if (feature(FEATURE_GPS)) {
|
if (feature(FEATURE_GPS)) {
|
||||||
displayWrite(osdDisplayPort, statNameX, top, "MAX SPEED :");
|
displayWrite(osdDisplayPort, statNameX, top, "MAX SPEED :");
|
||||||
|
@ -2962,17 +2963,43 @@ static void osdShowStats(void)
|
||||||
osdFormatAltitudeStr(buff, stats.max_altitude);
|
osdFormatAltitudeStr(buff, stats.max_altitude);
|
||||||
displayWrite(osdDisplayPort, statValuesX, top++, 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);
|
||||||
|
|
||||||
|
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 :");
|
displayWrite(osdDisplayPort, statNameX, top, "MIN BATTERY VOLT :");
|
||||||
osdFormatCentiNumber(buff, stats.min_voltage, 0, osdConfig()->main_voltage_decimals, 0, osdConfig()->main_voltage_decimals + 2);
|
osdFormatCentiNumber(buff, stats.min_voltage, 0, osdConfig()->main_voltage_decimals, 0, osdConfig()->main_voltage_decimals + 2);
|
||||||
strcat(buff, "V");
|
strcat(buff, "V");
|
||||||
osdLeftAlignString(buff);
|
osdLeftAlignString(buff);
|
||||||
displayWrite(osdDisplayPort, statValuesX, top++, 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)) {
|
if (feature(FEATURE_CURRENT_METER)) {
|
||||||
displayWrite(osdDisplayPort, statNameX, top, "MAX CURRENT :");
|
displayWrite(osdDisplayPort, statNameX, top, "MAX CURRENT :");
|
||||||
itoa(stats.max_current, buff, 10);
|
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();
|
const float max_gforce = accGetMeasuredMaxG();
|
||||||
displayWrite(osdDisplayPort, statNameX, top, "MAX G-FORCE :");
|
displayWrite(osdDisplayPort, statNameX, top, "MAX G-FORCE :");
|
||||||
osdFormatCentiNumber(buff, max_gforce * 100, 0, 2, 0, 3);
|
osdFormatCentiNumber(buff, max_gforce * 100, 0, 2, 0, 3);
|
||||||
|
@ -3044,9 +3062,6 @@ static void osdShowStats(void)
|
||||||
displayWrite(osdDisplayPort, statValuesX, top, buff);
|
displayWrite(osdDisplayPort, statValuesX, top, buff);
|
||||||
osdFormatCentiNumber(buff, acc_extremes[Z].max * 100, 0, 2, 0, 3);
|
osdFormatCentiNumber(buff, acc_extremes[Z].max * 100, 0, 2, 0, 3);
|
||||||
displayWrite(osdDisplayPort, statValuesX + 5, top++, buff);
|
displayWrite(osdDisplayPort, statValuesX + 5, top++, buff);
|
||||||
|
|
||||||
displayWrite(osdDisplayPort, statNameX, top, "DISARMED BY :");
|
|
||||||
displayWrite(osdDisplayPort, statValuesX, top++, disarmReasonStr[getDisarmReason()]);
|
|
||||||
displayCommitTransaction(osdDisplayPort);
|
displayCommitTransaction(osdDisplayPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3165,7 +3180,7 @@ static void osdRefresh(timeUs_t currentTimeUs)
|
||||||
#endif
|
#endif
|
||||||
osdSetNextRefreshIn(delay);
|
osdSetNextRefreshIn(delay);
|
||||||
} else {
|
} else {
|
||||||
osdShowStats(); // show statistic
|
osdShowStatsPage1(); // show first page of statistic
|
||||||
osdSetNextRefreshIn(STATS_SCREEN_DISPLAY_TIME);
|
osdSetNextRefreshIn(STATS_SCREEN_DISPLAY_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3184,6 +3199,10 @@ static void osdRefresh(timeUs_t currentTimeUs)
|
||||||
if ((currentTimeUs > resumeRefreshAt) || ((!refreshWaitForResumeCmdRelease) && DELAYED_REFRESH_RESUME_COMMAND)) {
|
if ((currentTimeUs > resumeRefreshAt) || ((!refreshWaitForResumeCmdRelease) && DELAYED_REFRESH_RESUME_COMMAND)) {
|
||||||
displayClearScreen(osdDisplayPort);
|
displayClearScreen(osdDisplayPort);
|
||||||
resumeRefreshAt = 0;
|
resumeRefreshAt = 0;
|
||||||
|
} else if ((currentTimeUs > resumeRefreshAt) || ((!refreshWaitForResumeCmdRelease) && STATS_PAGE1)) {
|
||||||
|
osdShowStatsPage1();
|
||||||
|
} else if ((currentTimeUs > resumeRefreshAt) || ((!refreshWaitForResumeCmdRelease) && STATS_PAGE2)) {
|
||||||
|
osdShowStatsPage2();
|
||||||
} else {
|
} else {
|
||||||
displayHeartbeat(osdDisplayPort);
|
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 (FLIGHT_MODE(NAV_RTH_MODE) || FLIGHT_MODE(NAV_WP_MODE) || navigationIsExecutingAnEmergencyLanding()) {
|
||||||
if (NAV_Status.state == MW_NAV_STATE_WP_ENROUTE) {
|
if (NAV_Status.state == MW_NAV_STATE_WP_ENROUTE) {
|
||||||
// Countdown display for remaining Waypoints
|
// 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;
|
messages[messageCount++] = messageBuf;
|
||||||
} else if (NAV_Status.state == MW_NAV_STATE_HOLD_TIMED) {
|
} else if (NAV_Status.state == MW_NAV_STATE_HOLD_TIMED) {
|
||||||
// WP hold time countdown in seconds
|
// 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);
|
tfp_sprintf(messageBuf, "HOLDING WP FOR %2u S", holdTimeRemaining);
|
||||||
messages[messageCount++] = messageBuf;
|
messages[messageCount++] = messageBuf;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const char *navStateMessage = navigationStateMessage();
|
const char *navStateMessage = navigationStateMessage();
|
||||||
if (navStateMessage) {
|
if (navStateMessage) {
|
||||||
messages[messageCount++] = navStateMessage;
|
messages[messageCount++] = navStateMessage;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue