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

CC_TelemetryManager.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // CC_TelemetryManager.cpp 00005 // 00006 // Version 1.0 00007 // Date 03.03.03 00008 // Author A. Pasetti (P&P Software) 00009 00010 #include "../GeneralInclude/CompilerSwitches.h" 00011 #include "../GeneralInclude/DebugSupport.h" 00012 #include "../GeneralInclude/Constants.h" 00013 #include "../GeneralInclude/ClassId.h" 00014 #include "../Base/CC_RootObject.h" 00015 #include "CC_TelemetryPacketFactory.h" 00016 #include "CC_TelemetryManager.h" 00017 #include "TelemetryStream.h" 00018 #include "TelemetryPacket.h" 00019 00020 CC_TelemetryManager::CC_TelemetryManager(void) { 00021 pTmStream = pNULL; 00022 pTmModeManager = pNULL; 00023 packetQueueSize = -1; 00024 pPacketQueue = pNULL; 00025 setClassId(ID_TELEMETRYMANAGER); 00026 } 00027 00028 void CC_TelemetryManager::setTelemetryModeManager(TelemetryModeManager* pTmModeManager) { 00029 assert( pTmModeManager != pNULL ); 00030 this->pTmModeManager = pTmModeManager; 00031 } 00032 00033 TelemetryModeManager* CC_TelemetryManager::getTelemetryModeManager(void) const { 00034 assert( pTmModeManager != pNULL ); 00035 return pTmModeManager; 00036 } 00037 00038 void CC_TelemetryManager::setTelemetryStream(TelemetryStream* pTmStream) { 00039 assert( pTmStream != pNULL ); 00040 this->pTmStream = pTmStream; 00041 } 00042 00043 TelemetryStream* CC_TelemetryManager::getTelemetryStream(void) const { 00044 assert( pTmStream != pNULL ); 00045 return pTmStream; 00046 } 00047 00048 void CC_TelemetryManager::setImmediateQueueSize(unsigned int size) { 00049 assert(packetQueueSize==-1); // must be called only once 00050 packetQueueSize = size; 00051 pPacketQueue = new TelemetryPacket*[packetQueueSize]; 00052 for (int i=0; i<packetQueueSize; i++) 00053 pPacketQueue[i] = pNULL; 00054 } 00055 00056 unsigned int CC_TelemetryManager::getImmediateQueueSize() { 00057 return (unsigned int)packetQueueSize; 00058 } 00059 00060 TelemetryPacket* CC_TelemetryManager::getImmediateQueueEntry(unsigned int i) { 00061 assert( pPacketQueue!=pNULL ); 00062 assert( (int)i<packetQueueSize ); 00063 return pPacketQueue[i]; 00064 } 00065 00066 bool CC_TelemetryManager::isImmediateQueueFull() { 00067 if (packetQueueSize==0) 00068 return true; 00069 else 00070 return ( pPacketQueue[packetQueueSize-1]!=pNULL ); 00071 } 00072 00073 void CC_TelemetryManager::activate(void) { 00074 assert( pTmModeManager != pNULL ); 00075 assert( pTmStream != pNULL); 00076 assert( packetQueueSize>=0 ); 00077 00078 TelemetryPacket* pTmPacket; 00079 00080 for (int i=0; i<packetQueueSize; i++ ) { 00081 00082 if ( pPacketQueue[i]!=pNULL) { 00083 pTmPacket = pPacketQueue[i]; 00084 pPacketQueue[i]=pNULL; 00085 } else 00086 break; 00087 00088 pTmPacket->update(); 00089 00090 if ( !pTmPacket->isValid() ) { 00091 CC_RootObject::getEventRepository()->create(this,EVT_TM_ITEM_NOT_VALID); 00092 pTmPacket->setInUse(false); 00093 continue; 00094 } 00095 00096 if ( !pTmStream->doesPacketFit(pTmPacket) ) { 00097 CC_RootObject::getEventRepository()->create(this,EVT_TOO_MANY_TM_BYTES); 00098 pTmPacket->setInUse(false); 00099 break; 00100 } 00101 00102 pTmStream->write(pTmPacket); 00103 pTmPacket->setInUse(false); 00104 } 00105 00106 for (pTmModeManager->first(); 00107 !pTmModeManager->isIterationFinished(); 00108 pTmModeManager->next()) { 00109 00110 pTmPacket = pTmModeManager->getIterationTelemetryPacket(); 00111 pTmPacket->update(); 00112 00113 if ( !pTmPacket->isValid() ) { 00114 CC_RootObject::getEventRepository()->create(this,EVT_TM_ITEM_NOT_VALID); 00115 continue; 00116 } 00117 00118 if ( !pTmStream->doesPacketFit(pTmPacket) ) { 00119 CC_RootObject::getEventRepository()->create(this,EVT_TOO_MANY_TM_BYTES); 00120 break; 00121 } 00122 00123 pTmStream->write(pTmPacket); 00124 } 00125 00126 pTmStream->flush(); 00127 } 00128 00129 void CC_TelemetryManager::sendTelemetryPacket(TelemetryPacket* pTmPacket) { 00130 assert( pPacketQueue!=pNULL ); 00131 00132 for (int i=0; i<packetQueueSize; i++) 00133 if ( pPacketQueue[i]==pNULL ) { 00134 pPacketQueue[i]=pTmPacket; 00135 return; 00136 } 00137 00138 getEventRepository()->create(this,EVT_TM_QUEUE_FULL); 00139 return; 00140 } 00141 00142 void CC_TelemetryManager::unloadTelemetryPacket(TelemetryPacket* pTmPacket) { 00143 assert( pPacketQueue!=pNULL ); 00144 assert( pTmPacket!=pNULL ); 00145 00146 for (int i=0; i<packetQueueSize; i++) 00147 if ( pPacketQueue[i]==pTmPacket ) { 00148 pPacketQueue[i]=pNULL; 00149 return; 00150 } 00151 00152 return; 00153 } 00154 00155 unsigned int CC_TelemetryManager::getImmediateQueueLoaded() { 00156 assert( pPacketQueue!=pNULL ); 00157 00158 unsigned int counter = 0; 00159 for (int i=0; i<packetQueueSize; i++) 00160 if ( pPacketQueue[i]!=pNULL ) { 00161 counter++; 00162 } 00163 return counter; 00164 } 00165 00166 00167 bool CC_TelemetryManager::isObjectConfigured(void) { 00168 return (CC_RootObject::isObjectConfigured() && 00169 pTmModeManager!=pNULL && pTmStream!=pNULL && 00170 packetQueueSize!=-1 ); 00171 }
Copyright 2003 P&P Software GmbH - All Rights Reserved