#ifndef MISSION_ACS_ARCHIVE_GPSDEFINITIONS_H_ #define MISSION_ACS_ARCHIVE_GPSDEFINITIONS_H_ #include "eive/eventSubsystemIds.h" #include "fsfw/datapoollocal/StaticLocalDataSet.h" #include "fsfw/devicehandlers/DeviceHandlerIF.h" namespace GpsHyperion { enum FixMode : uint8_t { NOT_SEEN = 0, NO_FIX = 1, FIX_2D = 2, FIX_3D = 3 }; enum GnssChip : uint8_t { A_SIDE = 0, B_SIDE = 1 }; static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::GPS_HANDLER; //! [EXPORT] : [COMMENT] Fix has changed. P1: New fix. P2: Missed fix changes //! 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix static constexpr Event GPS_FIX_CHANGE = event::makeEvent(SUBSYSTEM_ID, 0, severity::INFO); //! [EXPORT] : [COMMENT] Could not get fix in maximum allowed time. Trying to reset both GNSS //! devices. P1: Maximum allowed time to get a fix after the GPS was switched on. static constexpr Event CANT_GET_FIX = event::makeEvent(SUBSYSTEM_ID, 1, severity::MEDIUM); //! [EXPORT] : [COMMENT] Failed to reset an GNNS Device. P1: Board-Side. static constexpr Event RESET_FAIL = event::makeEvent(SUBSYSTEM_ID, 2, severity::HIGH); static constexpr DeviceCommandId_t GPS_REPLY = 0; static constexpr DeviceCommandId_t TRIGGER_RESET_PIN_GNSS = 5; enum SetIds : uint32_t { CORE_DATASET, SKYVIEW_DATASET, }; enum GpsPoolIds : lp_id_t { LATITUDE, LONGITUDE, ALTITUDE, SPEED, FIX_MODE, SATS_IN_USE, SATS_IN_VIEW, UNIX_SECONDS, YEAR, MONTH, DAY, HOURS, MINUTES, SECONDS, SKYVIEW_UNIX_SECONDS, PRN_ID, AZIMUTH, ELEVATION, SIGNAL2NOISE, USED, }; static constexpr uint8_t CORE_DATASET_ENTRIES = 14; static constexpr uint8_t SKYVIEW_ENTRIES = 6; static constexpr uint8_t MAX_SATELLITES = 30; } // namespace GpsHyperion class GpsPrimaryDataset : public StaticLocalDataSet { public: GpsPrimaryDataset(object_id_t gpsId) : StaticLocalDataSet(sid_t(gpsId, GpsHyperion::CORE_DATASET)) { setAllVariablesReadOnly(); } lp_var_t latitude = lp_var_t(sid.objectId, GpsHyperion::LATITUDE, this); lp_var_t longitude = lp_var_t(sid.objectId, GpsHyperion::LONGITUDE, this); lp_var_t altitude = lp_var_t(sid.objectId, GpsHyperion::ALTITUDE, this); lp_var_t speed = lp_var_t(sid.objectId, GpsHyperion::SPEED, this); lp_var_t fixMode = lp_var_t(sid.objectId, GpsHyperion::FIX_MODE, this); lp_var_t satInUse = lp_var_t(sid.objectId, GpsHyperion::SATS_IN_USE, this); lp_var_t satInView = lp_var_t(sid.objectId, GpsHyperion::SATS_IN_VIEW, this); lp_var_t year = lp_var_t(sid.objectId, GpsHyperion::YEAR, this); lp_var_t month = lp_var_t(sid.objectId, GpsHyperion::MONTH, this); lp_var_t day = lp_var_t(sid.objectId, GpsHyperion::DAY, this); lp_var_t hours = lp_var_t(sid.objectId, GpsHyperion::HOURS, this); lp_var_t minutes = lp_var_t(sid.objectId, GpsHyperion::MINUTES, this); lp_var_t seconds = lp_var_t(sid.objectId, GpsHyperion::SECONDS, this); lp_var_t unixSeconds = lp_var_t(sid.objectId, GpsHyperion::UNIX_SECONDS, this); private: friend class GpsHyperionLinuxController; friend class GpsCtrlDummy; GpsPrimaryDataset(HasLocalDataPoolIF* hkOwner) : StaticLocalDataSet(hkOwner, GpsHyperion::CORE_DATASET) {} }; class SkyviewDataset : public StaticLocalDataSet { public: SkyviewDataset(object_id_t gpsId) : StaticLocalDataSet(sid_t(gpsId, GpsHyperion::SKYVIEW_DATASET)) { setAllVariablesReadOnly(); } lp_var_t unixSeconds = lp_var_t(sid.objectId, GpsHyperion::SKYVIEW_UNIX_SECONDS, this); lp_vec_t prn_id = lp_vec_t(sid.objectId, GpsHyperion::PRN_ID, this); lp_vec_t azimuth = lp_vec_t(sid.objectId, GpsHyperion::AZIMUTH, this); lp_vec_t elevation = lp_vec_t(sid.objectId, GpsHyperion::ELEVATION, this); lp_vec_t signal2noise = lp_vec_t(sid.objectId, GpsHyperion::SIGNAL2NOISE, this); lp_vec_t used = lp_vec_t(sid.objectId, GpsHyperion::USED, this); private: friend class GpsHyperionLinuxController; friend class GpsCtrlDummy; SkyviewDataset(HasLocalDataPoolIF* hkOwner) : StaticLocalDataSet(hkOwner, GpsHyperion::SKYVIEW_DATASET) {} }; #endif /* MISSION_ACS_ARCHIVE_GPSDEFINITIONS_H_ */