mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2024-12-15 12:38:11 +00:00
Geomap speed display (#1722)
* speed to geomap * Add speed to map * Fix hidden state * UI fix on ADSB tx * UI fixes
This commit is contained in:
parent
d303098e35
commit
82a6ae0791
@ -293,6 +293,7 @@ AISRecentEntryDetailView::AISRecentEntryDetailView(NavigationView& nav) {
|
|||||||
ais::format::text(entry_.name),
|
ais::format::text(entry_.name),
|
||||||
0,
|
0,
|
||||||
GeoPos::alt_unit::METERS,
|
GeoPos::alt_unit::METERS,
|
||||||
|
GeoPos::spd_unit::NONE,
|
||||||
ais::format::latlon_float(entry_.last_position.latitude.normalized()),
|
ais::format::latlon_float(entry_.last_position.latitude.normalized()),
|
||||||
ais::format::latlon_float(entry_.last_position.longitude.normalized()),
|
ais::format::latlon_float(entry_.last_position.longitude.normalized()),
|
||||||
entry_.last_position.true_heading,
|
entry_.last_position.true_heading,
|
||||||
@ -315,7 +316,7 @@ AISRecentEntryDetailView& AISRecentEntryDetailView::operator=(const AISRecentEnt
|
|||||||
|
|
||||||
void AISRecentEntryDetailView::update_position() {
|
void AISRecentEntryDetailView::update_position() {
|
||||||
if (send_updates)
|
if (send_updates)
|
||||||
geomap_view->update_position(ais::format::latlon_float(entry_.last_position.latitude.normalized()), ais::format::latlon_float(entry_.last_position.longitude.normalized()), (float)entry_.last_position.true_heading, 0);
|
geomap_view->update_position(ais::format::latlon_float(entry_.last_position.latitude.normalized()), ais::format::latlon_float(entry_.last_position.longitude.normalized()), (float)entry_.last_position.true_heading, 0, entry_.last_position.speed_over_ground);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AISRecentEntryDetailView::focus() {
|
void AISRecentEntryDetailView::focus() {
|
||||||
|
@ -266,6 +266,7 @@ ADSBRxDetailsView::ADSBRxDetailsView(
|
|||||||
get_map_tag(entry_),
|
get_map_tag(entry_),
|
||||||
entry_.pos.altitude,
|
entry_.pos.altitude,
|
||||||
GeoPos::alt_unit::FEET,
|
GeoPos::alt_unit::FEET,
|
||||||
|
GeoPos::spd_unit::MPH,
|
||||||
entry_.pos.latitude,
|
entry_.pos.latitude,
|
||||||
entry_.pos.longitude,
|
entry_.pos.longitude,
|
||||||
entry_.velo.heading);
|
entry_.velo.heading);
|
||||||
@ -290,7 +291,7 @@ void ADSBRxDetailsView::update(const AircraftRecentEntry& entry) {
|
|||||||
} else if (geomap_view_) {
|
} else if (geomap_view_) {
|
||||||
// Map is showing, update the current item.
|
// Map is showing, update the current item.
|
||||||
geomap_view_->update_tag(get_map_tag(entry_));
|
geomap_view_->update_tag(get_map_tag(entry_));
|
||||||
geomap_view_->update_position(entry.pos.latitude, entry.pos.longitude, entry.velo.heading, entry.pos.altitude);
|
geomap_view_->update_position(entry.pos.latitude, entry.pos.longitude, entry.velo.heading, entry.pos.altitude, entry.velo.speed);
|
||||||
} else {
|
} else {
|
||||||
// Details is showing, update details.
|
// Details is showing, update details.
|
||||||
refresh_ui();
|
refresh_ui();
|
||||||
|
@ -85,10 +85,12 @@ ADSBPositionView::ADSBPositionView(
|
|||||||
nav.push<GeoMapView>(
|
nav.push<GeoMapView>(
|
||||||
geopos.altitude(),
|
geopos.altitude(),
|
||||||
GeoPos::alt_unit::FEET,
|
GeoPos::alt_unit::FEET,
|
||||||
|
GeoPos::spd_unit::HIDDEN,
|
||||||
geopos.lat(),
|
geopos.lat(),
|
||||||
geopos.lon(),
|
geopos.lon(),
|
||||||
[this](int32_t altitude, float lat, float lon) {
|
[this](int32_t altitude, float lat, float lon, int32_t speed) {
|
||||||
geopos.set_altitude(altitude);
|
geopos.set_altitude(altitude);
|
||||||
|
geopos.set_speed(speed);
|
||||||
geopos.set_lat(lat);
|
geopos.set_lat(lat);
|
||||||
geopos.set_lon(lon);
|
geopos.set_lon(lon);
|
||||||
});
|
});
|
||||||
|
@ -58,7 +58,8 @@ class ADSBPositionView : public OptionTabView {
|
|||||||
private:
|
private:
|
||||||
GeoPos geopos{
|
GeoPos geopos{
|
||||||
{0, 2 * 16},
|
{0, 2 * 16},
|
||||||
GeoPos::FEET};
|
GeoPos::FEET,
|
||||||
|
GeoPos::HIDDEN};
|
||||||
|
|
||||||
Button button_set_map{
|
Button button_set_map{
|
||||||
{8 * 8, 6 * 16, 14 * 8, 2 * 16},
|
{8 * 8, 6 * 16, 14 * 8, 2 * 16},
|
||||||
|
@ -317,7 +317,7 @@ void APRSDetailsView::update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (send_updates)
|
if (send_updates)
|
||||||
geomap_view->update_position(entry_copy.pos.latitude, entry_copy.pos.longitude, 0, 0);
|
geomap_view->update_position(entry_copy.pos.latitude, entry_copy.pos.longitude, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
APRSDetailsView::~APRSDetailsView() {
|
APRSDetailsView::~APRSDetailsView() {
|
||||||
@ -339,6 +339,7 @@ APRSDetailsView::APRSDetailsView(
|
|||||||
entry_copy.source_formatted,
|
entry_copy.source_formatted,
|
||||||
0, // entry_copy.pos.altitude,
|
0, // entry_copy.pos.altitude,
|
||||||
GeoPos::alt_unit::FEET,
|
GeoPos::alt_unit::FEET,
|
||||||
|
GeoPos::spd_unit::HIDDEN,
|
||||||
entry_copy.pos.latitude,
|
entry_copy.pos.latitude,
|
||||||
entry_copy.pos.longitude,
|
entry_copy.pos.longitude,
|
||||||
0, /*entry_copy.velo.heading,*/
|
0, /*entry_copy.velo.heading,*/
|
||||||
|
@ -94,6 +94,7 @@ SondeView::SondeView(NavigationView& nav)
|
|||||||
sonde_id,
|
sonde_id,
|
||||||
gps_info.alt,
|
gps_info.alt,
|
||||||
GeoPos::alt_unit::METERS,
|
GeoPos::alt_unit::METERS,
|
||||||
|
GeoPos::spd_unit::HIDDEN,
|
||||||
gps_info.lat,
|
gps_info.lat,
|
||||||
gps_info.lon,
|
gps_info.lon,
|
||||||
999); // set a dummy heading out of range to draw a cross...probably not ideal?
|
999); // set a dummy heading out of range to draw a cross...probably not ideal?
|
||||||
|
@ -162,7 +162,8 @@ class SondeView : public View {
|
|||||||
|
|
||||||
GeoPos geopos{
|
GeoPos geopos{
|
||||||
{0, 12 * 16},
|
{0, 12 * 16},
|
||||||
GeoPos::alt_unit::METERS};
|
GeoPos::alt_unit::METERS,
|
||||||
|
GeoPos::spd_unit::HIDDEN};
|
||||||
|
|
||||||
Button button_see_qr{
|
Button button_see_qr{
|
||||||
{2 * 8, 15 * 16, 12 * 8, 3 * 16},
|
{2 * 8, 15 * 16, 12 * 8, 3 * 16},
|
||||||
|
@ -38,13 +38,17 @@ namespace ui {
|
|||||||
|
|
||||||
GeoPos::GeoPos(
|
GeoPos::GeoPos(
|
||||||
const Point pos,
|
const Point pos,
|
||||||
const alt_unit altitude_unit)
|
const alt_unit altitude_unit,
|
||||||
: altitude_unit_(altitude_unit) {
|
const spd_unit speed_unit)
|
||||||
|
: altitude_unit_(altitude_unit), speed_unit_(speed_unit) {
|
||||||
set_parent_rect({pos, {30 * 8, 3 * 16}});
|
set_parent_rect({pos, {30 * 8, 3 * 16}});
|
||||||
|
|
||||||
add_children({&labels_position,
|
add_children({&labels_position,
|
||||||
|
&label_spd_position,
|
||||||
&field_altitude,
|
&field_altitude,
|
||||||
|
&field_speed,
|
||||||
&text_alt_unit,
|
&text_alt_unit,
|
||||||
|
&text_speed_unit,
|
||||||
&field_lat_degrees,
|
&field_lat_degrees,
|
||||||
&field_lat_minutes,
|
&field_lat_minutes,
|
||||||
&field_lat_seconds,
|
&field_lat_seconds,
|
||||||
@ -56,6 +60,7 @@ GeoPos::GeoPos(
|
|||||||
|
|
||||||
// Defaults
|
// Defaults
|
||||||
set_altitude(0);
|
set_altitude(0);
|
||||||
|
set_speed(0);
|
||||||
set_lat(0);
|
set_lat(0);
|
||||||
set_lon(0);
|
set_lon(0);
|
||||||
|
|
||||||
@ -67,10 +72,11 @@ GeoPos::GeoPos(
|
|||||||
text_lon_decimal.set(to_string_decimal(lon_value, 5));
|
text_lon_decimal.set(to_string_decimal(lon_value, 5));
|
||||||
|
|
||||||
if (on_change && report_change)
|
if (on_change && report_change)
|
||||||
on_change(altitude(), lat_value, lon_value);
|
on_change(altitude(), lat_value, lon_value, speed());
|
||||||
};
|
};
|
||||||
|
|
||||||
field_altitude.on_change = changed_fn;
|
field_altitude.on_change = changed_fn;
|
||||||
|
field_speed.on_change = changed_fn;
|
||||||
field_lat_degrees.on_change = changed_fn;
|
field_lat_degrees.on_change = changed_fn;
|
||||||
field_lat_minutes.on_change = changed_fn;
|
field_lat_minutes.on_change = changed_fn;
|
||||||
field_lat_seconds.on_change = changed_fn;
|
field_lat_seconds.on_change = changed_fn;
|
||||||
@ -79,11 +85,19 @@ GeoPos::GeoPos(
|
|||||||
field_lon_seconds.on_change = changed_fn;
|
field_lon_seconds.on_change = changed_fn;
|
||||||
|
|
||||||
text_alt_unit.set(altitude_unit_ ? "m" : "ft");
|
text_alt_unit.set(altitude_unit_ ? "m" : "ft");
|
||||||
|
if (speed_unit_ == KMPH) text_speed_unit.set("kmph");
|
||||||
|
if (speed_unit_ == MPH) text_speed_unit.set("mph");
|
||||||
|
if (speed_unit_ == HIDDEN) {
|
||||||
|
text_speed_unit.hidden(true);
|
||||||
|
label_spd_position.hidden(true);
|
||||||
|
field_speed.hidden(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeoPos::set_read_only(bool v) {
|
void GeoPos::set_read_only(bool v) {
|
||||||
// only setting altitude to read-only (allow manual panning via lat/lon fields)
|
// only setting altitude to read-only (allow manual panning via lat/lon fields)
|
||||||
field_altitude.set_focusable(!v);
|
field_altitude.set_focusable(!v);
|
||||||
|
field_speed.set_focusable(!v);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stupid hack to avoid an event loop
|
// Stupid hack to avoid an event loop
|
||||||
@ -98,14 +112,18 @@ void GeoPos::focus() {
|
|||||||
field_lat_degrees.focus();
|
field_lat_degrees.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeoPos::hide_altitude() {
|
void GeoPos::hide_altandspeed() {
|
||||||
// Color altitude grey to indicate it's not updated in manual panning mode
|
// Color altitude grey to indicate it's not updated in manual panning mode
|
||||||
field_altitude.set_style(&Styles::grey);
|
field_altitude.set_style(&Styles::grey);
|
||||||
|
field_speed.set_style(&Styles::grey);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeoPos::set_altitude(int32_t altitude) {
|
void GeoPos::set_altitude(int32_t altitude) {
|
||||||
field_altitude.set_value(altitude);
|
field_altitude.set_value(altitude);
|
||||||
}
|
}
|
||||||
|
void GeoPos::set_speed(int32_t speed) {
|
||||||
|
field_speed.set_value(speed);
|
||||||
|
}
|
||||||
|
|
||||||
void GeoPos::set_lat(float lat) {
|
void GeoPos::set_lat(float lat) {
|
||||||
field_lat_degrees.set_value(lat);
|
field_lat_degrees.set_value(lat);
|
||||||
@ -139,6 +157,10 @@ int32_t GeoPos::altitude() {
|
|||||||
return field_altitude.value();
|
return field_altitude.value();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int32_t GeoPos::speed() {
|
||||||
|
return field_speed.value();
|
||||||
|
};
|
||||||
|
|
||||||
GeoMap::GeoMap(
|
GeoMap::GeoMap(
|
||||||
Rect parent_rect)
|
Rect parent_rect)
|
||||||
: Widget{parent_rect}, markerListLen(0) {
|
: Widget{parent_rect}, markerListLen(0) {
|
||||||
@ -458,7 +480,7 @@ void GeoMapView::focus() {
|
|||||||
nav_.display_modal("No map", "No world_map.bin file in\n/ADSB/ directory", ABORT);
|
nav_.display_modal("No map", "No world_map.bin file in\n/ADSB/ directory", ABORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeoMapView::update_position(float lat, float lon, uint16_t angle, int32_t altitude) {
|
void GeoMapView::update_position(float lat, float lon, uint16_t angle, int32_t altitude, int32_t speed) {
|
||||||
if (geomap.manual_panning()) {
|
if (geomap.manual_panning()) {
|
||||||
geomap.set_dirty();
|
geomap.set_dirty();
|
||||||
return;
|
return;
|
||||||
@ -467,12 +489,14 @@ void GeoMapView::update_position(float lat, float lon, uint16_t angle, int32_t a
|
|||||||
lat_ = lat;
|
lat_ = lat;
|
||||||
lon_ = lon;
|
lon_ = lon;
|
||||||
altitude_ = altitude;
|
altitude_ = altitude;
|
||||||
|
speed_ = speed;
|
||||||
|
|
||||||
// Stupid hack to avoid an event loop
|
// Stupid hack to avoid an event loop
|
||||||
geopos.set_report_change(false);
|
geopos.set_report_change(false);
|
||||||
geopos.set_lat(lat_);
|
geopos.set_lat(lat_);
|
||||||
geopos.set_lon(lon_);
|
geopos.set_lon(lon_);
|
||||||
geopos.set_altitude(altitude_);
|
geopos.set_altitude(altitude_);
|
||||||
|
geopos.set_speed(speed_);
|
||||||
geopos.set_report_change(true);
|
geopos.set_report_change(true);
|
||||||
|
|
||||||
geomap.set_angle(angle);
|
geomap.set_angle(angle);
|
||||||
@ -491,11 +515,12 @@ void GeoMapView::setup() {
|
|||||||
geopos.set_lat(lat_);
|
geopos.set_lat(lat_);
|
||||||
geopos.set_lon(lon_);
|
geopos.set_lon(lon_);
|
||||||
|
|
||||||
geopos.on_change = [this](int32_t altitude, float lat, float lon) {
|
geopos.on_change = [this](int32_t altitude, float lat, float lon, int32_t speed) {
|
||||||
altitude_ = altitude;
|
altitude_ = altitude;
|
||||||
lat_ = lat;
|
lat_ = lat;
|
||||||
lon_ = lon;
|
lon_ = lon;
|
||||||
geopos.hide_altitude();
|
speed_ = speed;
|
||||||
|
geopos.hide_altandspeed();
|
||||||
geomap.set_manual_panning(true);
|
geomap.set_manual_panning(true);
|
||||||
geomap.move(lon_, lat_);
|
geomap.move(lon_, lat_);
|
||||||
geomap.set_dirty();
|
geomap.set_dirty();
|
||||||
@ -527,6 +552,7 @@ GeoMapView::GeoMapView(
|
|||||||
const std::string& tag,
|
const std::string& tag,
|
||||||
int32_t altitude,
|
int32_t altitude,
|
||||||
GeoPos::alt_unit altitude_unit,
|
GeoPos::alt_unit altitude_unit,
|
||||||
|
GeoPos::spd_unit speed_unit,
|
||||||
float lat,
|
float lat,
|
||||||
float lon,
|
float lon,
|
||||||
uint16_t angle,
|
uint16_t angle,
|
||||||
@ -534,6 +560,7 @@ GeoMapView::GeoMapView(
|
|||||||
: nav_(nav),
|
: nav_(nav),
|
||||||
altitude_(altitude),
|
altitude_(altitude),
|
||||||
altitude_unit_(altitude_unit),
|
altitude_unit_(altitude_unit),
|
||||||
|
speed_unit_(speed_unit),
|
||||||
lat_(lat),
|
lat_(lat),
|
||||||
lon_(lon),
|
lon_(lon),
|
||||||
angle_(angle),
|
angle_(angle),
|
||||||
@ -561,12 +588,14 @@ GeoMapView::GeoMapView(
|
|||||||
NavigationView& nav,
|
NavigationView& nav,
|
||||||
int32_t altitude,
|
int32_t altitude,
|
||||||
GeoPos::alt_unit altitude_unit,
|
GeoPos::alt_unit altitude_unit,
|
||||||
|
GeoPos::spd_unit speed_unit,
|
||||||
float lat,
|
float lat,
|
||||||
float lon,
|
float lon,
|
||||||
const std::function<void(int32_t, float, float)> on_done)
|
const std::function<void(int32_t, float, float, int32_t)> on_done)
|
||||||
: nav_(nav),
|
: nav_(nav),
|
||||||
altitude_(altitude),
|
altitude_(altitude),
|
||||||
altitude_unit_(altitude_unit),
|
altitude_unit_(altitude_unit),
|
||||||
|
speed_unit_(speed_unit),
|
||||||
lat_(lat),
|
lat_(lat),
|
||||||
lon_(lon) {
|
lon_(lon) {
|
||||||
mode_ = PROMPT;
|
mode_ = PROMPT;
|
||||||
@ -585,7 +614,7 @@ GeoMapView::GeoMapView(
|
|||||||
|
|
||||||
button_ok.on_select = [this, on_done, &nav](Button&) {
|
button_ok.on_select = [this, on_done, &nav](Button&) {
|
||||||
if (on_done)
|
if (on_done)
|
||||||
on_done(altitude_, lat_, lon_);
|
on_done(altitude_, lat_, lon_, speed_);
|
||||||
nav.pop();
|
nav.pop();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -62,19 +62,27 @@ class GeoPos : public View {
|
|||||||
FEET = 0,
|
FEET = 0,
|
||||||
METERS
|
METERS
|
||||||
};
|
};
|
||||||
|
enum spd_unit {
|
||||||
|
NONE = 0,
|
||||||
|
MPH,
|
||||||
|
KMPH,
|
||||||
|
HIDDEN = 255
|
||||||
|
};
|
||||||
|
|
||||||
std::function<void(int32_t, float, float)> on_change{};
|
std::function<void(int32_t, float, float, int32_t)> on_change{};
|
||||||
|
|
||||||
GeoPos(const Point pos, const alt_unit altitude_unit);
|
GeoPos(const Point pos, const alt_unit altitude_unit, const spd_unit speed_unit);
|
||||||
|
|
||||||
void focus() override;
|
void focus() override;
|
||||||
|
|
||||||
void set_read_only(bool v);
|
void set_read_only(bool v);
|
||||||
void set_altitude(int32_t altitude);
|
void set_altitude(int32_t altitude);
|
||||||
|
void set_speed(int32_t speed);
|
||||||
void set_lat(float lat);
|
void set_lat(float lat);
|
||||||
void set_lon(float lon);
|
void set_lon(float lon);
|
||||||
int32_t altitude();
|
int32_t altitude();
|
||||||
void hide_altitude();
|
int32_t speed();
|
||||||
|
void hide_altandspeed();
|
||||||
float lat();
|
float lat();
|
||||||
float lon();
|
float lon();
|
||||||
|
|
||||||
@ -84,22 +92,35 @@ class GeoPos : public View {
|
|||||||
bool read_only{false};
|
bool read_only{false};
|
||||||
bool report_change{true};
|
bool report_change{true};
|
||||||
alt_unit altitude_unit_{};
|
alt_unit altitude_unit_{};
|
||||||
|
spd_unit speed_unit_{};
|
||||||
|
|
||||||
Labels labels_position{
|
Labels labels_position{
|
||||||
{{1 * 8, 0 * 16}, "Alt:", Color::light_grey()},
|
{{1 * 8, 0 * 16}, "Alt:", Color::light_grey()},
|
||||||
{{1 * 8, 1 * 16}, "Lat: \xB0 ' \"", Color::light_grey()}, // 0xB0 is degree ° symbol in our 8x16 font
|
{{1 * 8, 1 * 16}, "Lat: \xB0 ' \"", Color::light_grey()}, // 0xB0 is degree ° symbol in our 8x16 font
|
||||||
{{1 * 8, 2 * 16}, "Lon: \xB0 ' \"", Color::light_grey()},
|
{{1 * 8, 2 * 16}, "Lon: \xB0 ' \"", Color::light_grey()},
|
||||||
};
|
};
|
||||||
|
Labels label_spd_position{
|
||||||
|
{{15 * 8, 0 * 16}, "Spd:", Color::light_grey()},
|
||||||
|
};
|
||||||
NumberField field_altitude{
|
NumberField field_altitude{
|
||||||
{6 * 8, 0 * 16},
|
{6 * 8, 0 * 16},
|
||||||
5,
|
5,
|
||||||
{-1000, 50000},
|
{-1000, 50000},
|
||||||
250,
|
250,
|
||||||
' '};
|
' '};
|
||||||
|
|
||||||
|
NumberField field_speed{
|
||||||
|
{19 * 8, 0 * 16},
|
||||||
|
4,
|
||||||
|
{0, 5000},
|
||||||
|
1,
|
||||||
|
' '};
|
||||||
Text text_alt_unit{
|
Text text_alt_unit{
|
||||||
{12 * 8, 0 * 16, 2 * 8, 16},
|
{12 * 8, 0 * 16, 2 * 8, 16},
|
||||||
""};
|
""};
|
||||||
|
Text text_speed_unit{
|
||||||
|
{25 * 8, 0 * 16, 4 * 8, 16},
|
||||||
|
""};
|
||||||
|
|
||||||
NumberField field_lat_degrees{
|
NumberField field_lat_degrees{
|
||||||
{5 * 8, 1 * 16},
|
{5 * 8, 1 * 16},
|
||||||
@ -224,6 +245,7 @@ class GeoMapView : public View {
|
|||||||
const std::string& tag,
|
const std::string& tag,
|
||||||
int32_t altitude,
|
int32_t altitude,
|
||||||
GeoPos::alt_unit altitude_unit,
|
GeoPos::alt_unit altitude_unit,
|
||||||
|
GeoPos::spd_unit speed_unit,
|
||||||
float lat,
|
float lat,
|
||||||
float lon,
|
float lon,
|
||||||
uint16_t angle,
|
uint16_t angle,
|
||||||
@ -231,9 +253,10 @@ class GeoMapView : public View {
|
|||||||
GeoMapView(NavigationView& nav,
|
GeoMapView(NavigationView& nav,
|
||||||
int32_t altitude,
|
int32_t altitude,
|
||||||
GeoPos::alt_unit altitude_unit,
|
GeoPos::alt_unit altitude_unit,
|
||||||
|
GeoPos::spd_unit speed_unit,
|
||||||
float lat,
|
float lat,
|
||||||
float lon,
|
float lon,
|
||||||
const std::function<void(int32_t, float, float)> on_done);
|
const std::function<void(int32_t, float, float, int32_t)> on_done);
|
||||||
~GeoMapView();
|
~GeoMapView();
|
||||||
|
|
||||||
GeoMapView(const GeoMapView&) = delete;
|
GeoMapView(const GeoMapView&) = delete;
|
||||||
@ -243,7 +266,7 @@ class GeoMapView : public View {
|
|||||||
|
|
||||||
void focus() override;
|
void focus() override;
|
||||||
|
|
||||||
void update_position(float lat, float lon, uint16_t angle, int32_t altitude);
|
void update_position(float lat, float lon, uint16_t angle, int32_t altitude, int32_t speed = 0);
|
||||||
|
|
||||||
std::string title() const override { return "Map view"; };
|
std::string title() const override { return "Map view"; };
|
||||||
|
|
||||||
@ -257,10 +280,12 @@ class GeoMapView : public View {
|
|||||||
|
|
||||||
void setup();
|
void setup();
|
||||||
|
|
||||||
const std::function<void(int32_t, float, float)> on_done{};
|
const std::function<void(int32_t, float, float, int32_t)> on_done{};
|
||||||
GeoMapMode mode_{};
|
GeoMapMode mode_{};
|
||||||
int32_t altitude_{};
|
int32_t altitude_{};
|
||||||
|
int32_t speed_{};
|
||||||
GeoPos::alt_unit altitude_unit_{};
|
GeoPos::alt_unit altitude_unit_{};
|
||||||
|
GeoPos::spd_unit speed_unit_{};
|
||||||
float lat_{};
|
float lat_{};
|
||||||
float lon_{};
|
float lon_{};
|
||||||
uint16_t angle_{};
|
uint16_t angle_{};
|
||||||
@ -270,7 +295,8 @@ class GeoMapView : public View {
|
|||||||
|
|
||||||
GeoPos geopos{
|
GeoPos geopos{
|
||||||
{0, 0},
|
{0, 0},
|
||||||
altitude_unit_};
|
altitude_unit_,
|
||||||
|
speed_unit_};
|
||||||
|
|
||||||
GeoMap geomap{
|
GeoMap geomap{
|
||||||
{0, GeoMap::banner_height, GeoMap::geomap_rect_width, GeoMap::geomap_rect_height}};
|
{0, GeoMap::banner_height, GeoMap::geomap_rect_width, GeoMap::geomap_rect_height}};
|
||||||
|
Loading…
Reference in New Issue
Block a user