TC_Handler_TEST.c
298 lines
| 12.5 KiB
| text/x-c
|
CLexer
/ src / TC_Handler_TEST.c
paul@pc-solar1.lab-lpp.local
|
r4 | #include <stdio.h> | ||
#include <stdlib.h> | ||||
#include <TC_handler.h> | ||||
char *errorCCSDSMsg[8] = { "ILLEGAL_APID 0", | ||||
"WRONG_LEN_PACKET 1", | ||||
"INCOR_CHECKSUM 2", | ||||
"ILL_TYPE 3", | ||||
"ILL_SUBTYPE 4", | ||||
"WRONG_APP_DATA 5", | ||||
"WRONG_CMD_CODE 6", | ||||
"CCSDS_TM_VALID 7" | ||||
}; | ||||
char *tmGeneratorMsg[2] = { "NOTHING_TO_DO", | ||||
"TM_GENERATED" | ||||
}; | ||||
void test_TC_handler(){ | ||||
ccsdsTelecommandPacket_t TCPacketToCheck; | ||||
unsigned char result; | ||||
unsigned char CRCAsTwoBytes[2] = {0, 0}; | ||||
unsigned char *ccsdsContent; | ||||
unsigned int i = 0; | ||||
unsigned int length = 0; | ||||
unsigned int packetLengthField = 0; | ||||
printf("\n*** start of test_TC_handler()\n"); | ||||
//******************* | ||||
// TC_LFR_DUMP_PAR TC | ||||
printf("\n =============> TEST TC_LFR_DUMP_PAR_TC <============\n"); | ||||
length = 12; | ||||
packetLengthField = length - 6 - 1; // -6 for the header and -1 to meet the definition of PACKET_LENGTH | ||||
currentTC_LEN_RCV[0] = 0x00; | ||||
currentTC_LEN_RCV[1] = packetLengthField; | ||||
// | ||||
//TCPacketToCheck.targetLogicalAddress = 0xfe; | ||||
TCPacketToCheck.protocolIdentifier = 0x02; | ||||
TCPacketToCheck.reserved = 0x00; | ||||
TCPacketToCheck.userApplication = 0x00; | ||||
// | ||||
TCPacketToCheck.packetID[0] = 0x1c; | ||||
TCPacketToCheck.packetID[1] = 0xcc; | ||||
TCPacketToCheck.packetSequenceControl[0] = 0xc0; | ||||
TCPacketToCheck.packetSequenceControl[1] = 0x00; | ||||
TCPacketToCheck.packetLength[0] = 0x00; | ||||
TCPacketToCheck.packetLength[1] = packetLengthField; | ||||
TCPacketToCheck.dataFieldHeader[0] = 0x19; // | ||||
TCPacketToCheck.dataFieldHeader[1] = 0xb5; // type | ||||
TCPacketToCheck.dataFieldHeader[2] = 0x1e; // subtype | ||||
TCPacketToCheck.dataFieldHeader[3] = 0x00; // source ID | ||||
// no data, the CRC comes immediately after the packet header | ||||
GetCRCAsTwoBytes((unsigned char*)TCPacketToCheck.packetID, CRCAsTwoBytes, packetLengthField + 5); | ||||
TCPacketToCheck.dataAndCRC[length-10-2] = CRCAsTwoBytes[0]; | ||||
TCPacketToCheck.dataAndCRC[length-10-1] = CRCAsTwoBytes[1]; | ||||
ccsdsContent = (unsigned char*)TCPacketToCheck.packetID; | ||||
// TEST 1 | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_DUMP_PAR %s\n", errorCCSDSMsg[result]); | ||||
// TEST 2 | ||||
TCPacketToCheck.dataFieldHeader[2] = 0x04; // subtype | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_DUMP_PAR (with wrong subtype) %s\n", errorCCSDSMsg[result]); | ||||
// TEST 3 | ||||
TCPacketToCheck.dataFieldHeader[2] = 0x1e; // subtype | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_DUMP_PAR %s\n", errorCCSDSMsg[result]); | ||||
// TEST 4 | ||||
TCPacketToCheck.packetLength[1] = 49; // length | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_DUMP_PAR (with wrong length) %s\n", errorCCSDSMsg[result]); | ||||
// TEST 5 | ||||
TCPacketToCheck.packetLength[1] = packetLengthField; // length | ||||
TCPacketToCheck.dataAndCRC[0] = 0; | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_DUMP_PAR (with wrong CRC) %s\n", errorCCSDSMsg[result]); | ||||
//******************* | ||||
// TC_LFR_UPDATE_INFO | ||||
printf("\n =============> TEST TC_LFR_UPDATE_INFO <============\n"); | ||||
length = 50; | ||||
packetLengthField = length - 6 - 1; // -6 for the header and -1 to meet the definition of PACKET_LENGTH | ||||
currentTC_LEN_RCV[0] = 0x00; | ||||
currentTC_LEN_RCV[1] = packetLengthField; | ||||
// | ||||
//TCPacketToCheck.targetLogicalAddress = 0xfe; | ||||
TCPacketToCheck.protocolIdentifier = 0x02; | ||||
TCPacketToCheck.reserved = 0x00; | ||||
TCPacketToCheck.userApplication = 0x00; | ||||
// | ||||
TCPacketToCheck.packetID[0] = 0x1c; | ||||
TCPacketToCheck.packetID[1] = 0xcc; | ||||
TCPacketToCheck.packetSequenceControl[0] = 0xc0; | ||||
TCPacketToCheck.packetSequenceControl[1] = 0x00; | ||||
TCPacketToCheck.packetLength[0] = 0x00; | ||||
TCPacketToCheck.packetLength[1] = packetLengthField; | ||||
TCPacketToCheck.dataFieldHeader[0] = 0x19; // | ||||
TCPacketToCheck.dataFieldHeader[1] = 0xb5; // type | ||||
TCPacketToCheck.dataFieldHeader[2] = 0x32; // subtype | ||||
TCPacketToCheck.dataFieldHeader[3] = 0x00; // source ID | ||||
// no data, the CRC comes immediately after the packet header | ||||
for (i=0; i<length-12; i++) TCPacketToCheck.dataAndCRC[i] = 0; | ||||
GetCRCAsTwoBytes((unsigned char*)TCPacketToCheck.packetID, CRCAsTwoBytes, packetLengthField + 5); | ||||
TCPacketToCheck.dataAndCRC[packetLengthField-3-2] = CRCAsTwoBytes[0]; | ||||
TCPacketToCheck.dataAndCRC[packetLengthField-3-1] = CRCAsTwoBytes[1]; | ||||
ccsdsContent = (unsigned char*)TCPacketToCheck.packetID; | ||||
// TEST 1 | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_UPDATE_INFO %s\n", errorCCSDSMsg[result]); | ||||
// TEST 2 | ||||
TCPacketToCheck.dataFieldHeader[2] = 0x05; // subtype | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_UPDATE_INFO (with wrong subtype) %s\n", errorCCSDSMsg[result]); | ||||
// TEST 3 | ||||
TCPacketToCheck.dataFieldHeader[2] = 0x32; // subtype | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_UPDATE_INFO %s\n", errorCCSDSMsg[result]); | ||||
// TEST 4 | ||||
TCPacketToCheck.packetLength[1] = 49; // length | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_UPDATE_INFO (invalid length) %s\n", errorCCSDSMsg[result]); | ||||
// TEST 5 | ||||
TCPacketToCheck.packetLength[1] = packetLengthField; // length reset to the right value | ||||
TCPacketToCheck.dataAndCRC[0] = TCPacketToCheck.dataAndCRC[0]+1; // introduce error in the CRC | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_UPDATE_INFO (wrong CRC) %s\n", errorCCSDSMsg[result]); | ||||
// TEST 6 | ||||
currentTC_LEN_RCV[1] = 0; // introduce error in the receive packet length | ||||
GetCRCAsTwoBytes((unsigned char*)TCPacketToCheck.packetID, CRCAsTwoBytes, packetLengthField + 5); | ||||
TCPacketToCheck.dataAndCRC[packetLengthField-3-2] = CRCAsTwoBytes[0]; | ||||
TCPacketToCheck.dataAndCRC[packetLengthField-3-1] = CRCAsTwoBytes[1]; | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_UPDATE_INFO (LEN RCV != SIZE) %s\n", errorCCSDSMsg[result]); | ||||
// TEST 6 | ||||
currentTC_LEN_RCV[1] = packetLengthField; // introduce error in the receive packet length | ||||
result = TM_checker(&TCPacketToCheck); | ||||
printf(" => test TC_LFR_UPDATE_INFO %s\n", errorCCSDSMsg[result]); | ||||
printf("*** end of test_TC_handler()\n"); | ||||
} | ||||
void test_GetCRC(){ | ||||
unsigned char indata[2]; | ||||
unsigned char indata0[3]; | ||||
unsigned char indata1[4]; | ||||
unsigned char indata2[6]; | ||||
unsigned char indata3[10]; | ||||
unsigned char crcAsTwoBytes[2]; | ||||
printf("\n*** start of test_GetCRC()\n"); | ||||
indata[0] = 0x00; | ||||
indata[1] = 0x00; | ||||
GetCRCAsTwoBytes(indata, crcAsTwoBytes, 2); | ||||
printf("crc is %x %x, should be 0x1d 0x0f\n", crcAsTwoBytes[0], crcAsTwoBytes[1]); | ||||
indata0[0] = 0x00; | ||||
indata0[1] = 0x00; | ||||
indata0[2] = 0x00; | ||||
GetCRCAsTwoBytes(indata0, crcAsTwoBytes, 3); | ||||
printf("crc is %x %x, should be 0xcc 0x9c\n", crcAsTwoBytes[0], crcAsTwoBytes[1]); | ||||
indata1[0] = 0xab; | ||||
indata1[1] = 0xcd; | ||||
indata1[2] = 0xef; | ||||
indata1[3] = 0x01; | ||||
GetCRCAsTwoBytes(indata1, crcAsTwoBytes, 4); | ||||
printf("crc is %x %x, should be 0x04 0xa2\n", crcAsTwoBytes[0], crcAsTwoBytes[1]); | ||||
indata2[0] = 0x14; | ||||
indata2[1] = 0x56; | ||||
indata2[2] = 0xf8; | ||||
indata2[3] = 0x9a; | ||||
indata2[4] = 0x00; | ||||
indata2[5] = 0x01; | ||||
GetCRCAsTwoBytes(indata2, crcAsTwoBytes, 6); | ||||
printf("crc is %x %x, should be 0x7f 0xd5\n", crcAsTwoBytes[0], crcAsTwoBytes[1]); | ||||
indata3[0] = 0x1c; | ||||
indata3[1] = 0xcc; | ||||
indata3[2] = 0xc0; | ||||
indata3[3] = 0x00; | ||||
indata3[4] = 0x00; | ||||
indata3[5] = 0x0c; | ||||
indata3[6] = 0x19; // | ||||
indata3[7] = 0xb5; // type | ||||
indata3[8] = 0x1e; // subtype | ||||
indata3[9] = 0x00; // source ID | ||||
GetCRCAsTwoBytes(indata3, crcAsTwoBytes, 10); | ||||
printf("crc is %x %x\n", crcAsTwoBytes[0], crcAsTwoBytes[1]); | ||||
printf("*** end of test_GetCRC()\n"); | ||||
} | ||||
void test_TM_acceptance_generator() | ||||
{ | ||||
unsigned char result = 0; | ||||
unsigned char code = 0; | ||||
unsigned char CRCAsTwoBytes[2] = {0,0}; | ||||
unsigned char * ccsdsContent; | ||||
unsigned int length = 0; | ||||
unsigned int packetLengthField = 0; | ||||
ccsdsTelemetryPacket_t TMPacket; | ||||
ccsdsTelecommandPacket_t TCPacket; | ||||
//******************* | ||||
// TC_LFR_DUMP_PAR TC | ||||
length = 12; | ||||
packetLengthField = length - 6 - 1; // -6 for the header and -1 to meet the definition of PACKET_LENGTH | ||||
currentTC_LEN_RCV[0] = 0x00; | ||||
currentTC_LEN_RCV[01] = packetLengthField; | ||||
// | ||||
//TCPacket.targetLogicalAddress = 0xfe; | ||||
TCPacket.protocolIdentifier = 0x02; | ||||
TCPacket.reserved = 0x00; | ||||
TCPacket.userApplication = 0x00; | ||||
// | ||||
TCPacket.packetID[0] = 0x1c; | ||||
TCPacket.packetID[1] = 0xcc; | ||||
TCPacket.packetSequenceControl[0] = 0xc0; | ||||
TCPacket.packetSequenceControl[1] = 0x00; | ||||
TCPacket.packetLength[0] = 0x00; | ||||
TCPacket.packetLength[1] = packetLengthField; | ||||
TCPacket.dataFieldHeader[0] = 0x19; // | ||||
TCPacket.dataFieldHeader[1] = 0xb5; // type | ||||
TCPacket.dataFieldHeader[2] = 0x1e; // subtype | ||||
TCPacket.dataFieldHeader[3] = 0x00; // source ID | ||||
// no data, the CRC comes immediately after the packet header | ||||
GetCRCAsTwoBytes((unsigned char*)TCPacket.packetID, CRCAsTwoBytes, packetLengthField + 5); | ||||
TCPacket.dataAndCRC[length-10-2] = CRCAsTwoBytes[0]; | ||||
TCPacket.dataAndCRC[length-10-1] = CRCAsTwoBytes[1]; | ||||
ccsdsContent = (unsigned char*)TCPacket.packetID; | ||||
// TEST 1 | ||||
code = TM_checker(&TCPacket); | ||||
result = TM_acceptance_generator(&TCPacket, code, &TMPacket); | ||||
printf(" => TEST 1\n"); | ||||
printf(" => test TC_LFR_DUMP_PAR %s\n", errorCCSDSMsg[code]); | ||||
printf(" => result %s\n", tmGeneratorMsg[result]); | ||||
// TEST 2 | ||||
TCPacket.dataFieldHeader[2] = 0x04; // subtype | ||||
code = TM_checker(&TCPacket); | ||||
result = TM_acceptance_generator(&TCPacket, code, &TMPacket); | ||||
printf(" => TEST 2\n"); | ||||
printf(" => test TC_LFR_DUMP_PAR (with wrong subtype) %s\n", errorCCSDSMsg[code]); | ||||
printf(" => result %s\n", tmGeneratorMsg[result]); | ||||
// TEST 3 | ||||
TCPacket.dataFieldHeader[2] = 0x1e; // subtype | ||||
code = TM_checker(&TCPacket); | ||||
result = TM_acceptance_generator(&TCPacket, code, &TMPacket); | ||||
printf(" => TEST 2\n"); | ||||
printf(" => test TC_LFR_DUMP_PAR %s\n", errorCCSDSMsg[code]); | ||||
printf(" => result %s\n", tmGeneratorMsg[result]); | ||||
// TEST 4 | ||||
TCPacket.packetLength[1] = 49; // length | ||||
code = TM_checker(&TCPacket); | ||||
result = TM_acceptance_generator(&TCPacket, code, &TMPacket); | ||||
printf(" => TEST 4\n"); | ||||
printf(" => test TC_LFR_DUMP_PAR (invalid length) %s\n", errorCCSDSMsg[code]); | ||||
printf(" => result %s\n", tmGeneratorMsg[result]); | ||||
// TEST 5 | ||||
TCPacket.packetLength[1] = packetLengthField; // length | ||||
TCPacket.dataAndCRC[0] = 0; | ||||
code = TM_checker(&TCPacket); | ||||
result = TM_acceptance_generator(&TCPacket, code, &TMPacket); | ||||
printf(" => TEST 5\n"); | ||||
printf(" => test TC_LFR_DUMP_PAR (with wrong CRC) %s\n", errorCCSDSMsg[code]); | ||||
printf(" => result %s\n", tmGeneratorMsg[result]); | ||||
printf(" => received CRC: [%x, %x], should be [%x, %x]\n", | ||||
TCPacket.dataAndCRC[0], TCPacket.dataAndCRC[1], | ||||
currentTC_COMPUTED_CRC[0], TCPacket.dataAndCRC[1]); | ||||
// TEST 6 | ||||
GetCRCAsTwoBytes((unsigned char*)TCPacket.packetID, CRCAsTwoBytes, packetLengthField + 5); | ||||
TCPacket.dataAndCRC[length-10-2] = CRCAsTwoBytes[0]; // restore the CRC | ||||
currentTC_LEN_RCV[1] = 1; // put error in the received packet length | ||||
code = TM_checker(&TCPacket); | ||||
result = TM_acceptance_generator(&TCPacket, code, &TMPacket); | ||||
printf(" => TEST 6\n"); | ||||
printf(" => test TC_LFR_DUMP_PAR (RCV LEN != SIZE FIELD) %s\n", errorCCSDSMsg[code]); | ||||
printf(" => result: %s\n", tmGeneratorMsg[result]); | ||||
printf(" => RCV LEN: [%x, %x], should be [%x, %x]\n", | ||||
currentTC_LEN_RCV[0], currentTC_LEN_RCV[1], | ||||
TCPacket.packetLength[0], TCPacket.packetLength[1]); | ||||
} | ||||
int main() | ||||
{ | ||||
InitLookUpTableForCRC(); | ||||
//test_GetCRC(); | ||||
//test_TC_handler(); | ||||
test_TM_acceptance_generator(); | ||||
return 0; | ||||
} | ||||