eive-obsw/linux/acs/GPSDefinitions.h

120 lines
4.7 KiB
C
Raw Normal View History

2023-03-26 16:13:54 +02:00
#ifndef MISSION_ACS_ARCHIVE_GPSDEFINITIONS_H_
#define MISSION_ACS_ARCHIVE_GPSDEFINITIONS_H_
2021-06-15 17:07:47 +02:00
2022-12-12 10:06:55 +01:00
#include "eive/eventSubsystemIds.h"
2021-06-24 11:42:40 +02:00
#include "fsfw/datapoollocal/StaticLocalDataSet.h"
2022-01-18 11:41:19 +01:00
#include "fsfw/devicehandlers/DeviceHandlerIF.h"
2021-06-15 17:07:47 +02:00
namespace GpsHyperion {
enum FixMode : uint8_t { NOT_SEEN = 0, NO_FIX = 1, FIX_2D = 2, FIX_3D = 3 };
2022-04-07 17:23:50 +02:00
2024-03-18 17:21:08 +01:00
enum GnssChip : uint8_t { A_SIDE = 0, B_SIDE = 1 };
2022-04-07 17:23:50 +02:00
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::GPS_HANDLER;
//! [EXPORT] : [COMMENT] Fix has changed. P1: New fix. P2: Missed fix changes
2022-04-07 17:23:50 +02:00
//! 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);
2024-04-09 09:59:21 +02:00
//! [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.
2024-03-13 16:08:21 +01:00
static constexpr Event CANT_GET_FIX = event::makeEvent(SUBSYSTEM_ID, 1, severity::MEDIUM);
2024-03-18 17:21:08 +01:00
//! [EXPORT] : [COMMENT] Failed to reset an GNNS Device. P1: Board-Side.
static constexpr Event RESET_FAIL = event::makeEvent(SUBSYSTEM_ID, 2, severity::HIGH);
2022-04-07 17:23:50 +02:00
2021-06-15 17:07:47 +02:00
static constexpr DeviceCommandId_t GPS_REPLY = 0;
2022-05-25 10:59:20 +02:00
static constexpr DeviceCommandId_t TRIGGER_RESET_PIN_GNSS = 5;
2021-06-15 17:07:47 +02:00
2023-08-04 10:50:19 +02:00
enum SetIds : uint32_t {
CORE_DATASET,
SKYVIEW_DATASET,
};
2021-06-15 17:07:47 +02:00
2022-01-18 11:41:19 +01:00
enum GpsPoolIds : lp_id_t {
2023-08-04 10:50:19 +02:00
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,
2021-06-15 17:07:47 +02:00
};
2023-08-04 10:50:19 +02:00
static constexpr uint8_t CORE_DATASET_ENTRIES = 14;
static constexpr uint8_t SKYVIEW_ENTRIES = 6;
static constexpr uint8_t MAX_SATELLITES = 30;
2022-01-18 11:41:19 +01:00
} // namespace GpsHyperion
2023-08-04 10:50:19 +02:00
class GpsPrimaryDataset : public StaticLocalDataSet<GpsHyperion::CORE_DATASET_ENTRIES> {
2022-01-18 11:41:19 +01:00
public:
2023-08-04 10:50:19 +02:00
GpsPrimaryDataset(object_id_t gpsId)
: StaticLocalDataSet(sid_t(gpsId, GpsHyperion::CORE_DATASET)) {
2022-01-18 11:41:19 +01:00
setAllVariablesReadOnly();
}
lp_var_t<double> latitude = lp_var_t<double>(sid.objectId, GpsHyperion::LATITUDE, this);
lp_var_t<double> longitude = lp_var_t<double>(sid.objectId, GpsHyperion::LONGITUDE, this);
lp_var_t<double> altitude = lp_var_t<double>(sid.objectId, GpsHyperion::ALTITUDE, this);
lp_var_t<double> speed = lp_var_t<double>(sid.objectId, GpsHyperion::SPEED, this);
lp_var_t<uint8_t> fixMode = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::FIX_MODE, this);
lp_var_t<uint8_t> satInUse = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::SATS_IN_USE, this);
lp_var_t<uint8_t> satInView = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::SATS_IN_VIEW, this);
lp_var_t<uint16_t> year = lp_var_t<uint16_t>(sid.objectId, GpsHyperion::YEAR, this);
lp_var_t<uint8_t> month = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::MONTH, this);
lp_var_t<uint8_t> day = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::DAY, this);
lp_var_t<uint8_t> hours = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::HOURS, this);
lp_var_t<uint8_t> minutes = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::MINUTES, this);
lp_var_t<uint8_t> seconds = lp_var_t<uint8_t>(sid.objectId, GpsHyperion::SECONDS, this);
lp_var_t<uint32_t> unixSeconds =
lp_var_t<uint32_t>(sid.objectId, GpsHyperion::UNIX_SECONDS, this);
private:
2023-02-05 13:13:09 +01:00
friend class GpsHyperionLinuxController;
2023-02-23 17:08:55 +01:00
friend class GpsCtrlDummy;
2022-01-18 11:41:19 +01:00
GpsPrimaryDataset(HasLocalDataPoolIF* hkOwner)
2023-08-04 10:50:19 +02:00
: StaticLocalDataSet(hkOwner, GpsHyperion::CORE_DATASET) {}
};
class SkyviewDataset : public StaticLocalDataSet<GpsHyperion::SKYVIEW_ENTRIES> {
public:
SkyviewDataset(object_id_t gpsId)
: StaticLocalDataSet(sid_t(gpsId, GpsHyperion::SKYVIEW_DATASET)) {
setAllVariablesReadOnly();
}
lp_var_t<double> unixSeconds =
lp_var_t<double>(sid.objectId, GpsHyperion::SKYVIEW_UNIX_SECONDS, this);
lp_vec_t<int16_t, GpsHyperion::MAX_SATELLITES> prn_id =
lp_vec_t<int16_t, GpsHyperion::MAX_SATELLITES>(sid.objectId, GpsHyperion::PRN_ID, this);
lp_vec_t<int16_t, GpsHyperion::MAX_SATELLITES> azimuth =
lp_vec_t<int16_t, GpsHyperion::MAX_SATELLITES>(sid.objectId, GpsHyperion::AZIMUTH, this);
lp_vec_t<int16_t, GpsHyperion::MAX_SATELLITES> elevation =
lp_vec_t<int16_t, GpsHyperion::MAX_SATELLITES>(sid.objectId, GpsHyperion::ELEVATION, this);
2023-08-04 12:22:31 +02:00
lp_vec_t<double, GpsHyperion::MAX_SATELLITES> signal2noise =
lp_vec_t<double, GpsHyperion::MAX_SATELLITES>(sid.objectId, GpsHyperion::SIGNAL2NOISE, this);
2023-08-04 10:50:19 +02:00
lp_vec_t<uint8_t, GpsHyperion::MAX_SATELLITES> used =
lp_vec_t<uint8_t, GpsHyperion::MAX_SATELLITES>(sid.objectId, GpsHyperion::USED, this);
private:
friend class GpsHyperionLinuxController;
friend class GpsCtrlDummy;
SkyviewDataset(HasLocalDataPoolIF* hkOwner)
: StaticLocalDataSet(hkOwner, GpsHyperion::SKYVIEW_DATASET) {}
2021-06-15 17:07:47 +02:00
};
2023-03-26 16:13:54 +02:00
#endif /* MISSION_ACS_ARCHIVE_GPSDEFINITIONS_H_ */