Added OSD_REMAINING_TIME_ESTIMATE which is based on flight used mAh rate.
This commit is contained in:
parent
1c5c7476c1
commit
4e0c16855f
|
@ -68,6 +68,7 @@ OSD_Entry menuOsdActiveElemsEntries[] =
|
||||||
{"HORIZON SIDEBARS", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_HORIZON_SIDEBARS], 0},
|
{"HORIZON SIDEBARS", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_HORIZON_SIDEBARS], 0},
|
||||||
{"TIMER 1", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_ITEM_TIMER_1], 0},
|
{"TIMER 1", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_ITEM_TIMER_1], 0},
|
||||||
{"TIMER 2", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_ITEM_TIMER_2], 0},
|
{"TIMER 2", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_ITEM_TIMER_2], 0},
|
||||||
|
{"REMAINING TIME ESTIMATE", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_REMAINING_TIME_ESTIMATE], 0},
|
||||||
{"FLY MODE", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_FLYMODE], 0},
|
{"FLY MODE", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_FLYMODE], 0},
|
||||||
{"NAME", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_CRAFT_NAME], 0},
|
{"NAME", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_CRAFT_NAME], 0},
|
||||||
{"THROTTLE", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_THROTTLE_POS], 0},
|
{"THROTTLE", OME_VISIBLE, NULL, &osdConfig_item_pos[OSD_THROTTLE_POS], 0},
|
||||||
|
|
|
@ -698,6 +698,7 @@ const clivalue_t valueTable[] = {
|
||||||
{ "osd_rssi_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_RSSI_VALUE]) },
|
{ "osd_rssi_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_RSSI_VALUE]) },
|
||||||
{ "osd_tim_1_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ITEM_TIMER_1]) },
|
{ "osd_tim_1_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ITEM_TIMER_1]) },
|
||||||
{ "osd_tim_2_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ITEM_TIMER_2]) },
|
{ "osd_tim_2_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_ITEM_TIMER_2]) },
|
||||||
|
{ "osd_remaining_time_estimate_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_REMAINING_TIME_ESTIMATE]) },
|
||||||
{ "osd_flymode_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_FLYMODE]) },
|
{ "osd_flymode_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_FLYMODE]) },
|
||||||
{ "osd_throttle_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_THROTTLE_POS]) },
|
{ "osd_throttle_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_THROTTLE_POS]) },
|
||||||
{ "osd_vtx_channel_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_VTX_CHANNEL]) },
|
{ "osd_vtx_channel_pos", VAR_UINT16 | MASTER_VALUE, .config.minmax = { 0, OSD_POSCFG_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, item_pos[OSD_VTX_CHANNEL]) },
|
||||||
|
|
|
@ -452,6 +452,21 @@ static void osdDrawSingleElement(uint8_t item)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case OSD_REMAINING_TIME_ESTIMATE:
|
||||||
|
{
|
||||||
|
const int mAhDrawn = getMAhDrawn();
|
||||||
|
int remaining_time = (int)((osdConfig()->cap_alarm - mAhDrawn) * ((float)flyTime) / mAhDrawn);
|
||||||
|
|
||||||
|
if (mAhDrawn < 0.1 * osdConfig()->cap_alarm) {
|
||||||
|
tfp_sprintf(buff, "--:--");
|
||||||
|
} else if (mAhDrawn > osdConfig()->cap_alarm) {
|
||||||
|
tfp_sprintf(buff, "00:00");
|
||||||
|
} else {
|
||||||
|
osdFormatTime(buff, OSD_TIMER_PREC_SECOND, remaining_time);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case OSD_FLYMODE:
|
case OSD_FLYMODE:
|
||||||
{
|
{
|
||||||
char *p = "ACRO";
|
char *p = "ACRO";
|
||||||
|
@ -769,6 +784,7 @@ static void osdDrawElements(void)
|
||||||
osdDrawSingleElement(OSD_CROSSHAIRS);
|
osdDrawSingleElement(OSD_CROSSHAIRS);
|
||||||
osdDrawSingleElement(OSD_ITEM_TIMER_1);
|
osdDrawSingleElement(OSD_ITEM_TIMER_1);
|
||||||
osdDrawSingleElement(OSD_ITEM_TIMER_2);
|
osdDrawSingleElement(OSD_ITEM_TIMER_2);
|
||||||
|
osdDrawSingleElement(OSD_REMAINING_TIME_ESTIMATE);
|
||||||
osdDrawSingleElement(OSD_FLYMODE);
|
osdDrawSingleElement(OSD_FLYMODE);
|
||||||
osdDrawSingleElement(OSD_THROTTLE_POS);
|
osdDrawSingleElement(OSD_THROTTLE_POS);
|
||||||
osdDrawSingleElement(OSD_VTX_CHANNEL);
|
osdDrawSingleElement(OSD_VTX_CHANNEL);
|
||||||
|
@ -950,9 +966,11 @@ void osdUpdateAlarms(void)
|
||||||
if (getMAhDrawn() >= osdConfig()->cap_alarm) {
|
if (getMAhDrawn() >= osdConfig()->cap_alarm) {
|
||||||
SET_BLINK(OSD_MAH_DRAWN);
|
SET_BLINK(OSD_MAH_DRAWN);
|
||||||
SET_BLINK(OSD_MAIN_BATT_USAGE);
|
SET_BLINK(OSD_MAIN_BATT_USAGE);
|
||||||
|
SET_BLINK(OSD_REMAINING_TIME_ESTIMATE);
|
||||||
} else {
|
} else {
|
||||||
CLR_BLINK(OSD_MAH_DRAWN);
|
CLR_BLINK(OSD_MAH_DRAWN);
|
||||||
CLR_BLINK(OSD_MAIN_BATT_USAGE);
|
CLR_BLINK(OSD_MAIN_BATT_USAGE);
|
||||||
|
CLR_BLINK(OSD_REMAINING_TIME_ESTIMATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alt >= osdConfig()->alt_alarm)
|
if (alt >= osdConfig()->alt_alarm)
|
||||||
|
@ -973,6 +991,7 @@ void osdResetAlarms(void)
|
||||||
CLR_BLINK(OSD_MAIN_BATT_USAGE);
|
CLR_BLINK(OSD_MAIN_BATT_USAGE);
|
||||||
CLR_BLINK(OSD_ITEM_TIMER_1);
|
CLR_BLINK(OSD_ITEM_TIMER_1);
|
||||||
CLR_BLINK(OSD_ITEM_TIMER_2);
|
CLR_BLINK(OSD_ITEM_TIMER_2);
|
||||||
|
CLR_BLINK(OSD_REMAINING_TIME_ESTIMATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void osdResetStats(void)
|
static void osdResetStats(void)
|
||||||
|
|
|
@ -83,6 +83,7 @@ typedef enum {
|
||||||
OSD_COMPASS_BAR,
|
OSD_COMPASS_BAR,
|
||||||
OSD_ESC_TMP,
|
OSD_ESC_TMP,
|
||||||
OSD_ESC_RPM,
|
OSD_ESC_RPM,
|
||||||
|
OSD_REMAINING_TIME_ESTIMATE,
|
||||||
OSD_RTC_DATETIME,
|
OSD_RTC_DATETIME,
|
||||||
OSD_ADJUSTMENT_RANGE,
|
OSD_ADJUSTMENT_RANGE,
|
||||||
OSD_ITEM_COUNT // MUST BE LAST
|
OSD_ITEM_COUNT // MUST BE LAST
|
||||||
|
|
|
@ -418,11 +418,12 @@ TEST(OsdTest, TestAlarms)
|
||||||
|
|
||||||
// and
|
// and
|
||||||
// the following OSD elements are visible
|
// the following OSD elements are visible
|
||||||
osdConfigMutable()->item_pos[OSD_RSSI_VALUE] = OSD_POS(8, 1) | VISIBLE_FLAG;
|
osdConfigMutable()->item_pos[OSD_RSSI_VALUE] = OSD_POS(8, 1) | VISIBLE_FLAG;
|
||||||
osdConfigMutable()->item_pos[OSD_MAIN_BATT_VOLTAGE] = OSD_POS(12, 1) | VISIBLE_FLAG;
|
osdConfigMutable()->item_pos[OSD_MAIN_BATT_VOLTAGE] = OSD_POS(12, 1) | VISIBLE_FLAG;
|
||||||
osdConfigMutable()->item_pos[OSD_ITEM_TIMER_1] = OSD_POS(20, 1) | VISIBLE_FLAG;
|
osdConfigMutable()->item_pos[OSD_ITEM_TIMER_1] = OSD_POS(20, 1) | VISIBLE_FLAG;
|
||||||
osdConfigMutable()->item_pos[OSD_ITEM_TIMER_2] = OSD_POS(1, 1) | VISIBLE_FLAG;
|
osdConfigMutable()->item_pos[OSD_ITEM_TIMER_2] = OSD_POS(1, 1) | VISIBLE_FLAG;
|
||||||
osdConfigMutable()->item_pos[OSD_ALTITUDE] = OSD_POS(23, 7) | VISIBLE_FLAG;
|
osdConfigMutable()->item_pos[OSD_REMAINING_TIME_ESTIMATE] = OSD_POS(1, 2) | VISIBLE_FLAG;
|
||||||
|
osdConfigMutable()->item_pos[OSD_ALTITUDE] = OSD_POS(23, 7) | VISIBLE_FLAG;
|
||||||
|
|
||||||
// and
|
// and
|
||||||
// this set of alarm values
|
// this set of alarm values
|
||||||
|
@ -477,6 +478,7 @@ TEST(OsdTest, TestAlarms)
|
||||||
simulationAltitude = 12000;
|
simulationAltitude = 12000;
|
||||||
simulationTime += 60e6;
|
simulationTime += 60e6;
|
||||||
osdRefresh(simulationTime);
|
osdRefresh(simulationTime);
|
||||||
|
simulationMahDrawn = 999999;
|
||||||
|
|
||||||
// then
|
// then
|
||||||
// elements showing values in alarm range should flash
|
// elements showing values in alarm range should flash
|
||||||
|
|
Loading…
Reference in New Issue