#pragma once #include #include #include #include #include #include #include #include #include #include #include "cereal/messaging/messaging.h" class RouteEngine : public QObject { Q_OBJECT public: RouteEngine(); SubMaster *sm; PubMaster *pm; QTimer* timer; std::optional ui_pid; // Route bool gps_ok = false; QGeoServiceProvider *geoservice_provider; QGeoRoutingManager *routing_manager; QGeoRoute route; QGeoRouteSegment segment; QMapbox::Coordinate nav_destination; // Position std::optional last_position; std::optional last_bearing; bool localizer_valid = false; // Route recompute int recompute_backoff = 0; int recompute_countdown = 0; void calculateRoute(QMapbox::Coordinate destination); void clearRoute(); bool shouldRecompute(); private slots: void timerUpdate(); void routeCalculated(QGeoRouteReply *reply); void recomputeRoute(); void sendRoute(); };