--- yoda/techmodel/TmtcReader.cpp 2004/07/17 20:03:38 1.2 +++ yoda/techmodel/TmtcReader.cpp 2006/03/21 21:49:07 6.1 @@ -1,6 +1,6 @@ /** @file * $Source: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v $ - * $Id: TmtcReader.cpp,v 1.1.1.1 2004/07/06 12:20:23 kusanagi Exp $ + * $Id: TmtcReader.cpp,v 6.0 2006/02/07 17:11:10 kusanagi Exp $ * $Author: kusanagi $ * * Implementation of the TmtcReader class. @@ -8,11 +8,8 @@ * Control the CRC for the entire data Packet not just for single records */ - - - #include -#include +#include extern "C" { #include #include "CRC.h" @@ -27,16 +24,14 @@ using namespace pamela; using namespace pamela::techmodel; -static log4cpp::Category& cat = log4cpp::Category::getInstance("pamela.techmodel.TmtcReader"); +static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.TmtcReader")); /** * Constructor. */ TmtcReader::TmtcReader(void): TechmodelAlgorithm(PacketType::Tmtc, "TechmodelTmtcReader") { - cat << log4cpp::Priority::DEBUG - << "Constructor " - << "\n " << log4cpp::CategoryStream::ENDLINE; + logger->debug(_T("Constructor")); Tmtc = new TmtcEvent(); } @@ -45,7 +40,7 @@ */ std::string TmtcReader::GetVersionInfo(void) const { return - "$Header: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v 1.1.1.1 2004/07/06 12:20:23 kusanagi Exp $\n"; + "$Header: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v 6.0 2006/02/07 17:11:10 kusanagi Exp $\n"; } /** @@ -60,20 +55,13 @@ /** * Unpack the Tmtc event from an input file. */ -void TmtcReader::RunEvent(int EventNumber, long int length) { - -/* -//Just to test crc - char tempbuff[length]; - InputFile->read(tempbuff, sizeof(tempbuff)); - UINT16 subCRC = 0; - for (int jj = 0; jj < length ; jj++){ - subCRC = CM_Compute_CRC16(subCRC, (BYTE*)(tempbuff+jj), 1); - } -//Just to test crc -*/ +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]; @@ -86,57 +74,42 @@ UINT16 partialCRC = 0; //partial CRC updated as mcmd packet is read (to compare with the last two bytes of this event) UINT16 readCRC = 0; //partial CRC updated as mcmd packet is read (to compare with the last two bytes of this event) - -/* char tempData[length-TMTC_CRC_LENGTH]; - InputFile->read(tempData, sizeof(tempData)); - partialCRC = CM_Compute_CRC16(0, (UINT8*)tempData, (length-TMTC_CRC_LENGTH)); -*/ - - for(i = 0; i < numRecords; i++) { + for(int i = 0; i < numRecords; i++) { start = InputFile->tellg(); InputFile->read(subData, sizeof(subData)); InputFile->read(CRCbuff, sizeof(CRCbuff)); - /* for (int jj = 0; jj < TMTC_SUB_LENGTH ; jj++){ - partialCRC = CM_Compute_CRC16(0, (UINT8*)tempData, (length-TMTC_CRC_LENGTH)); - } - */ - partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&subData, TMTC_SUB_LENGTH); partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&CRCbuff, TMTC_SUBCRC_LENGTH); //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->TM_RECORD_OBT = (((UINT32)subData[0]<<24)&0xFF000000) + (((UINT32)subData[1]<<16)&0x00FF0000) + (((UINT32)subData[2]<<8)&0x0000FF00) + ((UINT32)subData[3])&0x000000FF; - - for(j = 0; j < 16; j++) { - rec->TM_DEA_ANA[j] = (((UINT16)subData[4+j]<<8)&0xFF00) + (((UINT16)subData[5+j])&0x00FF); - rec->TM_DEA_ANA_P[j] = (float)(rec->TM_DEA_ANA[j]*0.02); - - rec->TM_TH_ANA[j] = subData[36+j]; //36 is the size of TM_DEA_ANA + OBT - rec->TM_TH_ANA_P[j] = convert_th(rec->TM_TH_ANA[j]); + 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); + + for(int j = 0; j < 16; j++) { + rec->TM_TH_ANA[j] = ((((UINT16)subData[6 + 2*j]<<8)&0xFF00) + (((UINT16)subData[7 + 2*j])&0x00FF)); //20 is the size of TM_DEA_ANA(16) + OBT(4) } - rec->TM_BIL_DIAG_ACQ = subData[53]; - rec->TM_CC_DIAG_ACQ = (((UINT32)subData[54]<<24)&0xFF000000) + (((UINT32)subData[55]<<16)&0x00FF0000) + (((UINT32)subData[56]<<8)&0x0000FF00) + ((UINT32)subData[57])&0x000000FF; - //free(subData); + for(int j = 0; j < 6; j++) { + rec->TM_DEA_ANA[j] = subData[38+j]; + } + } else { - cat << log4cpp::Priority::ERROR - << "Wrong CRC on Subpacket int TMTC Packet starting at position " << start - << "\n " << log4cpp::CategoryStream::ENDLINE; + stringstream oss; + oss.str(""); + oss << "Wrong CRC on Subpacket int TMTC Packet starting at position" + << start; + logger->warn(oss.str().c_str()); } } InputFile->read(eventCRC, sizeof(eventCRC)); readCRC = (((UINT16)(eventCRC[0]<<8))&0xFF00) + (((UINT16)eventCRC[1])&0x00FF); - if(!(partialCRC == readCRC)) { - cat << log4cpp::Priority::ERROR - << "The test of calculated CRC with one wrote on file FAILED!!" - << "\n " << log4cpp::CategoryStream::ENDLINE; - } + if(partialCRC != readCRC) throw WrongCRCException(" Wrong Global CRC for TMTC Packet "); } - +/* float TmtcReader::convert_th(int TH) { float a,q,deltax,deltay; static int chiama_fun=0; @@ -177,3 +150,4 @@ } return (grado); } +*/