diff --git a/ChangeLog b/ChangeLog index 598eee743608bec225943ccfd1ac3b2e361e7b87..ff76b3ada2601f5b4bf62309181c89c43d19673a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-09-18 bulgarelli Andrea Bulgarelli + + * src/Packet.cpp (Packet::createPacketType): bool Packet::createPacketType(char* fileName, bool isprefix, word dimprefix) bug fix when the configuration files are read more than one time + 2013-09-17 Andrea Bulgarelli * include/InputPacketStream.h (InputPacketStream): diff --git a/include/InputPacketStream.h b/include/InputPacketStream.h index 9e1dc324d3c90c38c3f05503bbe6e95ed2e32196..de3f7445bae4b900660cf281fffd9ef7f0138036 100644 --- a/include/InputPacketStream.h +++ b/include/InputPacketStream.h @@ -65,6 +65,8 @@ public: /// \return A pointer telemetry packet. Make attention: the object returned is one of the TM packet object of the array of this object. Don't delete it! Packet* readPacket() throw(PacketExceptionIO*); + Packet* decodePacket(byte* stream); + protected: Input* in; diff --git a/include/Packet.h b/include/Packet.h index e2b865cfd75041fb0331a934453f60dd70544df7..0cd97856416b6c5cf0d1758e108e4f4d58652cbb 100644 --- a/include/Packet.h +++ b/include/Packet.h @@ -90,6 +90,10 @@ public: /// \param stream A pointer to the stream of byte, with prefix and packet bool verifyPacketValue(byte* stream); + /// Sets all the fields of the packet with correct value contained into the input ByteStream. + /// \param stream A pointer to the stream of byte, with prefix and packet + bool setPacketValue(byte* stream); + /// Verifies if within the ByteStream passed with arguments it's present a correct packet. /// \pre The structure of the stream must be loaded. /// \param prefix This is the prefix of the packet. diff --git a/src/InputPacketStream.cpp b/src/InputPacketStream.cpp index db886e52c63de59a7adad321be615c856dcfe52f..a58055a41ecc3a1fa4f069a72fa5882f6a58cb7d 100644 --- a/src/InputPacketStream.cpp +++ b/src/InputPacketStream.cpp @@ -174,3 +174,16 @@ dword InputPacketStream::getPacketDimension(byte* stream) { delete tempHeader; return dim; } + +Packet* PacketLib::InputPacketStream::decodePacket(byte* stream) { + + int index = detPacketType(stream); + if(index > 0) { + Packet* p = getPacketType(index); + p->setPacketValue(stream); + return p; + } + else + return 0; + +} diff --git a/src/Packet.cpp b/src/Packet.cpp index 33542caefba41df1b83741aa79bff399525324d7..16652eb61b2236ac28a63b39fcca4ed41fa4e86a 100644 --- a/src/Packet.cpp +++ b/src/Packet.cpp @@ -93,6 +93,7 @@ bool Packet::createPacketType(char* fileName, bool isprefix, word dimprefix) thr if(file.open(argv)) { delete[] argv; + file.setpos(0); /// retrieve name of packet header name = file.getLine(); /// find the PacketHeader section @@ -158,8 +159,8 @@ bool Packet::createPacketType(char* fileName, bool isprefix, word dimprefix) thr if(!section_found) throw new PacketExceptionFileFormat("It's impossibile to identify the type of source data field. Expected block, noblock or rblock keyword."); - delete[] block; - delete[] typeOfPacket; + //delete[] block; + //delete[] typeOfPacket; if(dataField->sourceDataField->loadFields(file)) { @@ -854,3 +855,21 @@ bool Packet::verifyPacketValue(byte* stream) { return verifyPacketValue(prefix, packet); } + +bool Packet::setPacketValue(byte* stream) { + dword dimPre = 0; + if(thereisprefix) + dimPre += dimPrefix; + ByteStream* prefix = new ByteStream(stream, dimPre, bigendian); + + dword dim = 0; + dword dimHeader = header->getDimension(); + dim += dimHeader; + tempHeader->setStream(stream+dimPre, dimHeader, bigendian); + header->setByteStream(tempHeader); + dim += header->getDimensionOfPacketLenght() + 1; + ByteStream* packet = new ByteStream(stream+dimPre, dim, bigendian); + + return setPacketValue(prefix, packet); + +}