14namespace Systemic::Pixels::Messages::Serialization
22 template <
typename T, std::enable_if_t<std::is_base_of_v<Systemic::Pixels::Messages::PixelMessage, T>,
int> = 0>
26 outData.resize(
sizeof(T));
27 memcpy(outData.data(), &message,
sizeof(T));
37 template <
typename T, std::enable_if_t<std::is_base_of_v<Systemic::Pixels::Messages::PixelMessage, T>,
int> = 0>
40 if (data.size() ==
sizeof(T))
42 auto msg = std::shared_ptr<T>(
new T{});
43 memcpy(msg.get(), data.data(), data.size());
58 const auto type =
static_cast<MessageType>(data[0]);
61 case MessageType::IAmADie:
62 return deserializeMessage<IAmADie>(data);
63 case MessageType::RollState:
64 return deserializeMessage<RollState>(data);
65 case MessageType::Blink:
66 return deserializeMessage<Blink>(data);
67 case MessageType::BatteryLevel:
68 return deserializeMessage<BatteryLevel>(data);
69 case MessageType::RequestRssi:
70 return deserializeMessage<RequestRssi>(data);
71 case MessageType::Rssi:
72 return deserializeMessage<Rssi>(data);
75 if (data.size() == 1 && type != MessageType::None)
77 return std::shared_ptr<PixelMessage>(
new PixelMessage{ type });
void serializeMessage(const T &message, std::vector< uint8_t > &outData)
Serialize a PixelMessage instance to binary data so it can be send to a Pixels die.
Definition: MessageSerialization.h:23
std::shared_ptr< const T > deserializeMessage(const std::vector< uint8_t > &data)
Deserialize some binary data received from a Pixels die to a PixelMessage.
Definition: MessageSerialization.h:38
List of Pixel messages and their respective classes.
MessageType
Lists all the Pixel dice message types. The value is used for the first byte of data in a Pixel messa...
Definition: Messages.h:19
Definition: Messages.h:96