1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-15 04:15:38 +03:00

Finished before flight test...I think

There are some hacks in this, due to running out of 0-254 indexed characters in the font, needed for the char array.
This commit is contained in:
Darren Lines 2021-07-09 14:27:27 +01:00
parent 1590e8447f
commit 2372eb6e37
6 changed files with 48 additions and 27 deletions

View file

@ -36,8 +36,8 @@
#define SYM_AH_NM 0x120 // 288 Ah/NM
#define SYM_MAH_MI_0 0x0A // 010 mAh/mi left
#define SYM_MAH_MI_1 0x0B // 011 mAh/mi right
#define SYM_MAH_NM_0 0x11E // 286 mAh/NM left
#define SYM_MAH_NM_1 0x11F // 287 mAh/NM right
#define SYM_MAH_NM_0 0xDA // 286 mAh/NM left
#define SYM_MAH_NM_1 0xDB // 287 mAh/NM right
#define SYM_LQ 0x0C // 012 LQ
#define SYM_TEMP_F 0x0D // 013 °F
@ -118,7 +118,7 @@
#define SYM_3D_KMH 0x89 // 137 KM/H 3D
#define SYM_3D_MPH 0x8A // 138 MPH 3D
#define SYM_3D_KTS 0x11B // 283 Knots 3D
#define SYM_3D_KTS 0x119 // 281 Knots 3D
#define SYM_RPM 0x8B // 139 RPM
#define SYM_WAYPOINT 0x8C // 140 Waypoint
@ -138,7 +138,7 @@
#define SYM_AIR 0x97 // 151 Air speed
// 0x98 // 152 Home point map
#define SYM_FTS 0x99 // 153 FT/S
#define SYM_100FTM 0x11D // 285 100 Feet per Min
#define SYM_100FTM 0xDC // 220 100 Feet per Min
#define SYM_AMP 0x9A // 154 A
#define SYM_ON_M 0x9B // 155 On MN
#define SYM_FLY_M 0x9C // 156 FL MN
@ -165,7 +165,7 @@
#define SYM_WATT 0xAE // 174 W
#define SYM_SCALE 0xAF // 175 Map scale
#define SYM_MPH 0xB0 // 176 MPH
#define SYM_KTS 0x11C // 284 Knots
#define SYM_KTS 0xDE // 222 Knots
#define SYM_ALT_M 0xB1 // 177 ALT M
#define SYM_ALT_KM 0xB2 // 178 ALT KM
#define SYM_ALT_FT 0xB3 // 179 ALT FT
@ -174,11 +174,11 @@
#define SYM_DIST_KM 0xB6 // 182 DIM KM
#define SYM_DIST_FT 0xB7 // 183 DIS FT
#define SYM_DIST_MI 0xB8 // 184 DIS MI
#define SYM_DIST_NM 0x119 // 281 DIS NM
#define SYM_DIST_NM 0xFE // 254 DIS NM
#define SYM_M 0xB9 // 185 M
#define SYM_KM 0xBA // 186 KM
#define SYM_MI 0xBB // 187 MI
#define SYM_NM 0x11A // 282 NM
#define SYM_NM 0xDD // 221 NM
#define SYM_CLOCK 0xBC // 188 Clock
#define SYM_HDP_L 0xBD // 189 HDOP left
@ -197,12 +197,6 @@
#define SYM_ZERO_HALF_LEADING_DOT 0xD0 // 208 to 217 Numbers with leading dot
#define SYM_AH_CH_AIRCRAFT0 0xDA // 218 Crossair aircraft left
#define SYM_AH_CH_AIRCRAFT1 0xDB // 219 Crossair aircraft
#define SYM_AH_CH_AIRCRAFT2 0xDC // 220 Crossair aircraft center
#define SYM_AH_CH_AIRCRAFT3 0xDD // 221 Crossair aircraft
#define SYM_AH_CH_AIRCRAFT4 0xDE // 222 Crossair aircraft right
#define SYM_PITCH_DOWN 0xDF // 223 Pitch down
#define SYM_AH_V_START 0xE0 // 224 to 229 Vertical AHI
@ -237,6 +231,12 @@
#define SYM_AH_CH_TYPE6 0x199 // 409 to 411, crosshair 6
#define SYM_AH_CH_TYPE7 0x19C // 412 to 414, crosshair 7
#define SYM_AH_CH_AIRCRAFT0 0x1AE // 430 Crossair aircraft left
#define SYM_AH_CH_AIRCRAFT1 0x1AF // 431 Crossair aircraft
#define SYM_AH_CH_AIRCRAFT2 0x1B0 // 432 Crossair aircraft center
#define SYM_AH_CH_AIRCRAFT3 0x1B1 // 433 Crossair aircraft
#define SYM_AH_CH_AIRCRAFT4 0x1B2 // 434 Crossair aircraft right
#define SYM_HUD_ARROWS_L1 0x1A2 // 418 1 arrow left
#define SYM_HUD_ARROWS_L2 0x1A3 // 419 2 arrows left
#define SYM_HUD_ARROWS_L3 0x1A4 // 420 3 arrows left

View file

@ -64,7 +64,7 @@ tables:
- name: nav_rth_alt_mode
values: ["CURRENT", "EXTRA", "FIXED", "MAX", "AT_LEAST", "AT_LEAST_LINEAR_DESCENT"]
- name: osd_unit
values: ["IMPERIAL", "METRIC", "METRIC_MPH", "UK"]
values: ["IMPERIAL", "METRIC", "METRIC_MPH", "UK", "GA"]
enum: osd_unit_e
- name: osd_stats_energy_unit
values: ["MAH", "WH"]

View file

@ -421,7 +421,7 @@ static int32_t osdConvertVelocityToUnit(int32_t vel)
* Converts velocity into a string based on the current unit system.
* @param alt Raw velocity (i.e. as taken from gpsSol.groundSpeed in centimeters/seconds)
*/
void osdFormatVelocityStr(char* buff, int32_t vel, bool _3D)
void osdFormatVelocityStr(char* buff, int32_t vel, bool _3D, uint8_t elemPosX, uint8_t elemPosY)
{
switch ((osd_unit_e)osdConfig()->units) {
case OSD_UNIT_UK:
@ -435,7 +435,12 @@ void osdFormatVelocityStr(char* buff, int32_t vel, bool _3D)
tfp_sprintf(buff, "%3d%c", (int)osdConvertVelocityToUnit(vel), (_3D ? SYM_3D_KMH : SYM_KMH));
break;
case OSD_UNIT_GA:
tfp_sprintf(buff, "%3d%c", (int)osdConvertVelocityToUnit(vel), (_3D ? SYM_3D_KTS : SYM_KTS));
if (_3D) {
tfp_sprintf(buff, "%3d", (int)osdConvertVelocityToUnit(vel));
displayWriteChar(osdDisplayPort, elemPosX + 3, elemPosY, SYM_3D_KTS);
} else {
tfp_sprintf(buff, "%3d%c", (int)osdConvertVelocityToUnit(vel), SYM_KTS);
}
break;
}
}
@ -1569,12 +1574,12 @@ static bool osdDrawSingleElement(uint8_t item)
break;
case OSD_GPS_SPEED:
osdFormatVelocityStr(buff, gpsSol.groundSpeed, false);
osdFormatVelocityStr(buff, gpsSol.groundSpeed, false, elemPosX, elemPosY);
break;
case OSD_3D_SPEED:
{
osdFormatVelocityStr(buff, osdGet3DSpeed(), true);
osdFormatVelocityStr(buff, osdGet3DSpeed(), true, elemPosX, elemPosY);
break;
}
@ -1869,13 +1874,27 @@ static bool osdDrawSingleElement(uint8_t item)
#endif
buff[0] = SYM_TRIP_DIST;
if ((!ARMING_FLAG(ARMED)) || (distanceMeters == -1)) {
buff[4] = SYM_DIST_M;
buff[4] = SYM_BLANK;
buff[5] = '\0';
strcpy(buff + 1, "---");
} else if (distanceMeters == -2) {
// Wind is too strong to come back with cruise throttle
buff[1] = buff[2] = buff[3] = SYM_WIND_HORIZONTAL;
buff[4] = SYM_DIST_M;
switch ((osd_unit_e)osdConfig()->units){
case OSD_UNIT_UK:
FALLTHROUGH;
case OSD_UNIT_IMPERIAL:
buff[4] = SYM_DIST_MI;
break;
case OSD_UNIT_METRIC_MPH:
FALLTHROUGH;
case OSD_UNIT_METRIC:
buff[4] = SYM_DIST_KM;
break;
case OSD_UNIT_GA:
buff[4] = SYM_DIST_NM;
break;
}
buff[5] = '\0';
TEXT_ATTRIBUTES_ADD_BLINK(elemAttr);
} else {
@ -2391,7 +2410,7 @@ static bool osdDrawSingleElement(uint8_t item)
{
#ifdef USE_PITOT
buff[0] = SYM_AIR;
osdFormatVelocityStr(buff + 1, pitot.airSpeed, false);
osdFormatVelocityStr(buff + 1, pitot.airSpeed, false, elemPosX, elemPosY);
#else
return false;
#endif
@ -2553,7 +2572,8 @@ static bool osdDrawSingleElement(uint8_t item)
break;
case OSD_UNIT_GA:
osdFormatCentiNumber(buff, value * METERS_PER_NAUTICALMILE / 10000, 0, 2, 0, 3);
buff[3] = SYM_WH_NM;
// buff[3] = SYM_WH_NM;
displayWriteChar(osdDisplayPort, elemPosX +3, elemPosY, SYM_WH_NM);
break;
case OSD_UNIT_METRIC_MPH:
FALLTHROUGH;
@ -3367,7 +3387,8 @@ static void osdCompleteAsyncInitialization(void)
break;
case OSD_UNIT_GA:
osdFormatCentiNumber(string_buffer, avg_efficiency / 10, 0, 2, 0, 3);
string_buffer[3] = SYM_WH_NM;
displayWriteChar(osdDisplayPort, STATS_LABEL_X_POS +3, y, SYM_WH_NM);
// string_buffer[3] = SYM_WH_NM;
break;
default:
case OSD_UNIT_METRIC_MPH:
@ -3477,7 +3498,7 @@ static void osdShowStatsPage1(void)
if (feature(FEATURE_GPS)) {
displayWrite(osdDisplayPort, statNameX, top, "MAX SPEED :");
osdFormatVelocityStr(buff, stats.max_speed, true);
osdFormatVelocityStr(buff, stats.max_speed, true, statValuesX, top);
osdLeftAlignString(buff);
displayWrite(osdDisplayPort, statValuesX, top++, buff);

View file

@ -412,7 +412,7 @@ int32_t osdGetAltitude(void);
void osdCrosshairPosition(uint8_t *x, uint8_t *y);
bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int maxDecimals, int maxScaledDecimals, int length);
void osdFormatAltitudeSymbol(char *buff, int32_t alt);
void osdFormatVelocityStr(char* buff, int32_t vel, bool _3D);
void osdFormatVelocityStr(char* buff, int32_t vel, bool _3D, uint8_t elemPosX, uint8_t elemPosY);
// Returns a heading angle in degrees normalized to [0, 360).
int osdGetHeadingAngle(int angle);

View file

@ -749,7 +749,7 @@ static void osdDJIFormatDistanceStr(char *buff, int32_t dist)
else {
// Show miles when dist >= 0.5mi
tfp_sprintf(buff, "%d.%02d%s", (int)(centifeet / (100 * FEET_PER_NAUTICALMILE)),
(abs(centifeet) % (int)(100 * FEET_PER_NAUTICALMILE)) / FEET_PER_NAUTICALMILE, "NM");
(int)((abs(centifeet) % (int)(100 * FEET_PER_NAUTICALMILE)) / FEET_PER_NAUTICALMILE), "NM");
}
break;
case OSD_UNIT_METRIC_MPH:

View file

@ -345,7 +345,7 @@ void osdHudDrawExtras(uint8_t poi_id)
displayWrite(osdGetDisplayPort(), minX + 4, lineY, buftmp);
osdFormatVelocityStr(buftmp, radar_pois[poi_id].speed, false);
osdFormatVelocityStr(buftmp, radar_pois[poi_id].speed, false, minX + 5, lineY);
displayWrite(osdGetDisplayPort(), maxX - 9, lineY, buftmp);
tfp_sprintf(buftmp, "%3d%c", radar_pois[poi_id].heading, SYM_HEADING);