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

DC_CycleDataItem16TmStream.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // DC_CycleDataItem16TmStream.cpp 00005 // 00006 // Version 1.1 00007 // Date 04.12.02 (Version 1.0) 00008 // 04.03.03 (Version 1.1) 00009 // Author A. Pasetti (P&P Software) 00010 // 00011 // Change Record: 00012 // Version 1.1: Changed implementation of method "flush" to be 00013 // equivalent to a call to method "reset". 00014 00015 #include "../GeneralInclude/CompilerSwitches.h" 00016 #include "../GeneralInclude/DebugSupport.h" 00017 #include "../GeneralInclude/ClassId.h" 00018 #include "../GeneralInclude/Constants.h" 00019 #include "../Data/DC_RawDataItem.h" 00020 #include "../Telemetry/TelemetryPacket.h" 00021 #include "DC_CycleDataItem16TmStream.h" 00022 00023 DC_CycleDataItem16TmStream::DC_CycleDataItem16TmStream(void) { 00024 nDataItems = 0; 00025 writeCounter = 0; 00026 setClassId(ID_CYCLEDATAITEM16TMSTREAM); 00027 } 00028 00029 void DC_CycleDataItem16TmStream::reset(void) { 00030 assert(nDataItems>0 && pDataItem!=pNULL); 00031 writeCounter = 0; 00032 } 00033 00034 void DC_CycleDataItem16TmStream::flush(void) { 00035 reset(); 00036 } 00037 00038 unsigned int DC_CycleDataItem16TmStream::getCapacity(void) { 00039 assert(nDataItems>0 && pDataItem!=pNULL); 00040 return nDataItems; 00041 } 00042 00043 void DC_CycleDataItem16TmStream::setNumberOfDataItems(unsigned int n) { 00044 assert( nDataItems == 0 ); // should only be called once 00045 assert( n > 0 ); 00046 00047 if (nDataItems == 0) { 00048 nDataItems = n; 00049 pDataItem = new DC_RawDataItem*[nDataItems]; 00050 for (unsigned int i=0; i<nDataItems; i++) 00051 pDataItem[i] = pNULL; 00052 reset(); 00053 } 00054 } 00055 00056 void DC_CycleDataItem16TmStream::setDataItem(unsigned int index, DC_RawDataItem* pDI) { 00057 assert(nDataItems>0 && index<nDataItems); 00058 assert(pDI!=pNULL); 00059 pDataItem[index] = pDI; 00060 } 00061 00062 bool DC_CycleDataItem16TmStream::doesPacketFit(TelemetryPacket* pPacket) { 00063 assert( isObjectConfigured() ); 00064 return ( pPacket->getNumberOfBytes() <= 2*(nDataItems-writeCounter) ); 00065 } 00066 00067 void DC_CycleDataItem16TmStream::write(TelemetryPacket* pItem) { 00068 assert( isObjectConfigured() ); 00069 unsigned short tmValue; 00070 unsigned short temp; 00071 for (unsigned int i=0; i<(pItem->getNumberOfBytes()-1);i=i+2) { 00072 if ( writeCounter < nDataItems) { 00073 tmValue = (unsigned short)pItem->getUnsignedByte(i); 00074 temp = ((unsigned short)pItem->getUnsignedByte(i+1))<<8; 00075 tmValue = tmValue + temp; 00076 pDataItem[writeCounter]->setUnsignedShort(tmValue); 00077 writeCounter++; 00078 } else 00079 break; 00080 } 00081 } 00082 00083 bool DC_CycleDataItem16TmStream::isObjectConfigured(void) { 00084 if (!TelemetryStream::isObjectConfigured() || nDataItems==0) 00085 return NOT_CONFIGURED; 00086 00087 for (unsigned int i=0; i<nDataItems; i++) { 00088 if ( pDataItem[i] == pNULL ) 00089 return NOT_CONFIGURED; 00090 } 00091 00092 return CONFIGURED; 00093 } 00094
Copyright 2003 P&P Software GmbH - All Rights Reserved