40 lines
1.2 KiB
C++
40 lines
1.2 KiB
C++
|
#include "TcPacketCheck.h"
|
||
|
|
||
|
#include "../globalfunctions/CRC.h"
|
||
|
#include "../serviceinterface/ServiceInterfaceStream.h"
|
||
|
#include "../storagemanager/StorageManagerIF.h"
|
||
|
#include "../tmtcservices/VerificationCodes.h"
|
||
|
|
||
|
TcPacketCheck::TcPacketCheck( uint16_t setApid ) : apid(setApid) {
|
||
|
}
|
||
|
|
||
|
ReturnValue_t TcPacketCheck::checkPacket( TcPacketStored* currentPacket ) {
|
||
|
uint16_t calculated_crc = CRC::crc16ccitt( currentPacket->getWholeData(),
|
||
|
currentPacket->getFullSize() );
|
||
|
if ( calculated_crc != 0 ) {
|
||
|
return INCORRECT_CHECKSUM;
|
||
|
}
|
||
|
bool condition = (not currentPacket->hasSecondaryHeader()) or
|
||
|
(currentPacket->getPacketVersionNumber() != CCSDS_VERSION_NUMBER) or
|
||
|
(not currentPacket->isTelecommand());
|
||
|
if ( condition ) {
|
||
|
return INCORRECT_PRIMARY_HEADER;
|
||
|
}
|
||
|
if ( currentPacket->getAPID() != this->apid )
|
||
|
return ILLEGAL_APID;
|
||
|
|
||
|
if ( not currentPacket->isSizeCorrect() ) {
|
||
|
return INCOMPLETE_PACKET;
|
||
|
}
|
||
|
condition = (currentPacket->getSecondaryHeaderFlag() != CCSDS_SECONDARY_HEADER_FLAG) ||
|
||
|
(currentPacket->getPusVersionNumber() != PUS_VERSION_NUMBER);
|
||
|
if ( condition ) {
|
||
|
return INCORRECT_SECONDARY_HEADER;
|
||
|
}
|
||
|
return RETURN_OK;
|
||
|
}
|
||
|
|
||
|
uint16_t TcPacketCheck::getApid() const {
|
||
|
return apid;
|
||
|
}
|