##// END OF EJS Templates
Current version with modes NORMAL and SBM1 operational
Current version with modes NORMAL and SBM1 operational

File last commit:

r4:ca873e4e03b3 default
r21:a92d7ea3b165 default
Show More
TC_Handler_TEST.c
298 lines | 12.5 KiB | text/x-c | CLexer
#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;
}