| 1 | 
 /** @file | 
 /** @file | 
| 2 | 
  * $Source: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v $ | 
  * $Source: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v $ | 
| 3 | 
  * $Id: TmtcReader.cpp,v 2.1 2004/12/03 22:08:01 kusanagi Exp $ | 
  * $Id: TmtcReader.cpp,v 2.7 2005/02/08 12:34:19 kusanagi Exp $ | 
| 4 | 
  * $Author: kusanagi $ | 
  * $Author: kusanagi $ | 
| 5 | 
  *  | 
  *  | 
| 6 | 
  * Implementation of the TmtcReader class. | 
  * Implementation of the TmtcReader class. | 
| 40 | 
  */ | 
  */ | 
| 41 | 
 std::string TmtcReader::GetVersionInfo(void) const { | 
 std::string TmtcReader::GetVersionInfo(void) const { | 
| 42 | 
   return  | 
   return  | 
| 43 | 
     "$Header: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v 2.1 2004/12/03 22:08:01 kusanagi Exp $\n"; | 
     "$Header: /home/cvsmanager/yoda/techmodel/TmtcReader.cpp,v 2.7 2005/02/08 12:34:19 kusanagi Exp $\n"; | 
| 44 | 
 } | 
 } | 
| 45 | 
  | 
  | 
| 46 | 
 /** | 
 /** | 
| 57 | 
  */ | 
  */ | 
| 58 | 
 void TmtcReader::RunEvent(int EventNumber, long int length) throw (WrongCRCException){ | 
 void TmtcReader::RunEvent(int EventNumber, long int length) throw (WrongCRCException){ | 
| 59 | 
  | 
  | 
 | 
 /* | 
  | 
 | 
 //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 | 
  | 
 | 
 */ | 
  | 
 | 
  | 
  | 
| 60 | 
     int i, j; | 
     int i, j; | 
| 61 | 
     char subData[TMTC_SUB_LENGTH]; | 
     char subData[TMTC_SUB_LENGTH]; | 
| 62 | 
     char CRCbuff[TMTC_SUBCRC_LENGTH]; | 
     char CRCbuff[TMTC_SUBCRC_LENGTH]; | 
| 71 | 
     UINT16    partialCRC = 0; //partial CRC updated as mcmd packet is read (to compare with the last two bytes of this event) | 
     UINT16    partialCRC = 0; //partial CRC updated as mcmd packet is read (to compare with the last two bytes of this event) | 
| 72 | 
     UINT16    readCRC = 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) | 
| 73 | 
      | 
      | 
| 74 | 
 /*    char tempData[length-TMTC_CRC_LENGTH]; | 
     for(int i = 0; i < numRecords; i++) { | 
 | 
     InputFile->read(tempData, sizeof(tempData)); | 
  | 
 | 
     partialCRC = CM_Compute_CRC16(0, (UINT8*)tempData, (length-TMTC_CRC_LENGTH)); | 
  | 
 | 
 */ | 
  | 
 | 
  | 
  | 
 | 
     for(i = 0; i < numRecords; i++) { | 
  | 
| 75 | 
         start = InputFile->tellg(); | 
         start = InputFile->tellg(); | 
| 76 | 
         InputFile->read(subData, sizeof(subData)); | 
         InputFile->read(subData, sizeof(subData)); | 
| 77 | 
         InputFile->read(CRCbuff, sizeof(CRCbuff)); | 
         InputFile->read(CRCbuff, sizeof(CRCbuff)); | 
| 78 | 
          | 
          | 
 | 
     /*    for (int jj = 0; jj < TMTC_SUB_LENGTH ; jj++){ | 
  | 
 | 
             partialCRC = CM_Compute_CRC16(0, (UINT8*)tempData, (length-TMTC_CRC_LENGTH)); | 
  | 
 | 
         } | 
  | 
 | 
     */ | 
  | 
 | 
    | 
  | 
| 79 | 
         partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&subData, TMTC_SUB_LENGTH); | 
         partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&subData, TMTC_SUB_LENGTH); | 
| 80 | 
         partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&CRCbuff, TMTC_SUBCRC_LENGTH); | 
         partialCRC = CM_Compute_CRC16(partialCRC, (UINT8*)&CRCbuff, TMTC_SUBCRC_LENGTH); | 
| 81 | 
  | 
  | 
| 82 | 
         //This == CRCBuff is not really parametric take care if have to change the static lengths | 
         //This == CRCBuff is not really parametric take care if have to change the static lengths | 
| 83 | 
         if((UINT8)(CM_Compute_CRC16(0, (UINT8*)&subData, TMTC_SUB_LENGTH)) == (UINT8)CRCbuff[0]){ | 
         if((UINT8)(CM_Compute_CRC16(0, (UINT8*)&subData, TMTC_SUB_LENGTH)) == (UINT8)CRCbuff[0]){ | 
| 84 | 
             rec = new(recs[i]) TmtcRecord(); //add a new TmtcRecord | 
             rec = new(recs[i]) TmtcRecord(); //add a new TmtcRecord | 
| 85 | 
             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_RECORD_OBT            = (((UINT32)subData[0]<<24)&0xFF000000) + (((UINT32)subData[1]<<16)&0x00FF0000) +  (((UINT32)subData[2]<<8)&0x0000FF00) + (((UINT32)subData[3])&0x000000FF); | 
| 86 | 
  | 
             rec->TM_DIAG_AND_BILEVEL_ACQ  = (((UINT16)subData[4]<<8)&0x0000FF00) + (((UINT16)subData[5])&0x000000FF); | 
| 87 | 
             for(j = 0; j < 16; j++) { | 
             for(int j = 0; j < 12; j++) { | 
| 88 | 
                 rec->TM_DEA_ANA[j]   = subData[4+j]; | 
                 rec->TM_TH_ANA[j]    = ((((UINT16)subData[6+j]<<8)&0xFF00) + (((UINT16)subData[7+j])&0x00FF)); //20 is the size of TM_DEA_ANA(16) + OBT(4) | 
 | 
                 rec->TM_DEA_ANA_P[j] = (float)(rec->TM_DEA_ANA[j]*0.02); | 
  | 
 | 
  | 
  | 
 | 
                 rec->TM_TH_ANA[j]    = ((((UINT16)subData[20+j]<<8)&0xFF00) + (((UINT16)subData[21+j])&0x00FF)); //20 is the size of TM_DEA_ANA(16) + OBT(4) | 
  | 
 | 
                 rec->TM_TH_ANA_P[j]  = convert_th(rec->TM_TH_ANA[j]); | 
  | 
| 89 | 
             } | 
             } | 
| 90 | 
              | 
              | 
| 91 | 
             rec->TM_BIL_DIAG_ACQ =  subData[53]; | 
             for(int j = 0; j < 6; j++) { | 
| 92 | 
             rec->TM_CC_DIAG_ACQ  =  (((UINT32)subData[54]<<24)&0xFF000000) + (((UINT32)subData[55]<<16)&0x00FF0000) +  (((UINT32)subData[56]<<8)&0x0000FF00) + ((UINT32)subData[57])&0x000000FF; | 
                 rec->TM_DEA_ANA[j]   = subData[30+j]; | 
| 93 | 
  | 
             } | 
| 94 | 
  | 
  | 
| 95 | 
         } else { | 
         } else { | 
| 96 | 
             stringstream oss; | 
             stringstream oss; | 
| 97 | 
             oss.str(""); | 
             oss.str(""); | 
| 105 | 
     if(partialCRC != readCRC) throw WrongCRCException(" Wrong Global CRC for TMTC Packet "); | 
     if(partialCRC != readCRC) throw WrongCRCException(" Wrong Global CRC for TMTC Packet "); | 
| 106 | 
 } | 
 } | 
| 107 | 
  | 
  | 
| 108 | 
  | 
 /* | 
| 109 | 
 float TmtcReader::convert_th(int TH) { | 
 float TmtcReader::convert_th(int TH) { | 
| 110 | 
   float a,q,deltax,deltay; | 
   float a,q,deltax,deltay; | 
| 111 | 
   static int chiama_fun=0; | 
   static int chiama_fun=0; | 
| 146 | 
     } | 
     } | 
| 147 | 
   return (grado); | 
   return (grado); | 
| 148 | 
 } | 
 } | 
| 149 | 
  | 
 */ |