--- yoda/techmodel/TmtcReader.cpp 2005/05/23 13:53:43 4.4 +++ yoda/techmodel/TmtcReader.cpp 2006/09/29 10:19:27 6.4 @@ -1,6 +1,6 @@ /** @file - * $Source: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v $ - * $Id: TmtcReader.cpp,v 4.3 2005/05/23 11:53:48 kusanagi Exp $ + * $Source: /afs/ba.infn.it/user/pamela/src/CVS/yoda/techmodel/TmtcReader.cpp,v $ + * $Id: TmtcReader.cpp,v 6.3 2006/05/30 19:10:03 kusanagi Exp $ * $Author: kusanagi $ * * Implementation of the TmtcReader class. @@ -8,20 +8,10 @@ * Control the CRC for the entire data Packet not just for single records */ -#include -#include extern "C" { -#include -#include "CRC.h" + #include "CRC.h" } - -#include -#include "stdio.h" #include "ReaderAlgorithms.h" - -#include "event/tmtc/TmtcRecord.h" - -using namespace pamela; using namespace pamela::techmodel; static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.TmtcReader")); @@ -40,7 +30,7 @@ */ std::string TmtcReader::GetVersionInfo(void) const { return - "$Header: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v 4.3 2005/05/23 11:53:48 kusanagi Exp $\n"; + "$Header: /afs/ba.infn.it/user/pamela/src/CVS/yoda/techmodel/TmtcReader.cpp,v 6.3 2006/05/30 19:10:03 kusanagi Exp $\n"; } /** @@ -57,7 +47,11 @@ */ void TmtcReader::RunEvent(int EventNumber, long int length) throw (WrongCRCException){ - int i, j; + int i, j, k; + /* The ' k ' indexs the number of recs. + * It is needed to be indipendent from ' i ' because in case of CRC error the single record is skipped and ' i ' increase by one, but correct records to be stored are still ' i '. + */ + k = 0; char subData[TMTC_SUB_LENGTH]; char CRCbuff[TMTC_SUBCRC_LENGTH]; char eventCRC[TMTC_CRC_LENGTH]; @@ -72,7 +66,9 @@ UINT16 readCRC = 0; //partial CRC updated as mcmd packet is read (to compare with the last two bytes of this event) for(int i = 0; i < numRecords; i++) { start = InputFile->tellg(); + memset(subData, 0, sizeof(subData)); InputFile->read(subData, sizeof(subData)); + memset(CRCbuff, 0, sizeof(CRCbuff)); InputFile->read(CRCbuff, sizeof(CRCbuff)); partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&subData, TMTC_SUB_LENGTH); @@ -80,7 +76,7 @@ //This == CRCBuff is not really parametric take care if have to change the static lengths if((UINT8)(CM_Compute_CRC16(0, (UINT8*)&subData, TMTC_SUB_LENGTH)) == (UINT8)CRCbuff[0]){ - rec = new(recs[i]) TmtcRecord(); //add a new TmtcRecord + rec = new(recs[k++]) TmtcRecord(); //add a new TmtcRecord rec->TM_RECORD_OBT = (((UINT32)subData[0]<<24)&0xFF000000) + (((UINT32)subData[1]<<16)&0x00FF0000) + (((UINT32)subData[2]<<8)&0x0000FF00) + (((UINT32)subData[3])&0x000000FF); rec->TM_DIAG_AND_BILEVEL_ACQ = (((UINT16)subData[4]<<8)&0x0000FF00) + (((UINT16)subData[5])&0x000000FF); @@ -100,6 +96,7 @@ logger->warn(oss.str().c_str()); } } + memset(eventCRC, 0, sizeof(eventCRC)); InputFile->read(eventCRC, sizeof(eventCRC)); readCRC = (((UINT16)(eventCRC[0]<<8))&0xFF00) + (((UINT16)eventCRC[1])&0x00FF); if(partialCRC != readCRC) throw WrongCRCException(" Wrong Global CRC for TMTC Packet ");