##// END OF EJS Templates
Initial commit.
Initial commit.

File last commit:

r0:452a68f7426f default
r0:452a68f7426f default
Show More
TC_handler.c
74 lines | 2.8 KiB | text/x-c | CLexer
#include <..\header\TC_handler.h>
char TM_checker(ccsdsTelecommandSourcePacketHeader_t * TMPacket)
{
unsigned char pid = 0;
unsigned char category = 0;
unsigned int length = 0;
// APID check *** APID on 2 bytes
pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
if (pid!=CCSDS_PROCESS_ID) return CCSDS_ERR_PID;
if (category!=CCSDS_PACKET_CATEGORY) return CCSDS_ERR_CAT;
// packet length check
length = TMPacket->packetLength[1] + TMPacket->packetLength[0] * 256;
if (category<=CCSDS_TELECOMMAND_MAX_PACKET_LENGTH) return CCSDS_ERR_LENGTH; // check that the packet does not exceed the MAX size
// service type, subtype and packet length check
switch(TMPacket->dataFieldHeader[1]) { // service type, authorized values are 181 and 9
case 181:
switch(TMPacket->dataFieldHeader[2]){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
case 3:
if (length!=12) return CCSDS_ERR_LENGTH;
break;
case 20:
if (length!=14) return CCSDS_ERR_LENGTH;
break;
case 21:
if (length!=20) return CCSDS_ERR_LENGTH;
break;
case 24:
if (length!=14) return CCSDS_ERR_LENGTH;
break;
case 27:
if (length!=14) return CCSDS_ERR_LENGTH;
break;
case 28:
if (length!=14) return CCSDS_ERR_LENGTH;
break;
case 30:
if (length!=12) return CCSDS_ERR_LENGTH;
break;
case 40:
if (length!=20) return CCSDS_ERR_LENGTH;
break;
case 50:
if (length!=50) return CCSDS_ERR_LENGTH;
break;
case 60:
if (length!=12) return CCSDS_ERR_LENGTH;
break;
case 61:
if (length!=12) return CCSDS_ERR_LENGTH;
break;
default:
return CCSDS_ERR_SUBTYPE;
break;
}
case 9:
if (TMPacket->dataFieldHeader[2]==129) return CCSDS_ERR_SUBTYPE;
if (length!=18) return CCSDS_ERR_LENGTH;
break;
default:
return CCSDS_ERR_TYPE;
break;
}
// source ID check // Source ID not documented in the ICD
// packet error control, CRC check
return CCSDS_TM_VALID;
}