max tm packet size now configurable
This commit is contained in:
@ -19,114 +19,114 @@ class TcPacketBase : public SpacePacketBase {
|
||||
friend class TcPacketStoredBase;
|
||||
public:
|
||||
|
||||
enum AckField {
|
||||
//! No acknowledgements are expected.
|
||||
ACK_NONE = 0b0000,
|
||||
//! Acknowledgements on acceptance are expected.
|
||||
ACK_ACCEPTANCE = 0b0001,
|
||||
//! Acknowledgements on start are expected.
|
||||
ACK_START = 0b0010,
|
||||
//! Acknowledgements on step are expected.
|
||||
ACK_STEP = 0b0100,
|
||||
//! Acknowledfgement on completion are expected.
|
||||
ACK_COMPLETION = 0b1000
|
||||
};
|
||||
enum AckField {
|
||||
//! No acknowledgements are expected.
|
||||
ACK_NONE = 0b0000,
|
||||
//! Acknowledgements on acceptance are expected.
|
||||
ACK_ACCEPTANCE = 0b0001,
|
||||
//! Acknowledgements on start are expected.
|
||||
ACK_START = 0b0010,
|
||||
//! Acknowledgements on step are expected.
|
||||
ACK_STEP = 0b0100,
|
||||
//! Acknowledfgement on completion are expected.
|
||||
ACK_COMPLETION = 0b1000
|
||||
};
|
||||
|
||||
static constexpr uint8_t ACK_ALL = ACK_ACCEPTANCE | ACK_START | ACK_STEP |
|
||||
ACK_COMPLETION;
|
||||
static constexpr uint8_t ACK_ALL = ACK_ACCEPTANCE | ACK_START | ACK_STEP |
|
||||
ACK_COMPLETION;
|
||||
|
||||
/**
|
||||
* This is the default constructor.
|
||||
* It sets its internal data pointer to the address passed and also
|
||||
* forwards the data pointer to the parent SpacePacketBase class.
|
||||
* @param setData The position where the packet data lies.
|
||||
*/
|
||||
TcPacketBase( const uint8_t* setData );
|
||||
/**
|
||||
* This is the empty default destructor.
|
||||
*/
|
||||
virtual ~TcPacketBase();
|
||||
/**
|
||||
* This is the default constructor.
|
||||
* It sets its internal data pointer to the address passed and also
|
||||
* forwards the data pointer to the parent SpacePacketBase class.
|
||||
* @param setData The position where the packet data lies.
|
||||
*/
|
||||
TcPacketBase( const uint8_t* setData );
|
||||
/**
|
||||
* This is the empty default destructor.
|
||||
*/
|
||||
virtual ~TcPacketBase();
|
||||
|
||||
/**
|
||||
* This command returns the CCSDS Secondary Header Flag.
|
||||
* It shall always be zero for PUS Packets. This is the
|
||||
* highest bit of the first byte of the Data Field Header.
|
||||
* @return the CCSDS Secondary Header Flag
|
||||
*/
|
||||
virtual uint8_t getSecondaryHeaderFlag() const = 0;
|
||||
/**
|
||||
* This command returns the TC Packet PUS Version Number.
|
||||
* The version number of ECSS PUS 2003 is 1.
|
||||
* It consists of the second to fourth highest bits of the
|
||||
* first byte.
|
||||
* @return
|
||||
*/
|
||||
virtual uint8_t getPusVersionNumber() const = 0;
|
||||
/**
|
||||
* This is a getter for the packet's Ack field, which are the lowest four
|
||||
* bits of the first byte of the Data Field Header.
|
||||
*
|
||||
* It is packed in a uint8_t variable.
|
||||
* @return The packet's PUS Ack field.
|
||||
*/
|
||||
virtual uint8_t getAcknowledgeFlags() const = 0;
|
||||
/**
|
||||
* This is a getter for the packet's PUS Service ID, which is the second
|
||||
* byte of the Data Field Header.
|
||||
* @return The packet's PUS Service ID.
|
||||
*/
|
||||
virtual uint8_t getService() const = 0;
|
||||
/**
|
||||
* This is a getter for the packet's PUS Service Subtype, which is the
|
||||
* third byte of the Data Field Header.
|
||||
* @return The packet's PUS Service Subtype.
|
||||
*/
|
||||
virtual uint8_t getSubService() const = 0;
|
||||
/**
|
||||
* The source ID can be used to have an additional identifier, e.g. for different ground
|
||||
* station.
|
||||
* @return
|
||||
*/
|
||||
virtual uint16_t getSourceId() const = 0;
|
||||
/**
|
||||
* This command returns the CCSDS Secondary Header Flag.
|
||||
* It shall always be zero for PUS Packets. This is the
|
||||
* highest bit of the first byte of the Data Field Header.
|
||||
* @return the CCSDS Secondary Header Flag
|
||||
*/
|
||||
virtual uint8_t getSecondaryHeaderFlag() const = 0;
|
||||
/**
|
||||
* This command returns the TC Packet PUS Version Number.
|
||||
* The version number of ECSS PUS 2003 is 1.
|
||||
* It consists of the second to fourth highest bits of the
|
||||
* first byte.
|
||||
* @return
|
||||
*/
|
||||
virtual uint8_t getPusVersionNumber() const = 0;
|
||||
/**
|
||||
* This is a getter for the packet's Ack field, which are the lowest four
|
||||
* bits of the first byte of the Data Field Header.
|
||||
*
|
||||
* It is packed in a uint8_t variable.
|
||||
* @return The packet's PUS Ack field.
|
||||
*/
|
||||
virtual uint8_t getAcknowledgeFlags() const = 0;
|
||||
/**
|
||||
* This is a getter for the packet's PUS Service ID, which is the second
|
||||
* byte of the Data Field Header.
|
||||
* @return The packet's PUS Service ID.
|
||||
*/
|
||||
virtual uint8_t getService() const = 0;
|
||||
/**
|
||||
* This is a getter for the packet's PUS Service Subtype, which is the
|
||||
* third byte of the Data Field Header.
|
||||
* @return The packet's PUS Service Subtype.
|
||||
*/
|
||||
virtual uint8_t getSubService() const = 0;
|
||||
/**
|
||||
* The source ID can be used to have an additional identifier, e.g. for different ground
|
||||
* station.
|
||||
* @return
|
||||
*/
|
||||
virtual uint16_t getSourceId() const = 0;
|
||||
|
||||
/**
|
||||
* This is a getter for a pointer to the packet's Application data.
|
||||
*
|
||||
* These are the bytes that follow after the Data Field Header. They form
|
||||
* the packet's application data.
|
||||
* @return A pointer to the PUS Application Data.
|
||||
*/
|
||||
virtual const uint8_t* getApplicationData() const = 0;
|
||||
/**
|
||||
* This method calculates the size of the PUS Application data field.
|
||||
*
|
||||
* It takes the information stored in the CCSDS Packet Data Length field
|
||||
* and subtracts the Data Field Header size and the CRC size.
|
||||
* @return The size of the PUS Application Data (without Error Control
|
||||
* field)
|
||||
*/
|
||||
virtual uint16_t getApplicationDataSize() const = 0;
|
||||
/**
|
||||
* This getter returns the Error Control Field of the packet.
|
||||
*
|
||||
* The field is placed after any possible Application Data. If no
|
||||
* Application Data is present there's still an Error Control field. It is
|
||||
* supposed to be a 16bit-CRC.
|
||||
* @return The PUS Error Control
|
||||
*/
|
||||
virtual uint16_t getErrorControl() const = 0;
|
||||
/**
|
||||
* With this method, the Error Control Field is updated to match the
|
||||
* current content of the packet.
|
||||
*/
|
||||
virtual void setErrorControl() = 0;
|
||||
/**
|
||||
* This is a getter for a pointer to the packet's Application data.
|
||||
*
|
||||
* These are the bytes that follow after the Data Field Header. They form
|
||||
* the packet's application data.
|
||||
* @return A pointer to the PUS Application Data.
|
||||
*/
|
||||
virtual const uint8_t* getApplicationData() const = 0;
|
||||
/**
|
||||
* This method calculates the size of the PUS Application data field.
|
||||
*
|
||||
* It takes the information stored in the CCSDS Packet Data Length field
|
||||
* and subtracts the Data Field Header size and the CRC size.
|
||||
* @return The size of the PUS Application Data (without Error Control
|
||||
* field)
|
||||
*/
|
||||
virtual uint16_t getApplicationDataSize() const = 0;
|
||||
/**
|
||||
* This getter returns the Error Control Field of the packet.
|
||||
*
|
||||
* The field is placed after any possible Application Data. If no
|
||||
* Application Data is present there's still an Error Control field. It is
|
||||
* supposed to be a 16bit-CRC.
|
||||
* @return The PUS Error Control
|
||||
*/
|
||||
virtual uint16_t getErrorControl() const = 0;
|
||||
/**
|
||||
* With this method, the Error Control Field is updated to match the
|
||||
* current content of the packet.
|
||||
*/
|
||||
virtual void setErrorControl() = 0;
|
||||
|
||||
/**
|
||||
* Calculate full packet length from application data length.
|
||||
* @param appDataLen
|
||||
* @return
|
||||
*/
|
||||
virtual size_t calculateFullPacketLength(size_t appDataLen) const = 0;
|
||||
/**
|
||||
* Calculate full packet length from application data length.
|
||||
* @param appDataLen
|
||||
* @return
|
||||
*/
|
||||
virtual size_t calculateFullPacketLength(size_t appDataLen) const = 0;
|
||||
|
||||
/**
|
||||
* This is a debugging helper method that prints the whole packet content
|
||||
|
@ -18,32 +18,32 @@ TcPacketStoredBase::~TcPacketStoredBase() {
|
||||
}
|
||||
|
||||
ReturnValue_t TcPacketStoredBase::getData(const uint8_t ** dataPtr,
|
||||
size_t* dataSize) {
|
||||
auto result = this->store->getData(storeAddress, dataPtr, dataSize);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
size_t* dataSize) {
|
||||
auto result = this->store->getData(storeAddress, dataPtr, dataSize);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::warning << "TcPacketStoredBase: Could not get data!" << std::endl;
|
||||
sif::warning << "TcPacketStoredBase: Could not get data!" << std::endl;
|
||||
#else
|
||||
sif::printWarning("TcPacketStoredBase: Could not get data!\n");
|
||||
sif::printWarning("TcPacketStoredBase: Could not get data!\n");
|
||||
#endif
|
||||
}
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TcPacketStoredBase::checkAndSetStore() {
|
||||
if (this->store == nullptr) {
|
||||
this->store = ObjectManager::instance()->get<StorageManagerIF>(objects::TC_STORE);
|
||||
if (this->store == nullptr) {
|
||||
if (this->store == nullptr) {
|
||||
this->store = ObjectManager::instance()->get<StorageManagerIF>(objects::TC_STORE);
|
||||
if (this->store == nullptr) {
|
||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||
sif::error << "TcPacketStoredBase::TcPacketStoredBase: TC Store not found!"
|
||||
<< std::endl;
|
||||
sif::error << "TcPacketStoredBase::TcPacketStoredBase: TC Store not found!"
|
||||
<< std::endl;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void TcPacketStoredBase::setStoreAddress(store_address_t setAddress) {
|
||||
@ -68,5 +68,5 @@ void TcPacketStoredBase::setStoreAddress(store_address_t setAddress) {
|
||||
}
|
||||
|
||||
store_address_t TcPacketStoredBase::getStoreAddress() {
|
||||
return this->storeAddress;
|
||||
return this->storeAddress;
|
||||
}
|
||||
|
@ -34,35 +34,35 @@ public:
|
||||
*/
|
||||
TcPacketStoredBase(const uint8_t* data, uint32_t size);
|
||||
|
||||
virtual~ TcPacketStoredBase();
|
||||
virtual~ TcPacketStoredBase();
|
||||
|
||||
/**
|
||||
* Getter function for the raw data.
|
||||
* @param dataPtr [out] Pointer to the data pointer to set
|
||||
* @param dataSize [out] Address of size to set.
|
||||
* @return -@c RETURN_OK if data was retrieved successfully.
|
||||
*/
|
||||
ReturnValue_t getData(const uint8_t ** dataPtr, size_t* dataSize) override;
|
||||
/**
|
||||
* Getter function for the raw data.
|
||||
* @param dataPtr [out] Pointer to the data pointer to set
|
||||
* @param dataSize [out] Address of size to set.
|
||||
* @return -@c RETURN_OK if data was retrieved successfully.
|
||||
*/
|
||||
ReturnValue_t getData(const uint8_t ** dataPtr, size_t* dataSize) override;
|
||||
|
||||
void setStoreAddress(store_address_t setAddress) override;
|
||||
store_address_t getStoreAddress() override;
|
||||
|
||||
/**
|
||||
* With this call, the packet is deleted.
|
||||
* It removes itself from the store and sets its data pointer to NULL.
|
||||
* @return returncode from deleting the data.
|
||||
*/
|
||||
virtual ReturnValue_t deletePacket() = 0;
|
||||
/**
|
||||
* With this call, the packet is deleted.
|
||||
* It removes itself from the store and sets its data pointer to NULL.
|
||||
* @return returncode from deleting the data.
|
||||
*/
|
||||
virtual ReturnValue_t deletePacket() = 0;
|
||||
|
||||
/**
|
||||
* This method performs a size check.
|
||||
* It reads the stored size and compares it with the size entered in the
|
||||
* packet header. This class is the optimal place for such a check as it
|
||||
* has access to both the header data and the store.
|
||||
* @return true if size is correct, false if packet is not registered in
|
||||
* store or size is incorrect.
|
||||
*/
|
||||
virtual bool isSizeCorrect() = 0;
|
||||
/**
|
||||
* This method performs a size check.
|
||||
* It reads the stored size and compares it with the size entered in the
|
||||
* packet header. This class is the optimal place for such a check as it
|
||||
* has access to both the header data and the store.
|
||||
* @return true if size is correct, false if packet is not registered in
|
||||
* store or size is incorrect.
|
||||
*/
|
||||
virtual bool isSizeCorrect() = 0;
|
||||
|
||||
protected:
|
||||
/**
|
||||
|
Reference in New Issue
Block a user