Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

DC_PUSControlDataReporting.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // DC_PUSControlDataReporting.cpp 00005 // 00006 // Version 1.0 00007 // Date 4.01.03 00008 // Author A. Pasetti (P&P Software) 00009 00010 #include "../GeneralInclude/CompilerSwitches.h" 00011 #include "../GeneralInclude/DebugSupport.h" 00012 #include "../GeneralInclude/ClassId.h" 00013 #include "../GeneralInclude/Constants.h" 00014 #include "DC_PUSControlDataReporting.h" 00015 #include "../Telemetry/CC_TelemetryPacketFactory.h" 00016 00017 DC_PUSControlDataReporting::DC_PUSControlDataReporting(void) { 00018 setClassId(ID_PUSCONTROLDATAREPORTING); 00019 setType(PUS_TYPE_DATA_REP); 00020 sid = pNULL; 00021 sidOverlay = pNULL; 00022 nsid = 0; 00023 maxNsid = 0; 00024 lasti = 0; 00025 } 00026 00027 void DC_PUSControlDataReporting::setMaxNumberSID(unsigned char max) { 00028 assert( max>0 ); 00029 assert( maxNsid==0 ); // can only be called once 00030 00031 maxNsid = max; 00032 sid = new TD_SID[maxNsid]; 00033 sidOverlay = (unsigned char*)sid; 00034 for (unsigned int i=0; i<maxNsid; i++) 00035 sid[i] = 0; 00036 } 00037 00038 unsigned int DC_PUSControlDataReporting::getMaxNumberSID() { 00039 return (unsigned int) maxNsid; 00040 } 00041 00042 void DC_PUSControlDataReporting::setRawData(unsigned int i, unsigned char d) { 00043 assert( i<=maxNsid*sizeof(TD_SID) ); 00044 assert( (i==0) || (i==(lasti+1)) ); // check that i argument increments by 1 in each call 00045 00046 lasti = i; 00047 if (i==0) { 00048 setValidityCheckCode(VC_INCONSISTENT_RAW_DATA); 00049 nsid = d; 00050 if (nsid>maxNsid) 00051 setValidityCheckCode(VC_TOO_MANY_SIDS); 00052 return; 00053 } 00054 00055 if ( i<nsid*sizeof(TD_SID) && (getValidityCheckCode()==VC_INCONSISTENT_RAW_DATA) ) { 00056 sidOverlay[i-1] = d; 00057 return; 00058 } 00059 00060 if ( i==nsid*sizeof(TD_SID) && (getValidityCheckCode()==VC_INCONSISTENT_RAW_DATA) ) { 00061 setValidityCheckCode(0); 00062 sidOverlay[i-1] = d; 00063 return; 00064 } 00065 00066 if ( i>=(maxNsid*sizeof(TD_SID)+1) ) { 00067 setValidityCheckCode(VC_TOO_MANY_RAW_DATA); 00068 return; 00069 } 00070 00071 } 00072 00073 unsigned int DC_PUSControlDataReporting::getNumberOfRawData(void) const { 00074 return maxNsid*sizeof(TD_SID)+1; 00075 } 00076 00077 TD_ActionOutcome DC_PUSControlDataReporting::doAction(void) { 00078 assert( (getSubType()==PUS_ST_DATA_REP_ENB_HK) || 00079 (getSubType()==PUS_ST_DATA_REP_ENB_DG) || 00080 (getSubType()==PUS_ST_DATA_REP_DIS_HK) || 00081 (getSubType()==PUS_ST_DATA_REP_DIS_DG) ); 00082 00083 CC_TelemetryPacketFactory* pFct = CC_TelemetryPacketFactory::getInstance(); 00084 TD_ActionOutcome outcome = ACTION_SUCCESS; 00085 00086 for (unsigned int i=0; i<nsid; i++) { 00087 DC_PUSDataReportingPacket* pPck = pFct->getPUSDataReportingPacket(sid[i]); 00088 if ( pPck==pNULL ) { 00089 outcome = ACTION_FAILURE; 00090 continue; 00091 } 00092 if ( (getSubType()==PUS_ST_DATA_REP_ENB_HK) || 00093 (getSubType()==PUS_ST_DATA_REP_ENB_DG) ) 00094 pPck->setEnabled(ENABLED); 00095 else 00096 pPck->setEnabled(DISABLED); 00097 } 00098 00099 return outcome; 00100 } 00101 00102 bool DC_PUSControlDataReporting::isObjectConfigured(void) { 00103 return (PUSTelecommand::isObjectConfigured() && maxNsid!=0); 00104 }
Copyright 2003 P&P Software GmbH - All Rights Reserved