Files
dragonpilot/selfdrive/ui/navd/route_engine.h
Willem Melching 5069852573 navd: render map into VisionIPC (#22800)
* navd: render simple map

* render route

* offscreen rendering

* cleanup

* more cleanup

* render into visionIPC

* rename class

* split position update from route update

* stop broadcast if not active

* gate vipc server behind flag

* add python library

* faster

* no vipc from python

* put behind extras

* only send when loaded

* add glFlush just to be sure

* cleanup settings into helper function

* function ordering

* broadcast thumbnails

* put behind param

* adjust zoom level

* add route to python bindings

* revert that freq change

* add logging if map rendering is enabled

* use rlogs if available

* bump cereal
2021-11-26 14:38:02 +01:00

63 lines
1.3 KiB
C++

#pragma once
#include <optional>
#include <QThread>
#include <QGeoCoordinate>
#include <QGeoManeuver>
#include <QGeoRouteRequest>
#include <QGeoRouteSegment>
#include <QGeoRoutingManager>
#include <QGeoServiceProvider>
#include <QTimer>
#include <QMapboxGL>
#include "cereal/messaging/messaging.h"
class RouteEngine : public QObject {
Q_OBJECT
public:
RouteEngine();
SubMaster *sm;
PubMaster *pm;
QTimer* msg_timer;
QTimer* route_timer;
std::optional<int> ui_pid;
// Route
bool gps_ok = false;
QGeoServiceProvider *geoservice_provider;
QGeoRoutingManager *routing_manager;
QGeoRoute route;
QGeoRouteSegment segment;
QMapbox::Coordinate nav_destination;
// Position
std::optional<QMapbox::Coordinate> last_position;
std::optional<float> last_bearing;
bool localizer_valid = false;
// Route recompute
bool active = false;
int recompute_backoff = 0;
int recompute_countdown = 0;
void calculateRoute(QMapbox::Coordinate destination);
void clearRoute();
bool shouldRecompute();
private slots:
void routeUpdate();
void msgUpdate();
void routeCalculated(QGeoRouteReply *reply);
void recomputeRoute();
void sendRoute();
signals:
void positionUpdated(QMapbox::Coordinate position, float bearing);
void routeUpdated(QList<QGeoCoordinate> coordinates);
};