00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#include "../GeneralInclude/CompilerSwitches.h"
00011
#include "../GeneralInclude/DebugSupport.h"
00012
#include "../GeneralInclude/BasicTypes.h"
00013
#include "../GeneralInclude/ClassId.h"
00014
#include "../GeneralInclude/Constants.h"
00015
#include "../Telemetry/DC_DummyPUSTelemetryPacket.h"
00016
#include "../Telemetry/DC_PUSDataReportingPacket.h"
00017
#include "../Telemetry/DC_PUSMemoryDumpAbsolute.h"
00018
#include "../Telemetry/DC_PUSMemoryDumpOffset.h"
00019
#include "../Telemetry/DC_PUSTcVerificationPacket.h"
00020
#include "../Base/CC_RootObject.h"
00021
#include "CC_TelemetryPacketFactory.h"
00022
00023
CC_TelemetryPacketFactory* CC_TelemetryPacketFactory::pInstance = pNULL;
00024
00025 CC_TelemetryPacketFactory::CC_TelemetryPacketFactory(
void) {
00026 setClassId(ID_TELECOMMANDFACTORY);
00027
00028
00029 sizeDummyPUSTelemetryPacket = 2;
00030 poolDummyPUSTelemetryPacket =
new DC_DummyPUSTelemetryPacket*[sizeDummyPUSTelemetryPacket];
00031
for (
unsigned int i=0; i<sizeDummyPUSTelemetryPacket; i++)
00032 poolDummyPUSTelemetryPacket[i] = pNULL;
00033
00034 sizePUSDataReportingPacket = 2;
00035 poolPUSDataReportingPacket =
new DC_PUSDataReportingPacket*[sizePUSDataReportingPacket];
00036
for (
unsigned int i=0; i<sizePUSDataReportingPacket; i++)
00037 poolPUSDataReportingPacket[i] = pNULL;
00038
00039 sizePUSMemoryDumpAbsolute = 1;
00040 poolPUSMemoryDumpAbsolute =
new DC_PUSMemoryDumpAbsolute*[sizePUSMemoryDumpAbsolute];
00041
for (
unsigned int i=0; i<sizePUSMemoryDumpAbsolute; i++)
00042 poolPUSMemoryDumpAbsolute[i] = pNULL;
00043
00044 sizePUSMemoryDumpOffset = 1;
00045 poolPUSMemoryDumpOffset =
new DC_PUSMemoryDumpOffset*[sizePUSMemoryDumpOffset];
00046
for (
unsigned int i=0; i<sizePUSMemoryDumpOffset; i++)
00047 poolPUSMemoryDumpOffset[i] = pNULL;
00048
00049 sizePUSTcVerificationPacket = 1;
00050 poolPUSTcVerificationPacket =
new DC_PUSTcVerificationPacket*[sizePUSTcVerificationPacket];
00051
for (
unsigned int i=0; i<sizePUSTcVerificationPacket; i++)
00052 poolPUSTcVerificationPacket[i] = pNULL;
00053
00054 }
00055
00056 bool CC_TelemetryPacketFactory::isObjectConfigured(
void) {
00057
00058
if ( !
CC_RootObject::isObjectConfigured() )
00059
return false;
00060
00061
if ( poolDummyPUSTelemetryPacket==pNULL )
00062
return false;
00063
00064
for (
unsigned int i=0; i<sizeDummyPUSTelemetryPacket; i++)
00065
if ( poolDummyPUSTelemetryPacket[i]==pNULL )
00066
return false;
00067
00068
if ( poolPUSDataReportingPacket==pNULL )
00069
return false;
00070
00071
for (
unsigned int i=0; i<sizePUSDataReportingPacket; i++)
00072
if ( poolPUSDataReportingPacket[i]==pNULL )
00073
return false;
00074
00075
if ( poolPUSMemoryDumpAbsolute==pNULL )
00076
return false;
00077
00078
for (
unsigned int i=0; i<sizePUSMemoryDumpAbsolute; i++)
00079
if ( poolPUSMemoryDumpAbsolute[i]==pNULL )
00080
return false;
00081
00082
if ( poolPUSMemoryDumpOffset==pNULL )
00083
return false;
00084
00085
for (
unsigned int i=0; i<sizePUSMemoryDumpOffset; i++)
00086
if ( poolPUSMemoryDumpOffset[i]==pNULL )
00087
return false;
00088
00089
if ( poolPUSTcVerificationPacket==pNULL )
00090
return false;
00091
00092
for (
unsigned int i=0; i<sizePUSTcVerificationPacket; i++)
00093
if ( poolPUSTcVerificationPacket[i]==pNULL )
00094
return false;
00095
00096
00097
return true;
00098 }
00099
00100 CC_TelemetryPacketFactory*
CC_TelemetryPacketFactory::getInstance(
void) {
00101
if (pInstance==pNULL)
00102 pInstance =
new CC_TelemetryPacketFactory();
00103
return pInstance;
00104 }
00105
00106
00107 void CC_TelemetryPacketFactory::setTelemetryPacket(
unsigned int i,
DC_DummyPUSTelemetryPacket* pItem) {
00108 assert(i<sizeDummyPUSTelemetryPacket);
00109 assert(pItem!=pNULL);
00110 poolDummyPUSTelemetryPacket[i] = pItem;
00111 poolDummyPUSTelemetryPacket[i]->
setInUse(
false);
00112 }
00113
00114 unsigned int CC_TelemetryPacketFactory::getNumberDummyPUSTelemetryPacket(
void) {
00115
unsigned int counter = 0;
00116
for (
unsigned int i=0; i<sizeDummyPUSTelemetryPacket; i++)
00117
if ( poolDummyPUSTelemetryPacket[i]->
isInUse() )
00118 counter++;
00119
return counter;
00120 }
00121
00122 unsigned int CC_TelemetryPacketFactory::getCapacityDummyPUSTelemetryPacket(
void) {
00123
return sizeDummyPUSTelemetryPacket;
00124 }
00125
00126
00127 DC_DummyPUSTelemetryPacket*
CC_TelemetryPacketFactory::allocateDummyPUSTelemetryPacket() {
00128 assert(
isObjectConfigured() );
00129
for (
unsigned int i=0; i<sizeDummyPUSTelemetryPacket; i++)
00130
if (!poolDummyPUSTelemetryPacket[i]->
isInUse() ) {
00131 poolDummyPUSTelemetryPacket[i]->
setInUse(
true);
00132
return poolDummyPUSTelemetryPacket[i];
00133 }
00134
return pNULL;
00135 }
00136
00137 bool CC_TelemetryPacketFactory::isFreeDummyPUSTelemetryPacket() {
00138
for (
unsigned int i=0; i<sizeDummyPUSTelemetryPacket; i++)
00139
if ( !poolDummyPUSTelemetryPacket[i]->
isInUse() )
00140
return true;
00141
00142
return false;
00143 }
00144
00145
00146
00147 void CC_TelemetryPacketFactory::setTelemetryPacket(
unsigned int i,
DC_PUSDataReportingPacket* pItem) {
00148 assert(i<sizePUSDataReportingPacket);
00149 assert(pItem!=pNULL);
00150 poolPUSDataReportingPacket[i] = pItem;
00151 poolPUSDataReportingPacket[i]->
setInUse(
false);
00152 }
00153
00154 unsigned int CC_TelemetryPacketFactory::getNumberPUSDataReportingPacket(
void) {
00155
unsigned int counter = 0;
00156
for (
unsigned int i=0; i<sizePUSDataReportingPacket; i++)
00157
if ( poolPUSDataReportingPacket[i]->
isInUse() )
00158 counter++;
00159
return counter;
00160 }
00161
00162 unsigned int CC_TelemetryPacketFactory::getCapacityPUSDataReportingPacket(
void) {
00163
return sizePUSDataReportingPacket;
00164 }
00165
00166
00167 DC_PUSDataReportingPacket*
CC_TelemetryPacketFactory::allocatePUSDataReportingPacket(
unsigned int DefinitionBufferSize,
unsigned int ValueBufferSize,
unsigned int MaxNumberFA) {
00168 assert(
isObjectConfigured() );
00169
for (
unsigned int i=0; i<sizePUSDataReportingPacket; i++)
00170
if (poolPUSDataReportingPacket[i]->
getDefinitionBufferSize()>=DefinitionBufferSize &&
00171 poolPUSDataReportingPacket[i]->
getValueBufferSize()>=ValueBufferSize &&
00172 poolPUSDataReportingPacket[i]->getMaxNumberFA()>=MaxNumberFA &&
00173 !poolPUSDataReportingPacket[i]->isInUse() ) {
00174 poolPUSDataReportingPacket[i]->setInUse(
true);
00175
return poolPUSDataReportingPacket[i];
00176 }
00177
return pNULL;
00178 }
00179
00180 bool CC_TelemetryPacketFactory::isFreePUSDataReportingPacket(
unsigned int DefinitionBufferSize,
unsigned int ValueBufferSize,
unsigned int MaxNumberFA) {
00181
for (
unsigned int i=0; i<sizePUSDataReportingPacket; i++)
00182
if ( poolPUSDataReportingPacket[i]->
getDefinitionBufferSize()>=DefinitionBufferSize &&
00183 poolPUSDataReportingPacket[i]->
getValueBufferSize()>=ValueBufferSize &&
00184 poolPUSDataReportingPacket[i]->getMaxNumberFA()>=MaxNumberFA &&
00185 !poolPUSDataReportingPacket[i]->isInUse() )
00186
return true;
00187
00188
return false;
00189 }
00190
00191
00192 DC_PUSDataReportingPacket*
CC_TelemetryPacketFactory::getPUSDataReportingPacket(
TD_SID sid) {
00193 assert(
isObjectConfigured() );
00194 assert( sid>0 );
00195
00196
for (
unsigned int i=0; i<sizePUSDataReportingPacket; i++)
00197
if ( ( poolPUSDataReportingPacket[i]->
getSID() == sid ) &&
00198 ( poolPUSDataReportingPacket[i]->
isInUse() ) ) {
00199
return poolPUSDataReportingPacket[i];
00200 }
00201
return pNULL;
00202 }
00203
00204 void CC_TelemetryPacketFactory::setTelemetryPacket(
unsigned int i,
DC_PUSMemoryDumpAbsolute* pItem) {
00205 assert(i<sizePUSMemoryDumpAbsolute);
00206 assert(pItem!=pNULL);
00207 poolPUSMemoryDumpAbsolute[i] = pItem;
00208 poolPUSMemoryDumpAbsolute[i]->
setInUse(
false);
00209 }
00210
00211 unsigned int CC_TelemetryPacketFactory::getNumberPUSMemoryDumpAbsolute(
void) {
00212
unsigned int counter = 0;
00213
for (
unsigned int i=0; i<sizePUSMemoryDumpAbsolute; i++)
00214
if ( poolPUSMemoryDumpAbsolute[i]->
isInUse() )
00215 counter++;
00216
return counter;
00217 }
00218
00219 unsigned int CC_TelemetryPacketFactory::getCapacityPUSMemoryDumpAbsolute(
void) {
00220
return sizePUSMemoryDumpAbsolute;
00221 }
00222
00223
00224 DC_PUSMemoryDumpAbsolute*
CC_TelemetryPacketFactory::allocatePUSMemoryDumpAbsolute(
unsigned int MaxNumberBlocks,
unsigned int DumpBufferSize) {
00225 assert(
isObjectConfigured() );
00226
for (
unsigned int i=0; i<sizePUSMemoryDumpAbsolute; i++)
00227
if (poolPUSMemoryDumpAbsolute[i]->
getMaxNumberBlocks()>=MaxNumberBlocks &&
00228 poolPUSMemoryDumpAbsolute[i]->
getDumpBufferSize()>=DumpBufferSize &&
00229 !poolPUSMemoryDumpAbsolute[i]->isInUse() ) {
00230 poolPUSMemoryDumpAbsolute[i]->setInUse(
true);
00231
return poolPUSMemoryDumpAbsolute[i];
00232 }
00233
return pNULL;
00234 }
00235
00236 bool CC_TelemetryPacketFactory::isFreePUSMemoryDumpAbsolute(
unsigned int MaxNumberBlocks,
unsigned int DumpBufferSize) {
00237
for (
unsigned int i=0; i<sizePUSMemoryDumpAbsolute; i++)
00238
if ( poolPUSMemoryDumpAbsolute[i]->
getMaxNumberBlocks()>=MaxNumberBlocks &&
00239 poolPUSMemoryDumpAbsolute[i]->
getDumpBufferSize()>=DumpBufferSize &&
00240 !poolPUSMemoryDumpAbsolute[i]->isInUse() )
00241
return true;
00242
00243
return false;
00244 }
00245
00246
00247
00248 void CC_TelemetryPacketFactory::setTelemetryPacket(
unsigned int i,
DC_PUSMemoryDumpOffset* pItem) {
00249 assert(i<sizePUSMemoryDumpOffset);
00250 assert(pItem!=pNULL);
00251 poolPUSMemoryDumpOffset[i] = pItem;
00252 poolPUSMemoryDumpOffset[i]->
setInUse(
false);
00253 }
00254
00255 unsigned int CC_TelemetryPacketFactory::getNumberPUSMemoryDumpOffset(
void) {
00256
unsigned int counter = 0;
00257
for (
unsigned int i=0; i<sizePUSMemoryDumpOffset; i++)
00258
if ( poolPUSMemoryDumpOffset[i]->
isInUse() )
00259 counter++;
00260
return counter;
00261 }
00262
00263 unsigned int CC_TelemetryPacketFactory::getCapacityPUSMemoryDumpOffset(
void) {
00264
return sizePUSMemoryDumpOffset;
00265 }
00266
00267
00268 DC_PUSMemoryDumpOffset*
CC_TelemetryPacketFactory::allocatePUSMemoryDumpOffset(
unsigned int MaxNumberBlocks,
unsigned int DumpBufferSize) {
00269 assert(
isObjectConfigured() );
00270
for (
unsigned int i=0; i<sizePUSMemoryDumpOffset; i++)
00271
if (poolPUSMemoryDumpOffset[i]->
getMaxNumberBlocks()>=MaxNumberBlocks &&
00272 poolPUSMemoryDumpOffset[i]->
getDumpBufferSize()>=DumpBufferSize &&
00273 !poolPUSMemoryDumpOffset[i]->isInUse() ) {
00274 poolPUSMemoryDumpOffset[i]->setInUse(
true);
00275
return poolPUSMemoryDumpOffset[i];
00276 }
00277
return pNULL;
00278 }
00279
00280 bool CC_TelemetryPacketFactory::isFreePUSMemoryDumpOffset(
unsigned int MaxNumberBlocks,
unsigned int DumpBufferSize) {
00281
for (
unsigned int i=0; i<sizePUSMemoryDumpOffset; i++)
00282
if ( poolPUSMemoryDumpOffset[i]->
getMaxNumberBlocks()>=MaxNumberBlocks &&
00283 poolPUSMemoryDumpOffset[i]->
getDumpBufferSize()>=DumpBufferSize &&
00284 !poolPUSMemoryDumpOffset[i]->isInUse() )
00285
return true;
00286
00287
return false;
00288 }
00289
00290
00291
00292 void CC_TelemetryPacketFactory::setTelemetryPacket(
unsigned int i,
DC_PUSTcVerificationPacket* pItem) {
00293 assert(i<sizePUSTcVerificationPacket);
00294 assert(pItem!=pNULL);
00295 poolPUSTcVerificationPacket[i] = pItem;
00296 poolPUSTcVerificationPacket[i]->
setInUse(
false);
00297 }
00298
00299 unsigned int CC_TelemetryPacketFactory::getNumberPUSTcVerificationPacket(
void) {
00300
unsigned int counter = 0;
00301
for (
unsigned int i=0; i<sizePUSTcVerificationPacket; i++)
00302
if ( poolPUSTcVerificationPacket[i]->
isInUse() )
00303 counter++;
00304
return counter;
00305 }
00306
00307 unsigned int CC_TelemetryPacketFactory::getCapacityPUSTcVerificationPacket(
void) {
00308
return sizePUSTcVerificationPacket;
00309 }
00310
00311
00312 DC_PUSTcVerificationPacket*
CC_TelemetryPacketFactory::allocatePUSTcVerificationPacket() {
00313 assert(
isObjectConfigured() );
00314
for (
unsigned int i=0; i<sizePUSTcVerificationPacket; i++)
00315
if (!poolPUSTcVerificationPacket[i]->
isInUse() ) {
00316 poolPUSTcVerificationPacket[i]->
setInUse(
true);
00317
return poolPUSTcVerificationPacket[i];
00318 }
00319
return pNULL;
00320 }
00321
00322 bool CC_TelemetryPacketFactory::isFreePUSTcVerificationPacket() {
00323
for (
unsigned int i=0; i<sizePUSTcVerificationPacket; i++)
00324
if ( !poolPUSTcVerificationPacket[i]->
isInUse() )
00325
return true;
00326
00327
return false;
00328 }
00329
00330
00331