1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 16:55:36 +03:00

OSD spec prearm screen if defined USE_SPEC_PREARM_SCREEN (#13210)

* OSD spec prearm screen if defined USE_SPEC_PREARM_SCREEN

* osd spec prearm PR suggestions

* OSD_SPEC karatebrot logic suggestion

* Update src/main/osd/osd.c

Co-authored-by: Jan Post <Rm2k-Freak@web.de>

---------

Co-authored-by: Jan Post <Rm2k-Freak@web.de>
This commit is contained in:
Ivan Efimov 2023-12-09 18:50:31 -06:00 committed by GitHub
parent a92d87ebca
commit 31c5beaf78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 83 additions and 4 deletions

View file

@ -1381,6 +1381,9 @@ const clivalue_t valueTable[] = {
#ifdef USE_QUICK_OSD_MENU
{ "osd_use_quick_menu", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, osd_use_quick_menu) },
#endif // USE_QUICK_OSD_MENU
#ifdef USE_SPEC_PREARM_SCREEN
{ "osd_show_spec_prearm", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, osd_show_spec_prearm) },
#endif // USE_SPEC_PREARM_SCREEN
{ "osd_tim1", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, timers[OSD_TIMER_1]) },
{ "osd_tim2", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, timers[OSD_TIMER_2]) },

View file

@ -295,6 +295,11 @@ bool isMotorProtocolDshot(void)
return motorProtocolDshot;
}
bool isMotorProtocolBidirDshot(void)
{
return isMotorProtocolDshot() && motorConfig()->dev.useDshotTelemetry;
}
void motorDevInit(const motorDevConfig_t *motorDevConfig, uint16_t idlePulse, uint8_t motorCount)
{
memset(motors, 0, sizeof(motors));

View file

@ -89,6 +89,7 @@ unsigned motorDeviceCount(void);
motorVTable_t *motorGetVTable(void);
bool checkMotorProtocolEnabled(const motorDevConfig_t *motorConfig, bool *protocolIsDshot);
bool isMotorProtocolDshot(void);
bool isMotorProtocolBidirDshot(void);
bool isMotorProtocolEnabled(void);
void motorDisable(void);

View file

@ -427,6 +427,9 @@ void pgResetFn_osdConfig(osdConfig_t *osdConfig)
#ifdef USE_QUICK_OSD_MENU
osdConfig->osd_use_quick_menu = true;
#endif // USE_QUICK_OSD_MENU
#ifdef USE_SPEC_PREARM_SCREEN
osdConfig->osd_show_spec_prearm = true;
#endif // USE_SPEC_PREARM_SCREEN
}
void pgResetFn_osdElementConfig(osdElementConfig_t *osdElementConfig)
@ -1577,6 +1580,9 @@ void osdUpdate(timeUs_t currentTimeUs)
// There are more elements to draw
break;
}
#ifdef USE_SPEC_PREARM_SCREEN
osdDrawSpec(osdDisplayPort);
#endif // USE_SPEC_PREARM_SCREEN
osdElementGroup = 0;

View file

@ -340,17 +340,20 @@ typedef struct osdConfig_s {
uint16_t framerate_hz;
uint8_t cms_background_type; // For supporting devices, determines whether the CMS background is transparent or opaque
uint8_t stat_show_cell_value;
#ifdef USE_CRAFTNAME_MSGS
#ifdef USE_CRAFTNAME_MSGS
uint8_t osd_craftname_msgs; // Insert LQ/RSSI-dBm and warnings into CraftName
#endif //USE_CRAFTNAME_MSGS
#endif //USE_CRAFTNAME_MSGS
uint8_t aux_channel;
uint16_t aux_scale;
uint8_t aux_symbol;
uint8_t canvas_cols; // Canvas dimensions for HD display
uint8_t canvas_rows;
#ifdef USE_QUICK_OSD_MENU
#ifdef USE_QUICK_OSD_MENU
uint8_t osd_use_quick_menu; // use QUICK menu YES/NO
#endif // USE_QUICK_OSD_MENU
#endif // USE_QUICK_OSD_MENU
#ifdef USE_SPEC_PREARM_SCREEN
uint8_t osd_show_spec_prearm;
#endif // USE_SPEC_PREARM_SCREEN
} osdConfig_t;
PG_DECLARE(osdConfig_t, osdConfig);

View file

@ -119,6 +119,8 @@
#include "build/build_config.h"
#include "build/debug.h"
#include "cli/settings.h"
#include "common/axis.h"
#include "common/maths.h"
#include "common/printf.h"
@ -2107,6 +2109,62 @@ bool osdDrawNextActiveElement(displayPort_t *osdDisplayPort, timeUs_t currentTim
return retval;
}
#ifdef USE_SPEC_PREARM_SCREEN
void osdDrawSpec(displayPort_t *osdDisplayPort)
{
if (!ARMING_FLAG(ARMED) && osdConfig()->osd_show_spec_prearm) {
const uint8_t midRow = osdDisplayPort->rows / 2;
const uint8_t midCol = osdDisplayPort->cols / 2;
char buff[OSD_ELEMENT_BUFFER_LENGTH] = "";
memset(buff,0,strlen(buff));
int len = 0;
int currentRow = midRow - 3;
#ifdef USE_RPM_LIMIT
const bool rpmLimitActive = mixerConfig()->rpm_limit > 0 && isMotorProtocolBidirDshot();
if (rpmLimitActive) {
len = tfp_sprintf(buff, "RPM LIMIT ON %d", mixerConfig()->rpm_limit_value);
} else {
len = tfp_sprintf(buff, "%s", "RPM LIMIT OFF");
}
displayWrite(osdDisplayPort, midCol - len/2, currentRow++, DISPLAYPORT_SEVERITY_NORMAL, buff);
if (rpmLimitActive) {
memset(buff,0,strlen(buff));
len = tfp_sprintf(buff, "KV %d POLES %d", motorConfig()->kv, motorConfig()->motorPoleCount);
displayWrite(osdDisplayPort, midCol - len/2, currentRow++, DISPLAYPORT_SEVERITY_NORMAL, buff);
memset(buff,0,strlen(buff));
len = tfp_sprintf(buff, "%d %d %d", mixerConfig()->rpm_limit_p, mixerConfig()->rpm_limit_i, mixerConfig()->rpm_limit_d);
displayWrite(osdDisplayPort, midCol - len/2, currentRow++, DISPLAYPORT_SEVERITY_NORMAL, buff);
} else
#endif // #USE_RPM_LIMIT
{
memset(buff,0,strlen(buff));
len = tfp_sprintf(buff, "THR LIMIT %s", lookupTableThrottleLimitType[currentControlRateProfile->throttle_limit_type]);
if (currentControlRateProfile->throttle_limit_type != THROTTLE_LIMIT_TYPE_OFF) {
len = tfp_sprintf(buff, "%s %d", buff, currentControlRateProfile->throttle_limit_percent);
}
displayWrite(osdDisplayPort, midCol - len/2, currentRow++, DISPLAYPORT_SEVERITY_NORMAL, buff);
}
memset(buff,0,strlen(buff));
len = tfp_sprintf(buff, "MOTOR LIMIT %d", currentPidProfile->motor_output_limit);
displayWrite(osdDisplayPort, midCol - len/2, currentRow++, DISPLAYPORT_SEVERITY_NORMAL, buff);
memset(buff,0,strlen(buff));
const float batteryVoltage = getBatteryVoltage() / 100.0f;
len = osdPrintFloat(buff, osdGetBatterySymbol(getBatteryAverageCellVoltage()), batteryVoltage, "", 2, true, SYM_VOLT);
displayWrite(osdDisplayPort, midCol - len/2, currentRow++, DISPLAYPORT_SEVERITY_NORMAL, buff);
len = strlen(FC_VERSION_STRING);
displayWrite(osdDisplayPort, midCol - len/2, currentRow++, DISPLAYPORT_SEVERITY_NORMAL, FC_VERSION_STRING);
}
}
#endif // USE_SPEC_PREARM_SCREEN
void osdDrawActiveElementsBackground(displayPort_t *osdDisplayPort)
{
if (backgroundLayerSupported) {

View file

@ -64,3 +64,6 @@ void osdSyncBlink();
void osdResetAlarms(void);
void osdUpdateAlarms(void);
bool osdElementsNeedAccelerometer(void);
#ifdef USE_SPEC_PREARM_SCREEN
void osdDrawSpec(displayPort_t *osdDisplayPort);
#endif // USE_SPEC_PREARM_SCREEN