added two new classes for config/service serialisers and a base generic serialiser class

This commit is contained in:
csoler 2017-04-24 17:10:01 +02:00
parent dc2df071a5
commit 8ae6541ceb
2 changed files with 50 additions and 16 deletions

View File

@ -2,11 +2,11 @@
#include "serialization/rsserializer.h" #include "serialization/rsserializer.h"
#include "serialization/rstypeserializer.h" #include "serialization/rstypeserializer.h"
const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 ); const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 );
const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 );
const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 ); const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 );
RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) RsItem *RsGenericSerializer::deserialise(void *data, uint32_t *size)
{ {
uint32_t rstype = getRsItemId(const_cast<void*>((const void*)data)) ; uint32_t rstype = getRsItemId(const_cast<void*>((const void*)data)) ;
@ -37,7 +37,7 @@ RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size)
return NULL ; return NULL ;
} }
bool RsServiceSerializer::serialise(RsItem *item,void *data,uint32_t *size) bool RsGenericSerializer::serialise(RsItem *item,void *data,uint32_t *size)
{ {
SerializeContext ctx(static_cast<uint8_t*>(data),0,mFormat,mFlags); SerializeContext ctx(static_cast<uint8_t*>(data),0,mFormat,mFlags);
@ -64,7 +64,7 @@ bool RsServiceSerializer::serialise(RsItem *item,void *data,uint32_t *size)
return true ; return true ;
} }
uint32_t RsServiceSerializer::size(RsItem *item) uint32_t RsGenericSerializer::size(RsItem *item)
{ {
SerializeContext ctx(NULL,0,mFormat,mFlags); SerializeContext ctx(NULL,0,mFormat,mFlags);
@ -74,7 +74,7 @@ uint32_t RsServiceSerializer::size(RsItem *item)
return ctx.mOffset ; return ctx.mOffset ;
} }
void RsServiceSerializer::print(RsItem *item) void RsGenericSerializer::print(RsItem *item)
{ {
SerializeContext ctx(NULL,0,mFormat,mFlags); SerializeContext ctx(NULL,0,mFormat,mFlags);

View File

@ -10,9 +10,11 @@
#define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : "
class RsServiceSerializer: public RsSerialType class RsGenericSerializer: public RsSerialType
{ {
public: public:
// These are convenience flags to be used by the items when processing the data. The names of the flags // These are convenience flags to be used by the items when processing the data. The names of the flags
// are not very important. What matters is that the serial_process() method of each item correctly // are not very important. What matters is that the serial_process() method of each item correctly
// deals with the data when it sees the flags, if the serialiser sets them. By default the flags are not // deals with the data when it sees the flags, if the serialiser sets them. By default the flags are not
@ -23,13 +25,7 @@ class RsServiceSerializer: public RsSerialType
static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001 static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001
static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002 static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002
RsServiceSerializer(uint16_t service_id, /*! create_item
SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY,
SerializationFlags flags = SERIALIZATION_FLAG_NONE)
: RsSerialType(RS_PKT_VERSION_SERVICE,service_id),mFormat(format),mFlags(flags) {}
/*! create_item
* should be overloaded to create the correct type of item depending on the data * should be overloaded to create the correct type of item depending on the data
*/ */
virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const=0; virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const=0;
@ -41,10 +37,48 @@ class RsServiceSerializer: public RsSerialType
uint32_t size(RsItem *item) ; uint32_t size(RsItem *item) ;
void print(RsItem *item) ; void print(RsItem *item) ;
protected:
RsGenericSerializer(uint8_t serial_class,
uint8_t serial_type,
SerializeContext::SerializationFormat format,
SerializationFlags flags )
: RsSerialType(RS_PKT_VERSION1,serial_class,serial_type), mFormat(format),mFlags(flags)
{}
RsGenericSerializer(uint16_t service,
SerializeContext::SerializationFormat format,
SerializationFlags flags )
: RsSerialType(RS_PKT_VERSION_SERVICE,service), mFormat(format),mFlags(flags)
{}
private: private:
SerializeContext::SerializationFormat mFormat ; SerializeContext::SerializationFormat mFormat ;
SerializationFlags mFlags ; SerializationFlags mFlags ;
};
class RsServiceSerializer: public RsGenericSerializer
{
public:
RsServiceSerializer(uint16_t service_id,
SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY,
SerializationFlags flags = SERIALIZATION_FLAG_NONE)
: RsGenericSerializer(service_id,format,flags) {}
};
class RsConfigSerializer: public RsGenericSerializer
{
public:
RsConfigSerializer(uint8_t config_class,
uint8_t config_type,
SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY,
SerializationFlags flags = RsGenericSerializer::SERIALIZATION_FLAG_NONE)
: RsGenericSerializer(config_class,config_type,format,flags) {}
}; };