mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 08:15:30 +03:00
Merge branch 'master' into development
This commit is contained in:
commit
09d16bd0cb
28 changed files with 482 additions and 145 deletions
|
@ -81,7 +81,7 @@ uint16_t refreshTimeout = 0;
|
|||
|
||||
#define VISIBLE_FLAG 0x0800
|
||||
#define BLINK_FLAG 0x0400
|
||||
uint8_t blinkState = 1;
|
||||
bool blinkState = true;
|
||||
|
||||
#define OSD_POS(x,y) (x | (y << 5))
|
||||
#define OSD_X(x) (x & 0x001F)
|
||||
|
@ -141,7 +141,9 @@ bool inMenu = false;
|
|||
|
||||
typedef void (* OSDMenuFuncPtr)(void *data);
|
||||
|
||||
void osdUpdate(uint32_t currentTime);
|
||||
void osdUpdate(uint8_t guiKey);
|
||||
char osdGetAltitudeSymbol();
|
||||
int32_t osdGetAltitude(int32_t alt);
|
||||
void osdOpenMenu(void);
|
||||
void osdExitMenu(void * ptr);
|
||||
void osdMenuBack(void);
|
||||
|
@ -451,7 +453,7 @@ static OSD_FLOAT_t entryRcExpo = {&rateProfile.rcExpo8, 0, 100, 1, 10};
|
|||
static OSD_FLOAT_t entryRcExpoYaw = {&rateProfile.rcYawExpo8, 0, 100, 1, 10};
|
||||
static OSD_FLOAT_t extryTpaEntry = {&rateProfile.dynThrPID, 0, 70, 1, 10};
|
||||
static OSD_UINT16_t entryTpaBreak = {&rateProfile.tpa_breakpoint, 1100, 1800, 10};
|
||||
static OSD_FLOAT_t entryPSetpoint = {&masterConfig.profile[0].pidProfile.ptermSRateWeight, 0, 100, 1, 10};
|
||||
static OSD_FLOAT_t entryPSetpoint = {&masterConfig.profile[0].pidProfile.setpointRelaxRatio, 0, 100, 1, 10};
|
||||
static OSD_FLOAT_t entryDSetpoint = {&masterConfig.profile[0].pidProfile.dtermSetpointWeight, 0, 255, 1, 10};
|
||||
|
||||
OSD_Entry menuRateExpo[] =
|
||||
|
@ -625,10 +627,36 @@ void osdInit(void)
|
|||
refreshTimeout = 4 * REFRESH_1S;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the correct altitude symbol for the current unit system
|
||||
*/
|
||||
char osdGetAltitudeSymbol()
|
||||
{
|
||||
switch (masterConfig.osdProfile.units) {
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
return 0xF;
|
||||
default:
|
||||
return 0xC;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts altitude based on the current unit system.
|
||||
* @param alt Raw altitude (i.e. as taken from BaroAlt)
|
||||
*/
|
||||
int32_t osdGetAltitude(int32_t alt)
|
||||
{
|
||||
switch (masterConfig.osdProfile.units) {
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
return (alt * 328) / 100; // Convert to feet / 100
|
||||
default:
|
||||
return alt; // Already in metre / 100
|
||||
}
|
||||
}
|
||||
|
||||
void osdUpdateAlarms(void)
|
||||
{
|
||||
int32_t alt = BaroAlt / 100;
|
||||
|
||||
int32_t alt = osdGetAltitude(BaroAlt) / 100;
|
||||
statRssi = rssi * 100 / 1024;
|
||||
|
||||
if (statRssi < OSD_cfg.rssi_alarm)
|
||||
|
@ -656,10 +684,6 @@ void osdUpdateAlarms(void)
|
|||
else
|
||||
OSD_cfg.item_pos[OSD_MAH_DRAWN] &= ~BLINK_FLAG;
|
||||
|
||||
if (masterConfig.osdProfile.units == OSD_UNIT_IMPERIAL) {
|
||||
alt = (alt * 328) / 100; // Convert to feet
|
||||
}
|
||||
|
||||
if (alt >= OSD_cfg.alt_alarm)
|
||||
OSD_cfg.item_pos[OSD_ALTITUDE] |= BLINK_FLAG;
|
||||
else
|
||||
|
@ -1045,6 +1069,7 @@ void osdResetStats(void)
|
|||
stats.min_voltage = 500;
|
||||
stats.max_current = 0;
|
||||
stats.min_rssi = 99;
|
||||
stats.max_altitude = 0;
|
||||
}
|
||||
|
||||
void osdUpdateStats(void)
|
||||
|
@ -1064,6 +1089,9 @@ void osdUpdateStats(void)
|
|||
|
||||
if (stats.min_rssi > statRssi)
|
||||
stats.min_rssi = statRssi;
|
||||
|
||||
if (stats.max_altitude < BaroAlt)
|
||||
stats.max_altitude = BaroAlt;
|
||||
}
|
||||
|
||||
void osdShowStats(void)
|
||||
|
@ -1100,6 +1128,12 @@ void osdShowStats(void)
|
|||
strcat(buff, "\x07");
|
||||
max7456Write(22, top++, buff);
|
||||
}
|
||||
|
||||
max7456Write(2, top, "MAX ALTITUDE :");
|
||||
int32_t alt = osdGetAltitude(stats.max_altitude);
|
||||
sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), osdGetAltitudeSymbol());
|
||||
max7456Write(22, top++, buff);
|
||||
|
||||
refreshTimeout = 60 * REFRESH_1S;
|
||||
}
|
||||
|
||||
|
@ -1135,7 +1169,7 @@ void updateOsd(uint32_t currentTime)
|
|||
void osdUpdate(uint32_t currentTime)
|
||||
{
|
||||
static uint8_t rcDelay = BUTTON_TIME;
|
||||
static uint8_t last_sec = 0;
|
||||
static uint8_t lastSec = 0;
|
||||
uint8_t key = 0, sec;
|
||||
|
||||
// detect enter to menu
|
||||
|
@ -1156,9 +1190,9 @@ void osdUpdate(uint32_t currentTime)
|
|||
|
||||
sec = currentTime / 1000000;
|
||||
|
||||
if (ARMING_FLAG(ARMED) && sec != last_sec) {
|
||||
if (ARMING_FLAG(ARMED) && sec != lastSec) {
|
||||
flyTime++;
|
||||
last_sec = sec;
|
||||
lastSec = sec;
|
||||
}
|
||||
|
||||
if (refreshTimeout) {
|
||||
|
@ -1407,7 +1441,10 @@ void osdDrawElements(void)
|
|||
if (currentElement)
|
||||
osdDrawElementPositioningHelp();
|
||||
else if (sensors(SENSOR_ACC) || inMenu)
|
||||
{
|
||||
osdDrawSingleElement(OSD_ARTIFICIAL_HORIZON);
|
||||
osdDrawSingleElement(OSD_CROSSHAIRS);
|
||||
}
|
||||
|
||||
osdDrawSingleElement(OSD_MAIN_BATT_VOLTAGE);
|
||||
osdDrawSingleElement(OSD_RSSI_VALUE);
|
||||
|
@ -1494,18 +1531,8 @@ void osdDrawSingleElement(uint8_t item)
|
|||
|
||||
case OSD_ALTITUDE:
|
||||
{
|
||||
int32_t alt = BaroAlt; // Metre x 100
|
||||
char unitSym = 0xC; // m
|
||||
|
||||
if (!VISIBLE(OSD_cfg.item_pos[OSD_ALTITUDE]) || BLINK(OSD_cfg.item_pos[OSD_ALTITUDE]))
|
||||
return;
|
||||
|
||||
if (masterConfig.osdProfile.units == OSD_UNIT_IMPERIAL) {
|
||||
alt = (alt * 328) / 100; // Convert to feet x 100
|
||||
unitSym = 0xF; // ft
|
||||
}
|
||||
|
||||
sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), unitSym);
|
||||
int32_t alt = osdGetAltitude(BaroAlt);
|
||||
sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), osdGetAltitudeSymbol());
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1573,6 +1600,21 @@ void osdDrawSingleElement(uint8_t item)
|
|||
}
|
||||
#endif // VTX
|
||||
|
||||
case OSD_CROSSHAIRS:
|
||||
{
|
||||
uint8_t *screenBuffer = max7456GetScreenBuffer();
|
||||
uint16_t position = 194;
|
||||
|
||||
if (maxScreenSize == VIDEO_BUFFER_CHARS_PAL)
|
||||
position += 30;
|
||||
|
||||
screenBuffer[position - 1] = (SYM_AH_CENTER_LINE);
|
||||
screenBuffer[position + 1] = (SYM_AH_CENTER_LINE_RIGHT);
|
||||
screenBuffer[position] = (SYM_AH_CENTER);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
case OSD_ARTIFICIAL_HORIZON:
|
||||
{
|
||||
uint8_t *screenBuffer = max7456GetScreenBuffer();
|
||||
|
@ -1584,7 +1626,6 @@ void osdDrawSingleElement(uint8_t item)
|
|||
if (maxScreenSize == VIDEO_BUFFER_CHARS_PAL)
|
||||
position += 30;
|
||||
|
||||
|
||||
if (pitchAngle > AH_MAX_PITCH)
|
||||
pitchAngle = AH_MAX_PITCH;
|
||||
if (pitchAngle < -AH_MAX_PITCH)
|
||||
|
@ -1595,8 +1636,6 @@ void osdDrawSingleElement(uint8_t item)
|
|||
rollAngle = -AH_MAX_ROLL;
|
||||
|
||||
for (uint8_t x = 0; x <= 8; x++) {
|
||||
if (x == 4)
|
||||
x = 5;
|
||||
int y = (rollAngle * (4 - x)) / 64;
|
||||
y -= pitchAngle / 8;
|
||||
y += 41;
|
||||
|
@ -1606,11 +1645,8 @@ void osdDrawSingleElement(uint8_t item)
|
|||
}
|
||||
}
|
||||
|
||||
screenBuffer[position - 1] = (SYM_AH_CENTER_LINE);
|
||||
screenBuffer[position + 1] = (SYM_AH_CENTER_LINE_RIGHT);
|
||||
screenBuffer[position] = (SYM_AH_CENTER);
|
||||
|
||||
osdDrawSingleElement(OSD_HORIZON_SIDEBARS);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue