#ifndef MISSION_DEVICES_SYRLINKSHKHANDLER_H_ #define MISSION_DEVICES_SYRLINKSHKHANDLER_H_ #include #include #include /** * @brief This is the device handler for the syrlinks transceiver. It handles the command * transmission and reading of housekeeping data via the housekeeping interface. The * transmission of telemetry and the reception of telecommands is handled by an additional * class. * * @author J. Meier */ class SyrlinksHkHandler: public DeviceHandlerBase { public: SyrlinksHkHandler(object_id_t objectId, object_id_t comIF, CookieIF * comCookie); virtual ~SyrlinksHkHandler(); protected: void doStartUp() override; void doShutDown() override; ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t * id) override; ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t * id) override; void fillCommandAndReplyMap() override; ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t * commandData,size_t commandDataLen) override; ReturnValue_t scanForReply(const uint8_t *start, size_t remainingSize, DeviceCommandId_t *foundId, size_t *foundLen) override; ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) override; void setNormalDatapoolEntriesInvalid() override; uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override; ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap, LocalDataPoolManager& poolManager) override; private: static const uint8_t INTERFACE_ID = CLASS_ID::SYRLINKS_HANDLER; static const ReturnValue_t CRC_FAILURE = MAKE_RETURN_CODE(0xA0); static const ReturnValue_t UART_FRAMIN_OR_PARITY_ERROR_ACK = MAKE_RETURN_CODE(0xA1); static const ReturnValue_t BAD_CHARACTER_ACK = MAKE_RETURN_CODE(0xA2); static const ReturnValue_t BAD_PARAMETER_VALUE_ACK = MAKE_RETURN_CODE(0xA3); static const ReturnValue_t BAD_END_OF_FRAME_ACK = MAKE_RETURN_CODE(0xA4); static const ReturnValue_t UNKNOWN_COMMAND_ID_ACK = MAKE_RETURN_CODE(0xA5); static const ReturnValue_t BAD_CRC_ACK = MAKE_RETURN_CODE(0xA6); static const ReturnValue_t REPLY_WRONG_SIZE = MAKE_RETURN_CODE(0xA7); static const uint8_t CRC_INITIAL_VALUE = 0x0; std::string resetCommand = ""; std::string readRxStatusRegCommand = ""; std::string setTxModeStandby = ""; /** W - write, 04 - 4 bytes in data field, 01 - value, 40 register to write value */ std::string setTxModeModulation = ""; std::string setTxModeCw = ""; SYRLINKS::RxStatusRegistersDataset rxStatusRegistersSet; static const uint8_t MAX_CMD_LEN = 3; uint8_t rememberRequestedSize = 0; uint8_t rememberCommandId = SYRLINKS::NONE; uint8_t cmdBuffer[MAX_CMD_LEN]; CommunicationStep communicationStep = CommunicationStep::START_ADC_CONVERSION; /** * @brief This function verifies the checksum of a status reply packet of the syrlinks. * * @param packet Pointer to the received status reply. * * @return RETURN_OK if successful, otherwise RETURN_FAILURE. * * @details A status reply only contains one byte of payload data giving information about * the transmission status. */ ReturnValue_t verifyTansmissionStatusReply(const uint8_t* packet); /** * @brief This function converts an uint16_t into its hexadecimal string representation. * * @param The value to convert. * * @return An std::string object containing the hex representation of intValue. */ std::string SyrlinksHkHandler::convertIntToHexString(uint16_t intValue); /** * @brief This function parses the status reply * @param status Pointer to the status information. * * @details Some commands reply with a status message giving information about the preceding * command transmission and/or execution was successful. */ ReturnValue_t parseReplyStatus(char* status); /** * @brief Function verifies the received reply from the syrlinks by recalculating and * comparing the crc. * * @param packet Pointer to the received reply. * * @return RETURN_OK if successful, otherwise RETURN_FAILED. */ ReturnValue_t verifyReadRxStatusRegistersReply(uint8_t* packet) }; #endif /* MISSION_DEVICES_SYRLINKSHKHANDLER_H_ */