firmware/src/mesh-pb-constants.cpp

40 lines
1.2 KiB
C++
Raw Normal View History

2020-02-03 19:15:17 +00:00
#include <Arduino.h>
#include "configuration.h"
2020-02-03 19:15:17 +00:00
#include "mesh-pb-constants.h"
#include <pb_encode.h>
#include <pb_decode.h>
#include <assert.h>
/// helper function for encoding a record as a protobuf, any failures to encode are fatal and we will panic
/// returns the encoded packet size
size_t pb_encode_to_bytes(uint8_t *destbuf, size_t destbufsize, const pb_msgdesc_t *fields, const void *src_struct)
{
pb_ostream_t stream = pb_ostream_from_buffer(destbuf, destbufsize);
2020-02-04 21:47:42 +00:00
if (!pb_encode(&stream, fields, src_struct))
2020-02-03 19:15:17 +00:00
{
DEBUG_MSG("Error: can't encode protobuf %s\n", PB_GET_ERROR(&stream));
2020-02-03 19:15:17 +00:00
assert(0); // FIXME - panic
}
else
{
return stream.bytes_written;
}
}
/// helper function for decoding a record as a protobuf, we will return false if the decoding failed
bool pb_decode_from_bytes(const uint8_t *srcbuf, size_t srcbufsize, const pb_msgdesc_t *fields, void *dest_struct)
{
pb_istream_t stream = pb_istream_from_buffer(srcbuf, srcbufsize);
2020-02-04 21:47:42 +00:00
if (!pb_decode(&stream, fields, dest_struct))
2020-02-03 19:15:17 +00:00
{
DEBUG_MSG("Error: can't decode protobuf %s\n", PB_GET_ERROR(&stream));
2020-02-03 19:15:17 +00:00
return false;
}
else
{
return true;
}
}