AP_OSD: Adding efficiency and climb efficiency
and new font characters
|
@ -107,6 +107,8 @@ private:
|
||||||
AP_OSD_Setting dist{false,22,11};
|
AP_OSD_Setting dist{false,22,11};
|
||||||
AP_OSD_Setting stat{false,0,0};
|
AP_OSD_Setting stat{false,0,0};
|
||||||
AP_OSD_Setting flightime{false, 23, 10};
|
AP_OSD_Setting flightime{false, 23, 10};
|
||||||
|
AP_OSD_Setting climbeff{false,0,0};
|
||||||
|
AP_OSD_Setting eff{false, 22, 10};
|
||||||
|
|
||||||
bool check_option(uint32_t option);
|
bool check_option(uint32_t option);
|
||||||
|
|
||||||
|
@ -162,6 +164,8 @@ private:
|
||||||
void draw_dist(uint8_t x, uint8_t y);
|
void draw_dist(uint8_t x, uint8_t y);
|
||||||
void draw_stat(uint8_t x, uint8_t y);
|
void draw_stat(uint8_t x, uint8_t y);
|
||||||
void draw_flightime(uint8_t x, uint8_t y);
|
void draw_flightime(uint8_t x, uint8_t y);
|
||||||
|
void draw_climbeff(uint8_t x, uint8_t y);
|
||||||
|
void draw_eff(uint8_t x, uint8_t y);
|
||||||
};
|
};
|
||||||
|
|
||||||
class AP_OSD {
|
class AP_OSD {
|
||||||
|
@ -233,6 +237,7 @@ public:
|
||||||
|
|
||||||
void set_nav_info(NavInfo &nav_info);
|
void set_nav_info(NavInfo &nav_info);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void osd_thread();
|
void osd_thread();
|
||||||
void update_osd();
|
void update_osd();
|
||||||
|
|
|
@ -182,6 +182,14 @@ const AP_Param::GroupInfo AP_OSD_Screen::var_info[] = {
|
||||||
// @Path: AP_OSD_Setting.cpp
|
// @Path: AP_OSD_Setting.cpp
|
||||||
AP_SUBGROUPINFO(flightime, "FLTIME", 34, AP_OSD_Screen, AP_OSD_Setting),
|
AP_SUBGROUPINFO(flightime, "FLTIME", 34, AP_OSD_Screen, AP_OSD_Setting),
|
||||||
|
|
||||||
|
// @Group: CLIMBEFF
|
||||||
|
// @Path: AP_OSD_Setting.cpp
|
||||||
|
AP_SUBGROUPINFO(climbeff, "CLIMBEFF", 35, AP_OSD_Screen, AP_OSD_Setting),
|
||||||
|
|
||||||
|
// @Group: EFF
|
||||||
|
// @Path: AP_OSD_Setting.cpp
|
||||||
|
AP_SUBGROUPINFO(eff, "EFF", 36, AP_OSD_Screen, AP_OSD_Setting),
|
||||||
|
|
||||||
AP_GROUPEND
|
AP_GROUPEND
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -274,6 +282,7 @@ AP_OSD_Screen::AP_OSD_Screen()
|
||||||
#define SYM_NM 0xF1
|
#define SYM_NM 0xF1
|
||||||
#define SYM_DIST 0x22
|
#define SYM_DIST 0x22
|
||||||
#define SYM_FLY 0x9C
|
#define SYM_FLY 0x9C
|
||||||
|
#define SYM_EFF 0xF2
|
||||||
|
|
||||||
void AP_OSD_Screen::set_backend(AP_OSD_Backend *_backend)
|
void AP_OSD_Screen::set_backend(AP_OSD_Backend *_backend)
|
||||||
{
|
{
|
||||||
|
@ -811,6 +820,7 @@ void AP_OSD_Screen::draw_temp(uint8_t x, uint8_t y)
|
||||||
backend->write(x, y, false, "%3d%c", (int)u_scale(TEMPERATURE, tmp), u_icon(TEMPERATURE));
|
backend->write(x, y, false, "%3d%c", (int)u_scale(TEMPERATURE, tmp), u_icon(TEMPERATURE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void AP_OSD_Screen::draw_hdop(uint8_t x, uint8_t y)
|
void AP_OSD_Screen::draw_hdop(uint8_t x, uint8_t y)
|
||||||
{
|
{
|
||||||
AP_GPS & gps = AP::gps();
|
AP_GPS & gps = AP::gps();
|
||||||
|
@ -862,9 +872,42 @@ void AP_OSD_Screen::draw_flightime(uint8_t x, uint8_t y)
|
||||||
if (stats) {
|
if (stats) {
|
||||||
uint32_t t = stats->get_flight_time_s();
|
uint32_t t = stats->get_flight_time_s();
|
||||||
backend->write(x, y, false, "%c%3u:%02u", SYM_FLY, t/60, t%60);
|
backend->write(x, y, false, "%c%3u:%02u", SYM_FLY, t/60, t%60);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AP_OSD_Screen::draw_eff(uint8_t x, uint8_t y)
|
||||||
|
{
|
||||||
|
AP_BattMonitor &battery = AP_BattMonitor::battery();
|
||||||
|
AP_AHRS &ahrs = AP::ahrs();
|
||||||
|
Vector2f v = ahrs.groundspeed_vector();
|
||||||
|
float speed = u_scale(SPEED,v.length());
|
||||||
|
if (speed > 2.0){
|
||||||
|
backend->write(x, y, false, "%c%3d%c", SYM_EFF,int(1000*battery.current_amps()/speed),SYM_MAH);
|
||||||
|
} else {
|
||||||
|
backend->write(x, y, false, "%c---%c", SYM_EFF,SYM_MAH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AP_OSD_Screen::draw_climbeff(uint8_t x, uint8_t y)
|
||||||
|
{
|
||||||
|
char unit_icon = u_icon(DISTANCE);
|
||||||
|
Vector3f v;
|
||||||
|
float vspd;
|
||||||
|
if (AP::ahrs().get_velocity_NED(v)) {
|
||||||
|
vspd = -v.z;
|
||||||
|
} else {
|
||||||
|
vspd = AP::baro().get_climb_rate();
|
||||||
|
}
|
||||||
|
if (vspd < 0.0) vspd = 0.0;
|
||||||
|
AP_BattMonitor &battery = AP_BattMonitor::battery();
|
||||||
|
float amps = battery.current_amps();
|
||||||
|
if (amps > 0.0) {
|
||||||
|
backend->write(x, y, false,"%c%c%3.1f%c",SYM_PTCHUP,SYM_EFF,(3.6 * u_scale(VSPEED,vspd)/amps),unit_icon);
|
||||||
|
} else {
|
||||||
|
backend->write(x, y, false,"%c%c---%c",SYM_PTCHUP,SYM_EFF,unit_icon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define DRAW_SETTING(n) if (n.enabled) draw_ ## n(n.xpos, n.ypos)
|
#define DRAW_SETTING(n) if (n.enabled) draw_ ## n(n.xpos, n.ypos)
|
||||||
|
|
||||||
void AP_OSD_Screen::draw(void)
|
void AP_OSD_Screen::draw(void)
|
||||||
|
@ -911,6 +954,7 @@ void AP_OSD_Screen::draw(void)
|
||||||
DRAW_SETTING(gps_longitude);
|
DRAW_SETTING(gps_longitude);
|
||||||
DRAW_SETTING(dist);
|
DRAW_SETTING(dist);
|
||||||
DRAW_SETTING(stat);
|
DRAW_SETTING(stat);
|
||||||
|
DRAW_SETTING(climbeff);
|
||||||
|
DRAW_SETTING(eff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15487,60 +15487,60 @@ MAX7456
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10101000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10100000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
00000001
|
||||||
|
01010100
|
||||||
|
00000010
|
||||||
|
10100001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010000
|
||||||
01010101
|
00010101
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 7.8 KiB |
|
@ -15487,60 +15487,60 @@ MAX7456
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10101000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10100000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
00000001
|
||||||
|
01010100
|
||||||
|
00000010
|
||||||
|
10100001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010000
|
||||||
01010101
|
00010101
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 8.6 KiB |
|
@ -15487,60 +15487,60 @@ MAX7456
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10101000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10100000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
00000001
|
||||||
|
01010100
|
||||||
|
00000010
|
||||||
|
10100001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010000
|
||||||
01010101
|
00010101
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 9.1 KiB |
|
@ -15487,60 +15487,60 @@ MAX7456
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10101000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10100000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
00000001
|
||||||
|
01010100
|
||||||
|
00000010
|
||||||
|
10100001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010000
|
||||||
01010101
|
00010101
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 8.6 KiB |
|
@ -15487,60 +15487,60 @@ MAX7456
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00100000
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00101010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
|
00000000
|
||||||
|
00000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10101000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10100000
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010100
|
||||||
|
10000000
|
||||||
|
00000001
|
||||||
|
01010100
|
||||||
|
00000010
|
||||||
|
10100001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
10000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00000001
|
||||||
01010101
|
01010101
|
||||||
|
01010010
|
||||||
|
00010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010000
|
||||||
01010101
|
00010101
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
01010101
|
01010101
|
||||||
|
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 8.0 KiB |