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

@ -10,9 +10,11 @@
#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
// 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
@ -23,13 +25,7 @@ class RsServiceSerializer: public RsSerialType
static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001
static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002
RsServiceSerializer(uint16_t service_id,
SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY,
SerializationFlags flags = SERIALIZATION_FLAG_NONE)
: RsSerialType(RS_PKT_VERSION_SERVICE,service_id),mFormat(format),mFlags(flags) {}
/*! create_item
/*! create_item
* 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;
@ -41,10 +37,48 @@ class RsServiceSerializer: public RsSerialType
uint32_t size(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:
SerializeContext::SerializationFormat mFormat ;
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) {}
};