Merge pull request #3266 from McGiverGim/bf-home_distance_OSD
Add HOME DISTANCE to OSD
This commit is contained in:
commit
44784971bc
|
@ -126,6 +126,7 @@ OSD_Entry menuOsdActiveElemsEntries[] =
|
||||||
#ifdef COMPASS
|
#ifdef COMPASS
|
||||||
{"HOME DIR", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_HOME_DIR], 0},
|
{"HOME DIR", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_HOME_DIR], 0},
|
||||||
#endif
|
#endif
|
||||||
|
{"HOME DIST", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_HOME_DIST], 0},
|
||||||
#endif // GPS
|
#endif // GPS
|
||||||
{"ALTITUDE", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_ALTITUDE], 0},
|
{"ALTITUDE", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_ALTITUDE], 0},
|
||||||
{"POWER", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_POWER], 0},
|
{"POWER", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_POWER], 0},
|
||||||
|
|
|
@ -643,6 +643,7 @@ const clivalue_t valueTable[] = {
|
||||||
{ "osd_gps_lat_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_GPS_LAT]) },
|
{ "osd_gps_lat_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_GPS_LAT]) },
|
||||||
{ "osd_gps_sats_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_GPS_SATS]) },
|
{ "osd_gps_sats_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_GPS_SATS]) },
|
||||||
{ "osd_home_dir_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_HOME_DIR]) },
|
{ "osd_home_dir_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_HOME_DIR]) },
|
||||||
|
{ "osd_home_dist_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_HOME_DIST]) },
|
||||||
{ "osd_altitude_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ALTITUDE]) },
|
{ "osd_altitude_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ALTITUDE]) },
|
||||||
{ "osd_pid_roll_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ROLL_PIDS]) },
|
{ "osd_pid_roll_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ROLL_PIDS]) },
|
||||||
{ "osd_pid_pitch_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_PITCH_PIDS]) },
|
{ "osd_pid_pitch_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_PITCH_PIDS]) },
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
|
|
||||||
#include "build/debug.h"
|
#include "build/debug.h"
|
||||||
|
|
||||||
#include "common/axis.h"
|
|
||||||
#include "common/gps_conversion.h"
|
#include "common/gps_conversion.h"
|
||||||
#include "common/maths.h"
|
#include "common/maths.h"
|
||||||
#include "common/time.h"
|
#include "common/time.h"
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "common/axis.h"
|
||||||
|
|
||||||
// navigation mode
|
// navigation mode
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NAV_MODE_NONE = 0,
|
NAV_MODE_NONE = 0,
|
||||||
|
|
|
@ -70,6 +70,7 @@
|
||||||
#include "fc/runtime_config.h"
|
#include "fc/runtime_config.h"
|
||||||
|
|
||||||
#include "flight/altitude.h"
|
#include "flight/altitude.h"
|
||||||
|
#include "flight/navigation.h"
|
||||||
#include "flight/pid.h"
|
#include "flight/pid.h"
|
||||||
#include "flight/imu.h"
|
#include "flight/imu.h"
|
||||||
|
|
||||||
|
@ -77,12 +78,8 @@
|
||||||
|
|
||||||
#include "sensors/barometer.h"
|
#include "sensors/barometer.h"
|
||||||
#include "sensors/battery.h"
|
#include "sensors/battery.h"
|
||||||
#include "sensors/sensors.h"
|
|
||||||
|
|
||||||
#ifdef MAG // For OSD_HOME_DIR
|
|
||||||
#include "sensors/compass.h"
|
#include "sensors/compass.h"
|
||||||
#include "flight/navigation.h"
|
#include "sensors/sensors.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_HARDWARE_REVISION_DETECTION
|
#ifdef USE_HARDWARE_REVISION_DETECTION
|
||||||
#include "hardware_revision.h"
|
#include "hardware_revision.h"
|
||||||
|
@ -145,7 +142,7 @@ PG_REGISTER_WITH_RESET_FN(osdConfig_t, osdConfig, PG_OSD_CONFIG, 0);
|
||||||
/**
|
/**
|
||||||
* Gets the correct altitude symbol for the current unit system
|
* Gets the correct altitude symbol for the current unit system
|
||||||
*/
|
*/
|
||||||
static char osdGetAltitudeSymbol()
|
static char osdGetMetersToSelectedUnitSymbol()
|
||||||
{
|
{
|
||||||
switch (osdConfig()->units) {
|
switch (osdConfig()->units) {
|
||||||
case OSD_UNIT_IMPERIAL:
|
case OSD_UNIT_IMPERIAL:
|
||||||
|
@ -176,15 +173,15 @@ static char osdGetBatterySymbol(int cellVoltage)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts altitude based on the current unit system.
|
* Converts altitude based on the current unit system.
|
||||||
* @param alt Raw altitude (i.e. as taken from BaroAlt)
|
* @param meters Value in meters to convert
|
||||||
*/
|
*/
|
||||||
static int32_t osdGetAltitude(int32_t alt)
|
static int32_t osdGetMetersToSelectedUnit(int32_t meters)
|
||||||
{
|
{
|
||||||
switch (osdConfig()->units) {
|
switch (osdConfig()->units) {
|
||||||
case OSD_UNIT_IMPERIAL:
|
case OSD_UNIT_IMPERIAL:
|
||||||
return (alt * 328) / 100; // Convert to feet / 100
|
return (meters * 328) / 100; // Convert to feet / 100
|
||||||
default:
|
default:
|
||||||
return alt; // Already in metre / 100
|
return meters; // Already in metre / 100
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,6 +265,17 @@ static void osdDrawSingleElement(uint8_t item)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case OSD_HOME_DIST:
|
||||||
|
if (STATE(GPS_FIX) && STATE(GPS_FIX_HOME)) {
|
||||||
|
int32_t distance = osdGetMetersToSelectedUnit(GPS_distanceToHome);
|
||||||
|
tfp_sprintf(buff, "%d%c", distance, osdGetMetersToSelectedUnitSymbol());
|
||||||
|
} else {
|
||||||
|
// We use this symbol when we don't have a FIX
|
||||||
|
buff[0] = SYM_COLON;
|
||||||
|
buff[1] = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef MAG
|
#ifdef MAG
|
||||||
case OSD_HOME_DIR:
|
case OSD_HOME_DIR:
|
||||||
if (STATE(GPS_FIX) && STATE(GPS_FIX_HOME)) {
|
if (STATE(GPS_FIX) && STATE(GPS_FIX_HOME)) {
|
||||||
|
@ -304,8 +312,8 @@ static void osdDrawSingleElement(uint8_t item)
|
||||||
|
|
||||||
case OSD_ALTITUDE:
|
case OSD_ALTITUDE:
|
||||||
{
|
{
|
||||||
const int32_t alt = osdGetAltitude(getEstimatedAltitude());
|
const int32_t alt = osdGetMetersToSelectedUnit(getEstimatedAltitude());
|
||||||
tfp_sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), osdGetAltitudeSymbol());
|
tfp_sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), osdGetMetersToSelectedUnitSymbol());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,6 +626,7 @@ void osdDrawElements(void)
|
||||||
osdDrawSingleElement(OSD_GPS_SPEED);
|
osdDrawSingleElement(OSD_GPS_SPEED);
|
||||||
osdDrawSingleElement(OSD_GPS_LAT);
|
osdDrawSingleElement(OSD_GPS_LAT);
|
||||||
osdDrawSingleElement(OSD_GPS_LON);
|
osdDrawSingleElement(OSD_GPS_LON);
|
||||||
|
osdDrawSingleElement(OSD_HOME_DIST);
|
||||||
#ifdef COMPASS
|
#ifdef COMPASS
|
||||||
if (sensors(SENSOR_MAG) || sensors(SENSOR_GPSMAG))
|
if (sensors(SENSOR_MAG) || sensors(SENSOR_GPSMAG))
|
||||||
osdDrawSingleElement(OSD_HOME_DIR);
|
osdDrawSingleElement(OSD_HOME_DIR);
|
||||||
|
@ -657,6 +666,7 @@ void pgResetFn_osdConfig(osdConfig_t *osdConfig)
|
||||||
osdConfig->item_pos[OSD_ROLL_ANGLE] = OSD_POS(1, 9) | VISIBLE_FLAG;
|
osdConfig->item_pos[OSD_ROLL_ANGLE] = OSD_POS(1, 9) | VISIBLE_FLAG;
|
||||||
osdConfig->item_pos[OSD_GPS_LAT] = OSD_POS(1, 2) | VISIBLE_FLAG;
|
osdConfig->item_pos[OSD_GPS_LAT] = OSD_POS(1, 2) | VISIBLE_FLAG;
|
||||||
osdConfig->item_pos[OSD_GPS_LON] = OSD_POS(18, 2) | VISIBLE_FLAG;
|
osdConfig->item_pos[OSD_GPS_LON] = OSD_POS(18, 2) | VISIBLE_FLAG;
|
||||||
|
osdConfig->item_pos[OSD_HOME_DIST] = OSD_POS(15, 9) | VISIBLE_FLAG;
|
||||||
osdConfig->item_pos[OSD_HOME_DIR] = OSD_POS(14, 9) | VISIBLE_FLAG;
|
osdConfig->item_pos[OSD_HOME_DIR] = OSD_POS(14, 9) | VISIBLE_FLAG;
|
||||||
osdConfig->item_pos[OSD_MAIN_BATT_USAGE] = OSD_POS(8, 12) | VISIBLE_FLAG;
|
osdConfig->item_pos[OSD_MAIN_BATT_USAGE] = OSD_POS(8, 12) | VISIBLE_FLAG;
|
||||||
osdConfig->item_pos[OSD_ARMED_TIME] = OSD_POS(1, 2) | VISIBLE_FLAG;
|
osdConfig->item_pos[OSD_ARMED_TIME] = OSD_POS(1, 2) | VISIBLE_FLAG;
|
||||||
|
@ -732,7 +742,7 @@ void osdUpdateAlarms(void)
|
||||||
// This is overdone?
|
// This is overdone?
|
||||||
// uint16_t *itemPos = osdConfig()->item_pos;
|
// uint16_t *itemPos = osdConfig()->item_pos;
|
||||||
|
|
||||||
int32_t alt = osdGetAltitude(getEstimatedAltitude()) / 100;
|
int32_t alt = osdGetMetersToSelectedUnit(getEstimatedAltitude()) / 100;
|
||||||
statRssi = rssi * 100 / 1024;
|
statRssi = rssi * 100 / 1024;
|
||||||
|
|
||||||
if (statRssi < osdConfig()->rssi_alarm)
|
if (statRssi < osdConfig()->rssi_alarm)
|
||||||
|
@ -923,8 +933,8 @@ static void osdShowStats(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (osdConfig()->enabled_stats[OSD_STAT_MAX_ALTITUDE]) {
|
if (osdConfig()->enabled_stats[OSD_STAT_MAX_ALTITUDE]) {
|
||||||
int32_t alt = osdGetAltitude(stats.max_altitude);
|
int32_t alt = osdGetMetersToSelectedUnit(stats.max_altitude);
|
||||||
tfp_sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), osdGetAltitudeSymbol());
|
tfp_sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), osdGetMetersToSelectedUnitSymbol());
|
||||||
osdDisplayStatisticLabel(top++, "MAX ALTITUDE", buff);
|
osdDisplayStatisticLabel(top++, "MAX ALTITUDE", buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ typedef enum {
|
||||||
OSD_ARMED_TIME,
|
OSD_ARMED_TIME,
|
||||||
OSD_DISARMED,
|
OSD_DISARMED,
|
||||||
OSD_HOME_DIR,
|
OSD_HOME_DIR,
|
||||||
|
OSD_HOME_DIST,
|
||||||
OSD_ITEM_COUNT // MUST BE LAST
|
OSD_ITEM_COUNT // MUST BE LAST
|
||||||
} osd_items_e;
|
} osd_items_e;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue