const correctness
This commit is contained in:
parent
56d2af9d25
commit
b1e3a1b2b5
@ -72,7 +72,7 @@ void SpacePacketBase::setPacketSequenceCount( uint16_t new_count) {
|
|||||||
this->data->header.sequence_control_l = ( (new_count%LIMIT_SEQUENCE_COUNT) & 0x00FF );
|
this->data->header.sequence_control_l = ( (new_count%LIMIT_SEQUENCE_COUNT) & 0x00FF );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t SpacePacketBase::getPacketDataLength( void ) {
|
uint16_t SpacePacketBase::getPacketDataLength() const {
|
||||||
return ( (this->data->header.packet_length_h) << 8 )
|
return ( (this->data->header.packet_length_h) << 8 )
|
||||||
+ this->data->header.packet_length_l;
|
+ this->data->header.packet_length_l;
|
||||||
}
|
}
|
||||||
|
@ -138,9 +138,11 @@ public:
|
|||||||
* Returns the packet data length, which is the fifth and sixth byte of the
|
* Returns the packet data length, which is the fifth and sixth byte of the
|
||||||
* CCSDS Primary Header. The packet data length is the size of every kind
|
* CCSDS Primary Header. The packet data length is the size of every kind
|
||||||
* of data \b after the CCSDS Primary Header \b -1.
|
* of data \b after the CCSDS Primary Header \b -1.
|
||||||
* @return The CCSDS packet data length.
|
* @return
|
||||||
|
* The CCSDS packet data length. uint16_t is sufficient,
|
||||||
|
* because this is limit in CCSDS standard
|
||||||
*/
|
*/
|
||||||
uint16_t getPacketDataLength( void ); //uint16_t is sufficient, because this is limit in CCSDS standard
|
uint16_t getPacketDataLength(void) const;
|
||||||
/**
|
/**
|
||||||
* Sets the packet data length, which is the fifth and sixth byte of the
|
* Sets the packet data length, which is the fifth and sixth byte of the
|
||||||
* CCSDS Primary Header.
|
* CCSDS Primary Header.
|
||||||
|
@ -53,7 +53,7 @@ public:
|
|||||||
* highest bit of the first byte of the Data Field Header.
|
* highest bit of the first byte of the Data Field Header.
|
||||||
* @return the CCSDS Secondary Header Flag
|
* @return the CCSDS Secondary Header Flag
|
||||||
*/
|
*/
|
||||||
virtual uint8_t getSecondaryHeaderFlag() = 0;
|
virtual uint8_t getSecondaryHeaderFlag() const = 0;
|
||||||
/**
|
/**
|
||||||
* This command returns the TC Packet PUS Version Number.
|
* This command returns the TC Packet PUS Version Number.
|
||||||
* The version number of ECSS PUS 2003 is 1.
|
* The version number of ECSS PUS 2003 is 1.
|
||||||
@ -61,7 +61,7 @@ public:
|
|||||||
* first byte.
|
* first byte.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
virtual uint8_t getPusVersionNumber() = 0;
|
virtual uint8_t getPusVersionNumber() const = 0;
|
||||||
/**
|
/**
|
||||||
* This is a getter for the packet's Ack field, which are the lowest four
|
* 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.
|
* bits of the first byte of the Data Field Header.
|
||||||
@ -69,7 +69,7 @@ public:
|
|||||||
* It is packed in a uint8_t variable.
|
* It is packed in a uint8_t variable.
|
||||||
* @return The packet's PUS Ack field.
|
* @return The packet's PUS Ack field.
|
||||||
*/
|
*/
|
||||||
virtual uint8_t getAcknowledgeFlags() = 0;
|
virtual uint8_t getAcknowledgeFlags() const = 0;
|
||||||
/**
|
/**
|
||||||
* This is a getter for the packet's PUS Service ID, which is the second
|
* This is a getter for the packet's PUS Service ID, which is the second
|
||||||
* byte of the Data Field Header.
|
* byte of the Data Field Header.
|
||||||
@ -81,13 +81,13 @@ public:
|
|||||||
* third byte of the Data Field Header.
|
* third byte of the Data Field Header.
|
||||||
* @return The packet's PUS Service Subtype.
|
* @return The packet's PUS Service Subtype.
|
||||||
*/
|
*/
|
||||||
virtual uint8_t getSubService() = 0;
|
virtual uint8_t getSubService() const = 0;
|
||||||
/**
|
/**
|
||||||
* The source ID can be used to have an additional identifier, e.g. for different ground
|
* The source ID can be used to have an additional identifier, e.g. for different ground
|
||||||
* station.
|
* station.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
uint8_t getSourceId();
|
virtual uint16_t getSourceId() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a getter for a pointer to the packet's Application data.
|
* This is a getter for a pointer to the packet's Application data.
|
||||||
@ -105,7 +105,7 @@ public:
|
|||||||
* @return The size of the PUS Application Data (without Error Control
|
* @return The size of the PUS Application Data (without Error Control
|
||||||
* field)
|
* field)
|
||||||
*/
|
*/
|
||||||
virtual uint16_t getApplicationDataSize() = 0;
|
virtual uint16_t getApplicationDataSize() const = 0;
|
||||||
/**
|
/**
|
||||||
* This getter returns the Error Control Field of the packet.
|
* This getter returns the Error Control Field of the packet.
|
||||||
*
|
*
|
||||||
@ -114,7 +114,7 @@ public:
|
|||||||
* supposed to be a 16bit-CRC.
|
* supposed to be a 16bit-CRC.
|
||||||
* @return The PUS Error Control
|
* @return The PUS Error Control
|
||||||
*/
|
*/
|
||||||
virtual uint16_t getErrorControl() = 0;
|
virtual uint16_t getErrorControl() const = 0;
|
||||||
/**
|
/**
|
||||||
* With this method, the Error Control Field is updated to match the
|
* With this method, the Error Control Field is updated to match the
|
||||||
* current content of the packet.
|
* current content of the packet.
|
||||||
@ -126,7 +126,7 @@ public:
|
|||||||
* @param appDataLen
|
* @param appDataLen
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
virtual size_t calculateFullPacketLength(size_t appDataLen) = 0;
|
virtual size_t calculateFullPacketLength(size_t appDataLen) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a debugging helper method that prints the whole packet content
|
* This is a debugging helper method that prints the whole packet content
|
||||||
|
@ -7,15 +7,28 @@ TcPacketPus::TcPacketPus(const uint8_t *setData): TcPacketBase(setData) {
|
|||||||
tcData = reinterpret_cast<TcPacketPointer*>(const_cast<uint8_t*>(setData));
|
tcData = reinterpret_cast<TcPacketPointer*>(const_cast<uint8_t*>(setData));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TcPacketPus::initializeTcPacket(uint16_t apid, uint16_t sequenceCount,
|
||||||
|
uint8_t ack, uint8_t service, uint8_t subservice) {
|
||||||
|
initSpacePacketHeader(true, true, apid, sequenceCount);
|
||||||
|
std::memset(&tcData->dataField, 0, sizeof(tcData->dataField));
|
||||||
|
setPacketDataLength(sizeof(PUSTcDataFieldHeader) + CRC_SIZE - 1);
|
||||||
|
// Data Field Header:
|
||||||
|
// Set CCSDS_secondary_header_flag to 0 and version number to 001
|
||||||
|
tcData->dataField.versionTypeAck = 0b00010000;
|
||||||
|
tcData->dataField.versionTypeAck |= (ack & 0x0F);
|
||||||
|
tcData->dataField.serviceType = service;
|
||||||
|
tcData->dataField.serviceSubtype = subservice;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t TcPacketPus::getService() const {
|
uint8_t TcPacketPus::getService() const {
|
||||||
return tcData->dataField.serviceType;
|
return tcData->dataField.serviceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t TcPacketPus::getSubService() {
|
uint8_t TcPacketPus::getSubService() const {
|
||||||
return tcData->dataField.serviceSubtype;
|
return tcData->dataField.serviceSubtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t TcPacketPus::getAcknowledgeFlags() {
|
uint8_t TcPacketPus::getAcknowledgeFlags() const {
|
||||||
return tcData->dataField.versionTypeAck & 0b00001111;
|
return tcData->dataField.versionTypeAck & 0b00001111;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,11 +36,11 @@ const uint8_t* TcPacketPus::getApplicationData() const {
|
|||||||
return &tcData->appData;
|
return &tcData->appData;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t TcPacketPus::getApplicationDataSize() {
|
uint16_t TcPacketPus::getApplicationDataSize() const {
|
||||||
return getPacketDataLength() - sizeof(tcData->dataField) - CRC_SIZE + 1;
|
return getPacketDataLength() - sizeof(tcData->dataField) - CRC_SIZE + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t TcPacketPus::getErrorControl() {
|
uint16_t TcPacketPus::getErrorControl() const {
|
||||||
uint16_t size = getApplicationDataSize() + CRC_SIZE;
|
uint16_t size = getApplicationDataSize() + CRC_SIZE;
|
||||||
uint8_t* p_to_buffer = &tcData->appData;
|
uint8_t* p_to_buffer = &tcData->appData;
|
||||||
return (p_to_buffer[size - 2] << 8) + p_to_buffer[size - 1];
|
return (p_to_buffer[size - 2] << 8) + p_to_buffer[size - 1];
|
||||||
@ -48,28 +61,23 @@ void TcPacketPus::setData(const uint8_t* pData) {
|
|||||||
tcData = reinterpret_cast<TcPacketPointer*>(const_cast<uint8_t*>(pData));
|
tcData = reinterpret_cast<TcPacketPointer*>(const_cast<uint8_t*>(pData));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t TcPacketPus::getSecondaryHeaderFlag() {
|
uint8_t TcPacketPus::getSecondaryHeaderFlag() const {
|
||||||
return (tcData->dataField.versionTypeAck & 0b10000000) >> 7;
|
return (tcData->dataField.versionTypeAck & 0b10000000) >> 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t TcPacketPus::getPusVersionNumber() {
|
uint8_t TcPacketPus::getPusVersionNumber() const {
|
||||||
return (tcData->dataField.versionTypeAck & 0b01110000) >> 4;
|
return (tcData->dataField.versionTypeAck & 0b01110000) >> 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TcPacketPus::initializeTcPacket(uint16_t apid, uint16_t sequenceCount,
|
uint16_t TcPacketPus::getSourceId() const {
|
||||||
uint8_t ack, uint8_t service, uint8_t subservice) {
|
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
|
||||||
initSpacePacketHeader(true, true, apid, sequenceCount);
|
return (tcData->dataField.sourceIdH << 8) | tcData->dataField.sourceIdL;
|
||||||
std::memset(&tcData->dataField, 0, sizeof(tcData->dataField));
|
#else
|
||||||
setPacketDataLength(sizeof(PUSTcDataFieldHeader) + CRC_SIZE - 1);
|
return tcData->dataField.sourceId;
|
||||||
// Data Field Header:
|
#endif
|
||||||
// Set CCSDS_secondary_header_flag to 0 and version number to 001
|
|
||||||
tcData->dataField.versionTypeAck = 0b00010000;
|
|
||||||
tcData->dataField.versionTypeAck |= (ack & 0x0F);
|
|
||||||
tcData->dataField.serviceType = service;
|
|
||||||
tcData->dataField.serviceSubtype = subservice;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t TcPacketPus::calculateFullPacketLength(size_t appDataLen) {
|
size_t TcPacketPus::calculateFullPacketLength(size_t appDataLen) const {
|
||||||
return sizeof(CCSDSPrimaryHeader) + sizeof(PUSTcDataFieldHeader) +
|
return sizeof(CCSDSPrimaryHeader) + sizeof(PUSTcDataFieldHeader) +
|
||||||
appDataLen + TcPacketBase::CRC_SIZE;
|
appDataLen + TcPacketBase::CRC_SIZE;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,8 @@ struct PUSTcDataFieldHeader {
|
|||||||
uint8_t serviceType;
|
uint8_t serviceType;
|
||||||
uint8_t serviceSubtype;
|
uint8_t serviceSubtype;
|
||||||
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
|
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
|
||||||
uint16_t sourceId;
|
uint8_t sourceIdH;
|
||||||
|
uint8_t sourceIdL;
|
||||||
#else
|
#else
|
||||||
uint8_t sourceId;
|
uint8_t sourceId;
|
||||||
#endif
|
#endif
|
||||||
@ -49,16 +50,17 @@ public:
|
|||||||
TcPacketPus(const uint8_t* setData);
|
TcPacketPus(const uint8_t* setData);
|
||||||
|
|
||||||
// Base class overrides
|
// Base class overrides
|
||||||
virtual uint8_t getSecondaryHeaderFlag() override;
|
uint8_t getSecondaryHeaderFlag() const override;
|
||||||
virtual uint8_t getPusVersionNumber() override;
|
uint8_t getPusVersionNumber() const override;
|
||||||
virtual uint8_t getAcknowledgeFlags() override;
|
uint8_t getAcknowledgeFlags() const override;
|
||||||
virtual uint8_t getService() const override;
|
uint8_t getService() const override;
|
||||||
virtual uint8_t getSubService() override;
|
uint8_t getSubService() const override;
|
||||||
|
uint16_t getSourceId() const override;
|
||||||
const uint8_t* getApplicationData() const override;
|
const uint8_t* getApplicationData() const override;
|
||||||
uint16_t getApplicationDataSize() override;
|
uint16_t getApplicationDataSize() const override;
|
||||||
uint16_t getErrorControl() override;
|
uint16_t getErrorControl() const override;
|
||||||
void setErrorControl() override;
|
void setErrorControl() override;
|
||||||
size_t calculateFullPacketLength(size_t appDataLen) override;
|
size_t calculateFullPacketLength(size_t appDataLen) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -259,6 +259,7 @@ void CommandingServiceBase::handleRequestQueue() {
|
|||||||
rejectPacket(tc_verification::START_FAILURE, &packet, INVALID_SUBSERVICE);
|
rejectPacket(tc_verification::START_FAILURE, &packet, INVALID_SUBSERVICE);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = getMessageQueueAndObject(packet.getSubService(),
|
result = getMessageQueueAndObject(packet.getSubService(),
|
||||||
packet.getApplicationData(), packet.getApplicationDataSize(),
|
packet.getApplicationData(), packet.getApplicationDataSize(),
|
||||||
&queue, &objectId);
|
&queue, &objectId);
|
||||||
|
Loading…
Reference in New Issue
Block a user