00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
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:
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:
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:
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:
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:
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:
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:
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);
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
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:
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:
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:
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:
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:
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);
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