--- yoda/techmodel/TmtcReader.cpp 2004/07/06 12:20:23 1.1.1.1 +++ yoda/techmodel/TmtcReader.cpp 2004/07/17 20:03:38 1.2 @@ -1,7 +1,7 @@ /** @file - * $Source: /home/cvspamela/yoda/techmodel/TmtcReader.cpp,v $ - * $Id: TmtcReader.cpp,v 1.8 2004/04/28 09:01:27 nagni Exp $ - * $Author: nagni $ + * $Source: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v $ + * $Id: TmtcReader.cpp,v 1.1.1.1 2004/07/06 12:20:23 kusanagi Exp $ + * $Author: kusanagi $ * * Implementation of the TmtcReader class. * ToBeDone: @@ -45,7 +45,7 @@ */ std::string TmtcReader::GetVersionInfo(void) const { return - "$Header: /home/cvspamela/yoda/techmodel/TmtcReader.cpp,v 1.8 2004/04/28 09:01:27 nagni Exp $\n"; + "$Header: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v 1.1.1.1 2004/07/06 12:20:23 kusanagi Exp $\n"; } /** @@ -74,48 +74,53 @@ */ int i, j; - char buff[TMTC_SUB_LENGTH]; + char subData[TMTC_SUB_LENGTH]; char CRCbuff[TMTC_SUBCRC_LENGTH]; char eventCRC[TMTC_CRC_LENGTH]; int numRecords = (length-TMTC_CRC_LENGTH)/(TMTC_SUB_LENGTH + TMTC_SUBCRC_LENGTH); //subtract the last two bytes because are the final CRC long int start; + + TmtcRecord* rec; Tmtc->Records->Clear(); TClonesArray &recs = *(Tmtc->Records); - TmtcRecord* rec; + 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) - int oldSize = recs.GetSize(); - recs.ExpandCreate(oldSize+numRecords-1); +/* 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++) { start = InputFile->tellg(); - InputFile->read(buff, sizeof(buff)); + InputFile->read(subData, sizeof(subData)); InputFile->read(CRCbuff, sizeof(CRCbuff)); - - /*for (int jj = 0; jj < TMTC_SUB_LENGTH ; jj++){ - partialCRC = CM_Compute_CRC8_8((char)partialCRC, (unsigned char*)buff[jj], 1); - }*/ - partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&buff, TMTC_SUB_LENGTH); + /* 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*)&buff, TMTC_SUB_LENGTH)) == (UINT8)CRCbuff[0]){ - rec = new TmtcRecord(); //add a new TmtcRecord - rec->TM_RECORD_OBT = (((UINT32)buff[0]<<24)&0xFF000000) + (((UINT32)buff[1]<<16)&0x00FF0000) + (((UINT32)buff[2]<<8)&0x0000FF00) + ((UINT32)buff[3])&0x000000FF; + 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)buff[4+j]<<8)&0xFF00) + (((UINT16)buff[5+j])&0x00FF); + 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] = buff[36+j]; //36 is the size of TM_DEA_ANA + OBT + 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->TM_BIL_DIAG_ACQ = buff[53]; - rec->TM_CC_DIAG_ACQ = (((UINT32)buff[54]<<24)&0xFF000000) + (((UINT32)buff[55]<<16)&0x00FF0000) + (((UINT32)buff[56]<<8)&0x0000FF00) + ((UINT32)buff[57])&0x000000FF; - recs.AddAt(&(*rec), oldSize+i); + 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); } else { cat << log4cpp::Priority::ERROR << "Wrong CRC on Subpacket int TMTC Packet starting at position " << start