123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #pragma once
- #include <AP_Common/AP_Common.h>
- #include <AP_HAL/AP_HAL.h>
- #include "AP_GPS.h"
- #include "GPS_Backend.h"
- #include <AP_UAVCAN/AP_UAVCAN.h>
- class FixCb;
- class AuxCb;
- class AP_GPS_UAVCAN : public AP_GPS_Backend {
- public:
- AP_GPS_UAVCAN(AP_GPS &_gps, AP_GPS::GPS_State &_state);
- ~AP_GPS_UAVCAN();
- bool read() override;
- const char *name() const override { return "UAVCAN"; }
- static void subscribe_msgs(AP_UAVCAN* ap_uavcan);
- static AP_GPS_Backend* probe(AP_GPS &_gps, AP_GPS::GPS_State &_state);
- static void handle_fix_msg_trampoline(AP_UAVCAN* ap_uavcan, uint8_t node_id, const FixCb &cb);
- static void handle_aux_msg_trampoline(AP_UAVCAN* ap_uavcan, uint8_t node_id, const AuxCb &cb);
- private:
- void handle_fix_msg(const FixCb &cb);
- void handle_aux_msg(const AuxCb &cb);
- static bool take_registry();
- static void give_registry();
- static AP_GPS_UAVCAN* get_uavcan_backend(AP_UAVCAN* ap_uavcan, uint8_t node_id);
- bool _new_data;
- AP_GPS::GPS_State interim_state;
- HAL_Semaphore sem;
- uint8_t _detected_module;
-
- static struct DetectedModules {
- AP_UAVCAN* ap_uavcan;
- uint8_t node_id;
- AP_GPS_UAVCAN* driver;
- } _detected_modules[GPS_MAX_RECEIVERS];
- static HAL_Semaphore _sem_registry;
- };
|