| 1 | /** @file | /** @file | 
| 2 | * $Source: /home/cvsmanager/yoda/techmodel/ArrDumpReader.cpp,v $ | * $Source: /home/cvsmanager/yoda/techmodel/ArrDumpReader.cpp,v $ | 
| 3 | * $Id: ArrDumpReader.cpp,v 2.0 2004/09/21 20:50:54 kusanagi Exp $ | * $Id: ArrDumpReader.cpp,v 2.2 2005/01/03 14:20:09 kusanagi Exp $ | 
| 4 | * $Author: kusanagi $ | * $Author: kusanagi $ | 
| 5 | * | * | 
| 6 | * Implementation of the ArrDumpReader class. | * Implementation of the ArrDumpReader class. | 
| 34 | * Get a string with the version info of the algorithm. | * Get a string with the version info of the algorithm. | 
| 35 | */ | */ | 
| 36 | std::string ArrDumpReader::GetVersionInfo(void) const { | std::string ArrDumpReader::GetVersionInfo(void) const { | 
| 37 | return "$Header: /home/cvsmanager/yoda/techmodel/ArrDumpReader.cpp,v 2.0 2004/09/21 20:50:54 kusanagi Exp $\n"; | return "$Header: /home/cvsmanager/yoda/techmodel/ArrDumpReader.cpp,v 2.2 2005/01/03 14:20:09 kusanagi Exp $\n"; | 
| 38 | } | } | 
| 39 |  |  | 
| 40 | /** | /** | 
| 52 | */ | */ | 
| 53 | void ArrDumpReader::RunEvent(int EventNumber, long int length) throw (WrongCRCException){ | void ArrDumpReader::RunEvent(int EventNumber, long int length) throw (WrongCRCException){ | 
| 54 |  |  | 
| 55 | char     *subData; | char      subData[length]; | 
| 56 | char      eventCRC[2]; | UINT16    subCRC;      //CRC of the data | 
| 57 | UINT16    subCRC;      //CRC of the data | UINT16    readCRC;     //CRC read from the end of the subpacket | 
| 58 | UINT16    readCRC;     //CRC read from the end of the subpacket | long int  dataLength = length - 2; | 
|  | long int  dataLength; |  | 
| 59 |  |  | 
| 60 | //the 2 bytes subtracted belong to the final event CRC bytes | InputFile->read(subData, sizeof(unsigned char)*length); | 
| 61 | dataLength = length - (long int)2; | subCRC  = CM_Compute_CRC16(0, (BYTE*)subData, dataLength); | 
| 62 |  | readCRC = (((UINT16)(subData[length - 2]<<8))&0xFF00) + (((UINT16)subData[length - 1])&0x00FF); | 
|  | subData = new char[dataLength]; |  | 
|  | InputFile->read(subData, sizeof(unsigned char)*dataLength); |  | 
|  | subCRC = CM_Compute_CRC16(0, (BYTE*)subData, dataLength); |  | 
|  |  |  | 
|  | //took the final CRC to compare it with the previous calculated CRC of the data |  | 
|  | InputFile->read(eventCRC, sizeof(eventCRC)); |  | 
|  | readCRC = (((UINT16)(eventCRC[0]<<8))&0xFF00) + (((UINT16)eventCRC[1])&0x00FF); |  | 
| 63 |  |  | 
|  | //finally check if the RecordCRC is correct and finally update the partialCRC |  | 
| 64 | if (subCRC != readCRC) throw WrongCRCException(" Wrong CRC for ArrDump Packet "); | if (subCRC != readCRC) throw WrongCRCException(" Wrong CRC for ArrDump Packet "); | 
| 65 |  |  | 
| 66 | ArrDumpRecord* rec; | ArrDumpRecord* rec; | 
| 73 | rec = new(recs[i++]) ArrDumpRecord(); //add a new TmtcRecord | rec = new(recs[i++]) ArrDumpRecord(); //add a new TmtcRecord | 
| 74 | rec->Arr_ID  = ((UINT8)subData[offset])&0xFF; | rec->Arr_ID  = ((UINT8)subData[offset])&0xFF; | 
| 75 | rec->Arr_len = (((UINT16)subData[offset+1]<<8)&0xFF00) + ((UINT16)subData[offset+2])&0x00FF; | rec->Arr_len = (((UINT16)subData[offset+1]<<8)&0xFF00) + ((UINT16)subData[offset+2])&0x00FF; | 
|  | //rec->Data = new UINT32[rec->Arr_len]; |  | 
| 76 | size = sizeof(UINT32)*(rec->Arr_len); | size = sizeof(UINT32)*(rec->Arr_len); | 
| 77 | rec->Data  = new TArrayI((int)rec->Arr_len, (int*)(subData+offset+3)); | rec->Data  = new TArrayI((int)rec->Arr_len, (int*)(subData+offset+3)); | 
|  | //memcpy(rec->Data, (UINT32*)(subData+offset+3), size); |  | 
| 78 | offset = offset + size + 3; | offset = offset + size + 3; | 
| 79 | } | } | 
| 80 | delete [] subData; | //delete [] subData; | 
| 81 | } | } |