/** * @file sensorData.h * @author Alexander Klein (alex@kleiax.de) * @brief * @version 0.1 * @date 2023-09-02 * * @copyright Copyright (c) 2023 * */ #ifndef SENSOR_DATA_H #define SENSOR_DATA_H #include #include #include #include "component.h" #include "calibrateCompass.h" #include #include #include #include "calcAzimuth.h" #include "ntripClient.h" #include "point.h" class Sensors; class SensorData : public Component { public: SensorData(); ~SensorData(); void enableNtrip(String host, uint16_t port, String mountPoint, String user, String password); void enableGnss(SPIClass *spiPort, uint8_t csPin); void enableGnss(); void enableRealCompass(); void enableCalcCompass(); void enableGyroskop(); // Interface Const kram int16_t getRealAzimuth() const { return this->realAzimuth; } int16_t getCalcAzimuth() const { return this->calcAzimuth; } CalcAzimuth::State getCalcAzimuthState() const; Point getCurrentPos() const { return this->currentPosition; } const UBX_NAV_PVT_data_t *getGnssData() const { return this->gnssData; }; NTRIPClientStates getNtripState() const; const float *getGyroData() const { return this->yawPitchRoll; } CalcAzimuth *getCalcCompass() const { return this->calcCompass; } QMC5883LCompass *getRealCompass() const { return this->realCompass; } NTRIPClient *getNtripClient() const { return this->ntripClient; } MPU6050 *getGyroskop() const { return this->gyroskop; } // static /** * @brief Set the output status for PVTdata. * * If this is true, a lot of information from the gnss module will be printed in * the interval of navigation frequency. * * @param status */ static void setOutputStatusPrintPVTdata(bool status); private: void run() override; void runAsChild() override; void initGnss(); void updateUbxData(); QMC5883LCompass *realCompass = nullptr; CalcAzimuth *calcCompass = nullptr; SFE_UBLOX_GNSS *gnss = nullptr; NTRIPClient *ntripClient = nullptr; MPU6050 *gyroskop = nullptr; UBX_NAV_PVT_data_t *gnssData = nullptr; Point currentPosition; Quaternion quaternion; VectorFloat gravity; char *host = nullptr; char *mountPoint = nullptr; char *user = nullptr; char *password = nullptr; bool isNtripInit = false; uint8_t gyroBuffer[64]; uint16_t port = 0; int16_t realAzimuth = INT16_MAX; int16_t calcAzimuth = INT16_MAX; uint32_t lastUbxUpdate = 0; float yawPitchRoll[3]{0, 0, 0}; // static static void printPVTdata(UBX_NAV_PVT_data_t *ubxDataStruct); static void savePVTdata(UBX_NAV_PVT_data_t *ubxDataStruct); static UBX_NAV_PVT_data_t *ubxDataStatic; static uint32_t ubxUpdateTimeStatic; static bool outputStatusPrintPVTdata; static constexpr uint8_t loopDelay = 50; }; #endif // SENSOR_DATA_H