Efficiency OSD element in mAh/km or mAh/mi
This commit is contained in:
parent
bbdc1bd586
commit
93635f62aa
|
@ -1342,6 +1342,7 @@ const clivalue_t valueTable[] = {
|
||||||
|
|
||||||
{ "osd_rcchannels_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RC_CHANNELS]) },
|
{ "osd_rcchannels_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RC_CHANNELS]) },
|
||||||
{ "osd_camera_frame_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CAMERA_FRAME]) },
|
{ "osd_camera_frame_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CAMERA_FRAME]) },
|
||||||
|
{ "osd_efficiency_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_EFFICIENCY]) },
|
||||||
|
|
||||||
// OSD stats enabled flags are stored as bitmapped values inside a 32bit parameter
|
// OSD stats enabled flags are stored as bitmapped values inside a 32bit parameter
|
||||||
// It is recommended to keep the settings order the same as the enumeration. This way the settings are displayed in the cli in the same order making it easier on the users
|
// It is recommended to keep the settings order the same as the enumeration. This way the settings are displayed in the cli in the same order making it easier on the users
|
||||||
|
|
|
@ -143,6 +143,7 @@ typedef enum {
|
||||||
OSD_RSSI_DBM_VALUE,
|
OSD_RSSI_DBM_VALUE,
|
||||||
OSD_RC_CHANNELS,
|
OSD_RC_CHANNELS,
|
||||||
OSD_CAMERA_FRAME,
|
OSD_CAMERA_FRAME,
|
||||||
|
OSD_EFFICIENCY,
|
||||||
OSD_ITEM_COUNT // MUST BE LAST
|
OSD_ITEM_COUNT // MUST BE LAST
|
||||||
} osd_items_e;
|
} osd_items_e;
|
||||||
|
|
||||||
|
|
|
@ -136,6 +136,7 @@
|
||||||
#define OSD_STICK_OVERLAY_VERTICAL_POSITIONS (OSD_STICK_OVERLAY_HEIGHT * OSD_STICK_OVERLAY_SPRITE_HEIGHT)
|
#define OSD_STICK_OVERLAY_VERTICAL_POSITIONS (OSD_STICK_OVERLAY_HEIGHT * OSD_STICK_OVERLAY_SPRITE_HEIGHT)
|
||||||
|
|
||||||
#define FULL_CIRCLE 360
|
#define FULL_CIRCLE 360
|
||||||
|
#define EFFICIENCY_MINIMUM_SPEED_CM_S 100
|
||||||
|
|
||||||
#ifdef USE_OSD_STICK_OVERLAY
|
#ifdef USE_OSD_STICK_OVERLAY
|
||||||
typedef struct radioControls_s {
|
typedef struct radioControls_s {
|
||||||
|
@ -922,6 +923,26 @@ static void osdElementGpsSpeed(osdElementParms_t *element)
|
||||||
{
|
{
|
||||||
tfp_sprintf(element->buff, "%c%3d%c", SYM_SPEED, osdGetSpeedToSelectedUnit(gpsConfig()->gps_use_3d_speed ? gpsSol.speed3d : gpsSol.groundSpeed), osdGetSpeedToSelectedUnitSymbol());
|
tfp_sprintf(element->buff, "%c%3d%c", SYM_SPEED, osdGetSpeedToSelectedUnit(gpsConfig()->gps_use_3d_speed ? gpsSol.speed3d : gpsSol.groundSpeed), osdGetSpeedToSelectedUnitSymbol());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void osdElementEfficiency(osdElementParms_t *element)
|
||||||
|
{
|
||||||
|
int efficiency = 0;
|
||||||
|
if (sensors(SENSOR_GPS) && ARMING_FLAG(ARMED) && STATE(GPS_FIX) && gpsSol.groundSpeed >= EFFICIENCY_MINIMUM_SPEED_CM_S) {
|
||||||
|
const int speedX100 = osdGetSpeedToSelectedUnit(gpsSol.groundSpeed * 100); // speed * 100 for improved resolution at slow speeds
|
||||||
|
|
||||||
|
if (speedX100 > 0) {
|
||||||
|
const int mAmperage = getAmperage() * 10; // Current in mA
|
||||||
|
efficiency = mAmperage * 100 / speedX100; // mAmperage * 100 to cancel out speed * 100 from above
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char unitSymbol = osdConfig()->units == OSD_UNIT_IMPERIAL ? SYM_MILES : SYM_KM;
|
||||||
|
if (efficiency > 0 && efficiency <= 9999) {
|
||||||
|
tfp_sprintf(element->buff, "%4d%c/%c", efficiency, SYM_MAH, unitSymbol);
|
||||||
|
} else {
|
||||||
|
tfp_sprintf(element->buff, "----%c/%c", SYM_MAH, unitSymbol);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif // USE_GPS
|
#endif // USE_GPS
|
||||||
|
|
||||||
static void osdBackgroundHorizonSidebars(osdElementParms_t *element)
|
static void osdBackgroundHorizonSidebars(osdElementParms_t *element)
|
||||||
|
@ -1697,6 +1718,9 @@ const osdElementDrawFn osdElementDrawFunction[OSD_ITEM_COUNT] = {
|
||||||
[OSD_RSSI_DBM_VALUE] = osdElementRssiDbm,
|
[OSD_RSSI_DBM_VALUE] = osdElementRssiDbm,
|
||||||
#endif
|
#endif
|
||||||
[OSD_RC_CHANNELS] = osdElementRcChannels,
|
[OSD_RC_CHANNELS] = osdElementRcChannels,
|
||||||
|
#ifdef USE_GPS
|
||||||
|
[OSD_EFFICIENCY] = osdElementEfficiency,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// Define the mapping between the OSD element id and the function to draw its background (static part)
|
// Define the mapping between the OSD element id and the function to draw its background (static part)
|
||||||
|
@ -1748,6 +1772,7 @@ void osdAddActiveElements(void)
|
||||||
osdAddActiveElement(OSD_HOME_DIST);
|
osdAddActiveElement(OSD_HOME_DIST);
|
||||||
osdAddActiveElement(OSD_HOME_DIR);
|
osdAddActiveElement(OSD_HOME_DIR);
|
||||||
osdAddActiveElement(OSD_FLIGHT_DIST);
|
osdAddActiveElement(OSD_FLIGHT_DIST);
|
||||||
|
osdAddActiveElement(OSD_EFFICIENCY);
|
||||||
}
|
}
|
||||||
#endif // GPS
|
#endif // GPS
|
||||||
#ifdef USE_ESC_SENSOR
|
#ifdef USE_ESC_SENSOR
|
||||||
|
|
Loading…
Reference in New Issue