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

CriticalTelecommand.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // CriticalTelecommand.cpp 00005 // 00006 // Version 1.1 00007 // Date 20.06.03 00008 // Author A. Pasetti (P&P Software), R. Totaro 00009 00010 #include "../GeneralInclude/CompilerSwitches.h" 00011 #include "../GeneralInclude/DebugSupport.h" 00012 #include "../GeneralInclude/Constants.h" 00013 #include "../Base/CC_RootObject.h" 00014 #include "../System/ObsClock.h" 00015 #include "CriticalTelecommand.h" 00016 00017 CriticalTelecommand::CriticalTelecommand(void) { 00018 reset(); 00019 } 00020 00021 void CriticalTelecommand::reset(void) { 00022 maxArmedDuration=-1; 00023 timeWhenArmed =-1; 00024 pObsClock =pNULL; 00025 isTcCritical =CRITICAL; 00026 isTcArmed =NOT_ARMED; 00027 } 00028 00029 bool CriticalTelecommand::isCritical(void) { 00030 return isTcCritical; 00031 } 00032 00033 void CriticalTelecommand::setCriticalityLevel(bool isCritical) { 00034 isTcCritical = isCritical; 00035 } 00036 00037 bool CriticalTelecommand::isArmed(void) { 00038 return isTcArmed; 00039 } 00040 00041 bool CriticalTelecommand::isImageValid(void) { 00042 return VALID; 00043 } 00044 00045 void CriticalTelecommand::storeImage(void) { 00046 return; 00047 } 00048 00049 void CriticalTelecommand::setMaxArmedDuration(TD_ObsTime t) { 00050 assert( t>0 ); 00051 maxArmedDuration = t; 00052 } 00053 00054 TD_ObsTime CriticalTelecommand::getMaxArmedDuration(void) { 00055 return maxArmedDuration; 00056 } 00057 00058 TD_ObsTime CriticalTelecommand::getTimeWhenArmed(void) { 00059 return timeWhenArmed; 00060 } 00061 00062 ObsClock* CriticalTelecommand::getObsClock(void) const { 00063 assert ( pObsClock ); 00064 return pObsClock; 00065 } 00066 00067 void CriticalTelecommand::setObsClock(ObsClock* pClock) { 00068 assert ( pClock ); 00069 pObsClock = pClock; 00070 } 00071 00072 bool CriticalTelecommand::canExecute(void) { 00073 assert(isObjectConfigured()); 00074 00075 if (isTcCritical && isTcArmed) { 00076 if ((pObsClock->getTime()-timeWhenArmed)>=maxArmedDuration) { 00077 CC_RootObject::getEventRepository()->create(this,EVT_CRIT_TC_TIMEOUT); 00078 return TC_CANNOT_EXECUTE; 00079 } 00080 00081 if (!isImageValid()) { 00082 CC_RootObject::getEventRepository()->create(this,EVT_CRIT_TC_IMG_INV); 00083 return TC_CANNOT_EXECUTE; 00084 } 00085 } 00086 00087 return TC_CAN_EXECUTE; 00088 } 00089 00090 TD_ActionOutcome CriticalTelecommand::doAction(void) { 00091 assert(isObjectConfigured()); 00092 00093 if (isTcArmed || !isTcCritical) { 00094 isTcArmed=NOT_ARMED; 00095 timeWhenArmed=-1; 00096 00097 return doCriticalAction(); 00098 } 00099 else { 00100 isTcArmed=ARMED; 00101 timeWhenArmed=pObsClock->getTime(); 00102 00103 CC_RootObject::getEventRepository()->create(this,EVT_CRIT_TC_ARMED); 00104 00105 return ACTION_SUCCESS; 00106 } 00107 } 00108 00109 bool CriticalTelecommand::isObjectConfigured(void) { 00110 return (Telecommand::isObjectConfigured() && maxArmedDuration>0 && pObsClock!=pNULL); 00111 }
Copyright 2003 P&P Software GmbH - All Rights Reserved