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

DC_PUSEventRepository.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // DC_PUSEventRepository.cpp 00005 // 00006 // Version 1.0 00007 // Date 13.11.03 (version 1.0) 00008 // Author A. Pasetti (P&P Software) 00009 // 00010 // Change Record: 00011 00012 #include "../GeneralInclude/CompilerSwitches.h" 00013 #include "../GeneralInclude/DebugSupport.h" 00014 #include "../GeneralInclude/ClassId.h" 00015 #include "../GeneralInclude/Constants.h" 00016 #include "../System/ObsClock.h" 00017 #include "../Telecommand/PUSTelecommand.h" 00018 #include "../Telemetry/DC_PUSTcVerificationPacket.h" 00019 #include "../Telemetry/CC_TelemetryManager.h" 00020 #include "../Telemetry/CC_TelemetryPacketFactory.h" 00021 #include "../Manoeuvre/PUSTcManoeuvre.h" 00022 #include "DC_EventRepository.h" 00023 #include "DC_PUSEventRepository.h" 00024 00025 DC_PUSEventRepository::DC_PUSEventRepository(void) { 00026 setClassId(ID_PUSEVENTREPOSITORY); 00027 } 00028 00029 void DC_PUSEventRepository::create(PUSTelecommand* originator, TD_EventType eventId) { 00030 assert( originator!=pNULL); 00031 assert( eventId>0 ); 00032 00033 // Only process event if event creation is enabled 00034 if (!isEnabled() || !isEnabled(eventId)) 00035 return; 00036 00037 DC_PUSTcVerificationPacket* pTcVerificationPacket; 00038 pTcVerificationPacket = CC_TelemetryPacketFactory::getInstance()->allocatePUSTcVerificationPacket(); 00039 if ( pTcVerificationPacket==pNULL ) { 00040 DC_EventRepository::create((CC_RootObject*)originator,EVT_TM_PCK_ALLOC_FAILURE); 00041 DC_EventRepository::create((CC_RootObject*)originator,eventId); 00042 return; 00043 } 00044 00045 TD_CheckCode errCode = 0; 00046 00047 switch (eventId) { 00048 00049 case EVT_TC_LOADED: // telecommand acceptance -- success 00050 if ( originator->isAcceptanceAckRequired() ) { 00051 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00052 pTcVerificationPacket->setSubType(PUS_ST_TC_VER_ACC_SC); 00053 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00054 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00055 } else 00056 pTcVerificationPacket->setInUse(NOT_IN_USE); 00057 break; 00058 00059 case EVT_TC_NOT_VALID: // telecommand acceptance -- failure 00060 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00061 pTcVerificationPacket->setSubType(PUS_ST_TC_VER_ACC_FL); 00062 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00063 errCode = originator->getValidityCheckCode(); 00064 if (errCode!=0) 00065 pTcVerificationPacket->setErrorCode(errCode); 00066 else 00067 pTcVerificationPacket->setErrorCode(EVT_TC_NOT_VALID); 00068 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00069 break; 00070 00071 case EVT_TC_LIST_FULL: // telecommand acceptance -- failure 00072 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00073 pTcVerificationPacket->setSubType(PUS_ST_TC_VER_ACC_FL); 00074 pTcVerificationPacket->setErrorCode(EVT_TC_LIST_FULL); 00075 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00076 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00077 break; 00078 00079 case EVT_TC_EXEC_CHECK_FAIL: // telecommand execution start -- failure 00080 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00081 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_STR_FL); 00082 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00083 errCode = originator->getExecutionCheckCode(); 00084 if (errCode!=0) 00085 pTcVerificationPacket->setErrorCode(errCode); 00086 else 00087 pTcVerificationPacket->setErrorCode(EVT_TC_EXEC_CHECK_FAIL); 00088 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00089 break; 00090 00091 case EVT_TC_ABORTED: // telecommand execution start -- failure 00092 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00093 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_STR_FL); 00094 pTcVerificationPacket->setErrorCode(EVT_TC_ABORTED); 00095 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00096 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00097 break; 00098 00099 case EVT_TC_EXEC_FAIL: // telecommand completion -- failure 00100 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00101 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_END_FL); 00102 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00103 errCode = (TD_CheckCode)originator->getLastOutcome(); 00104 pTcVerificationPacket->setErrorCode(errCode); 00105 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00106 break; 00107 00108 case EVT_TC_EXEC_SUCC: // telecommand completion -- success 00109 if ( originator->isCompletionAckRequired() ) { 00110 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00111 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_END_SC); 00112 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00113 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00114 } else 00115 pTcVerificationPacket->setInUse(NOT_IN_USE); 00116 break; 00117 00118 default: 00119 assert(false); // should never be reached 00120 } 00121 DC_EventRepository::create((CC_RootObject*)originator,eventId); 00122 } 00123 00124 void DC_PUSEventRepository::create(PUSTcManoeuvre* originator, TD_EventType eventId) { 00125 assert( originator!=pNULL); 00126 assert( eventId>0 ); 00127 00128 TD_CheckCode errCode = 0; 00129 00130 // Only process event if event creation is enabled 00131 if (!isEnabled() || !isEnabled(eventId)) 00132 return; 00133 00134 DC_PUSTcVerificationPacket* pTcVerificationPacket; 00135 pTcVerificationPacket = CC_TelemetryPacketFactory::getInstance()->allocatePUSTcVerificationPacket(); 00136 if ( pTcVerificationPacket==pNULL ) { 00137 DC_EventRepository::create((CC_RootObject*)originator,EVT_TM_PCK_ALLOC_FAILURE); 00138 DC_EventRepository::create((CC_RootObject*)originator,eventId); 00139 return; 00140 } 00141 00142 switch (eventId) { 00143 00144 case EVT_MAN_STARTED: // telecommand execution start -- success 00145 if ( originator->isStartAckRequired() ) { 00146 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00147 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_STR_SC); 00148 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00149 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00150 } else 00151 pTcVerificationPacket->setInUse(NOT_IN_USE); 00152 break; 00153 00154 case EVT_MAN_LIST_FULL: // telecommand execution start -- failure 00155 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00156 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_STR_FL); 00157 pTcVerificationPacket->setErrorCode(EVT_MAN_LIST_FULL); 00158 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00159 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00160 break; 00161 00162 case EVT_MAN_PROGRESS: // telecommand execution progress -- success 00163 if ( originator->isProgressAckRequired() ) { 00164 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00165 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_PRO_SC); 00166 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00167 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00168 } else 00169 pTcVerificationPacket->setInUse(NOT_IN_USE); 00170 break; 00171 00172 case EVT_MAN_ABORTED: // telecommand execution progress -- failure 00173 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00174 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_PRO_FL); 00175 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00176 errCode = originator->getContinuationCheckCode(); 00177 if (errCode!=0) 00178 pTcVerificationPacket->setErrorCode(errCode); 00179 else 00180 pTcVerificationPacket->setErrorCode(EVT_MAN_ABORTED); 00181 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00182 break; 00183 00184 case EVT_MAN_TERMINATED: // telecommand execution completion -- success 00185 if ( originator->isCompletionAckRequired() ) { 00186 pTcVerificationPacket->setTelecommandId(originator->getTelecommandId()); 00187 pTcVerificationPacket->setSubType(PUS_ST_TC_EXE_END_SC); 00188 pTcVerificationPacket->setTimeTag(DC_PUSTcVerificationPacket::getObsClock()->getTime()); 00189 pTmManager->sendTelemetryPacket(pTcVerificationPacket); 00190 } else 00191 pTcVerificationPacket->setInUse(NOT_IN_USE); 00192 break; 00193 00194 default: 00195 assert(false); // should never be reached 00196 } 00197 DC_EventRepository::create((CC_RootObject*)originator,eventId); 00198 } 00199 00200 void DC_PUSEventRepository::create(CC_RootObject* originator, TD_EventType eventId) { 00201 DC_EventRepository::create(originator, eventId); 00202 } 00203 00204 void DC_PUSEventRepository::setTelemetryManager(CC_TelemetryManager* pTmMng) { 00205 assert( pTmMng!=pNULL ); 00206 pTmManager = pTmMng; 00207 } 00208 00209 CC_TelemetryManager* DC_PUSEventRepository::getTelemetryManager() const { 00210 assert( pTmManager!=pNULL ); 00211 return pTmManager; 00212 } 00213 00214 bool DC_PUSEventRepository::isObjectConfigured(void) { 00215 return (DC_EventRepository::isObjectConfigured() && pTmManager!=pNULL); 00216 } 00217
Copyright 2003 P&P Software GmbH - All Rights Reserved