Skip to content
Snippets Groups Projects
GPSProvider.h 2.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • /****************************************************************************
     *
    
    Gus Grubba's avatar
    Gus Grubba committed
     * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
    
     *
     * QGroundControl is licensed according to the terms in the file
     * COPYING.md in the root of the source code directory.
     *
     ****************************************************************************/
    
    
    
    #pragma once
    
    #include <QString>
    #include <QThread>
    #include <QByteArray>
    #include <QSerialPort>
    
    #include <atomic>
    
    #include "GPSPositionMessage.h"
    #include "Drivers/src/gps_helper.h"
    
    
    /**
     ** class GPSProvider
     * opens a GPS device and handles the protocol
     */
    class GPSProvider : public QThread
    {
        Q_OBJECT
    public:
    
    
        enum class GPSType {
            u_blox,
    
    Don Gagne's avatar
     
    Don Gagne committed
        GPSProvider(const QString& device,
                    GPSType type,
                    bool    enableSatInfo,
                    double  surveyInAccMeters,
                    int     surveryInDurationSecs,
                    bool    useFixedBaseLocation,
                    double  fixedBaseLatitude,
                    double  fixedBaseLongitude,
                    float   fixedBaseAltitudeMeters,
                    float   fixedBaseAccuracyMeters,
                    const std::atomic_bool& requestStop);
    
        ~GPSProvider();
    
        /**
         * this is called by the callback method
         */
        void gotRTCMData(uint8_t *data, size_t len);
    
    Don Gagne's avatar
     
    Don Gagne committed
    
    
    signals:
        void positionUpdate(GPSPositionMessage message);
        void satelliteInfoUpdate(GPSSatelliteMessage message);
        void RTCMDataUpdate(QByteArray message);
    
    Don Gagne's avatar
     
    Don Gagne committed
        void surveyInStatus(float duration, float accuracyMM, double latitude, double longitude, float altitude, bool valid, bool active);
    
    
    protected:
        void run();
    
    private:
        void publishGPSPosition();
        void publishGPSSatellite();
    
    	/**
    	 * callback from the driver for the platform specific stuff
    	 */
    	static int callbackEntry(GPSCallbackType type, void *data1, int data2, void *user);
    
    	int callback(GPSCallbackType type, void *data1, int data2);
    
        QString _device;
    
        GPSType _type;
    
    Don Gagne's avatar
    Don Gagne committed
        double  _surveyInAccMeters;
        int     _surveryInDurationSecs;
    
    Don Gagne's avatar
     
    Don Gagne committed
        bool    _useFixedBaseLoction;
        double  _fixedBaseLatitude;
        double  _fixedBaseLongitude;
        float   _fixedBaseAltitudeMeters;
        float   _fixedBaseAccuracyMeters;
    
    
    	struct vehicle_gps_position_s	_reportGpsPos;
    	struct satellite_info_s		*_pReportSatInfo = nullptr;
    
    	QSerialPort *_serial = nullptr;
    };