#ifndef MISSION_DEVICES_DEVICEDEFINITIONS_SYRLINKSDEFINITIONS_H_ #define MISSION_DEVICES_DEVICEDEFINITIONS_SYRLINKSDEFINITIONS_H_ #include "eive/eventSubsystemIds.h" #include "fsfw/devicehandlers/DeviceHandlerBase.h" namespace syrlinks { enum class ParameterId : uint8_t { DATARATE = 0 }; enum Submode { RX_ONLY, RX_AND_TX_DEFAULT_DATARATE, RX_AND_TX_LOW_DATARATE, RX_AND_TX_HIGH_DATARATE, RX_AND_TX_CW, NUM_SUBMODES }; static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::SYRLINKS; static constexpr Event FDIR_REACTION_IGNORED = event::makeEvent(SUBSYSTEM_ID, 0, severity::MEDIUM); //! [EXPORT] : [COMMENT] Transmitter is on now. P1: Submode, P2: Current default datarate. static constexpr Event TX_ON = event::makeEvent(SUBSYSTEM_ID, 1, severity::INFO); //! [EXPORT] : [COMMENT] Transmitter is off now. static constexpr Event TX_OFF = event::makeEvent(SUBSYSTEM_ID, 2, severity::INFO); static const DeviceCommandId_t NONE = 0; static const DeviceCommandId_t RESET_UNIT = 1; /** Reads out all status registers */ static const DeviceCommandId_t READ_RX_STATUS_REGISTERS = 2; /** Sets Tx mode to standby */ static const DeviceCommandId_t SET_TX_MODE_STANDBY = 3; /** Starts transmission mode. Only reached when clock signal is applying to the data tx input */ static const DeviceCommandId_t SET_TX_MODE_MODULATION = 4; /** Sends out a single carrier wave for testing purpose */ static const DeviceCommandId_t SET_TX_MODE_CW = 5; static const DeviceCommandId_t ACK_REPLY = 6; static const DeviceCommandId_t READ_TX_STATUS = 7; static const DeviceCommandId_t READ_TX_WAVEFORM = 8; static const DeviceCommandId_t READ_TX_AGC_VALUE_HIGH_BYTE = 9; static const DeviceCommandId_t READ_TX_AGC_VALUE_LOW_BYTE = 10; static const DeviceCommandId_t WRITE_LCL_CONFIG = 11; static const DeviceCommandId_t READ_LCL_CONFIG = 12; static const DeviceCommandId_t TEMP_POWER_AMPLIFIER_HIGH_BYTE = 13; static const DeviceCommandId_t TEMP_POWER_AMPLIFIER_LOW_BYTE = 14; static const DeviceCommandId_t TEMP_BASEBAND_BOARD_HIGH_BYTE = 15; static const DeviceCommandId_t TEMP_BASEBAND_BOARD_LOW_BYTE = 16; static const DeviceCommandId_t SET_WAVEFORM_0QPSK = 17; // After startup syrlinks always in BSPK configuration static const DeviceCommandId_t SET_WAVEFORM_BPSK = 18; static const DeviceCommandId_t ENABLE_DEBUG = 20; static const DeviceCommandId_t DISABLE_DEBUG = 21; /** Size of a simple transmission success response */ static const uint8_t ACK_SIZE = 12; static const uint8_t SIZE_CRC_AND_TERMINATION = 5; /** The size of the header with the message identifier and the payload size field */ static const uint8_t MESSAGE_HEADER_SIZE = 5; /** Size of reply to an rx status registers request */ static const uint8_t RX_STATUS_REGISTERS_REPLY_SIZE = 49; static const uint8_t READ_ONE_REGISTER_REPLY_SIE = 13; static const uint8_t RX_DATASET_ID = 0x1; static const uint8_t TX_DATASET_ID = 0x2; static const uint8_t TEMPERATURE_SET_ID = 0x3; static const size_t MAX_REPLY_SIZE = RX_STATUS_REGISTERS_REPLY_SIZE; static const size_t MAX_COMMAND_SIZE = 15; static const size_t CRC_FIELD_SIZE = 4; static const uint8_t RX_DATASET_SIZE = 8; static const uint8_t TX_DATASET_SIZE = 3; static const uint8_t TEMPERATURE_SET_SIZE = 3; enum SyrlinksPoolIds : lp_id_t { RX_STATUS, RX_SENSITIVITY, RX_FREQUENCY_SHIFT, RX_IQ_POWER, RX_AGC_VALUE, RX_DEMOD_EB, RX_DEMOD_N0, RX_DATA_RATE, TX_STATUS, TX_CONV_DIFF, TX_CONV_FILTER, TX_WAVEFORM, TX_PCM_INDEX, TX_AGC_VALUE, TEMP_POWER_AMPLIFIER, TEMP_BASEBAND_BOARD }; class RxDataset : public StaticLocalDataSet { public: RxDataset(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, RX_DATASET_ID) {} RxDataset(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, RX_DATASET_ID)) {} lp_var_t rxStatus = lp_var_t(sid.objectId, RX_STATUS, this); lp_var_t rxSensitivity = lp_var_t(sid.objectId, RX_SENSITIVITY, this); lp_var_t rxFrequencyShift = lp_var_t(sid.objectId, RX_FREQUENCY_SHIFT, this); lp_var_t rxIqPower = lp_var_t(sid.objectId, RX_IQ_POWER, this); lp_var_t rxAgcValue = lp_var_t(sid.objectId, RX_AGC_VALUE, this); lp_var_t rxDemodEb = lp_var_t(sid.objectId, RX_DEMOD_EB, this); lp_var_t rxDemodN0 = lp_var_t(sid.objectId, RX_DEMOD_N0, this); lp_var_t rxDataRate = lp_var_t(sid.objectId, RX_DATA_RATE, this); }; class TxDataset : public StaticLocalDataSet { public: TxDataset(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, TX_DATASET_ID) {} TxDataset(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, TX_DATASET_ID)) {} lp_var_t txStatus = lp_var_t(sid.objectId, TX_STATUS, this); lp_var_t txWaveform = lp_var_t(sid.objectId, TX_WAVEFORM, this); lp_var_t txAgcValue = lp_var_t(sid.objectId, TX_AGC_VALUE, this); }; class TemperatureSet : public StaticLocalDataSet { public: TemperatureSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, TEMPERATURE_SET_ID) {} TemperatureSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, TEMPERATURE_SET_ID)) {} lp_var_t temperaturePowerAmplifier = lp_var_t(sid.objectId, TEMP_POWER_AMPLIFIER, this); lp_var_t temperatureBasebandBoard = lp_var_t(sid.objectId, TEMP_BASEBAND_BOARD, this); }; } // namespace syrlinks #endif /* MISSION_DEVICES_DEVICEDEFINITIONS_SYRLINKSDEFINITIONS_H_ */