Skip to content

Commit 66460e9

Browse files
committed
Added decode
1 parent e8c9baf commit 66460e9

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

src/meshtastic-pb.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include <pb_decode.h>
2+
#include <pb_encode.h>
3+
4+
/// helper function for encoding a record as a protobuf, any failures to encode are fatal and we will panic
5+
/// returns the encoded packet size
6+
size_t pb_encode_to_bytes(uint8_t *destbuf, size_t destbufsize, const pb_msgdesc_t *fields, const void *src_struct)
7+
{
8+
pb_ostream_t stream = pb_ostream_from_buffer(destbuf, destbufsize);
9+
if (!pb_encode(&stream, fields, src_struct)) {
10+
Serial.println("Panic: can't encode protobuf reason='%s'\n", PB_GET_ERROR(&stream));
11+
} else {
12+
return stream.bytes_written;
13+
}
14+
}
15+
16+
/// helper function for decoding a record as a protobuf, we will return false if the decoding failed
17+
bool pb_decode_from_bytes(const uint8_t *srcbuf, size_t srcbufsize, const pb_msgdesc_t *fields, void *dest_struct)
18+
{
19+
pb_istream_t stream = pb_istream_from_buffer(srcbuf, srcbufsize);
20+
if (!pb_decode(&stream, fields, dest_struct)) {
21+
Serial.println("Can't decode protobuf reason='%s', pb_msgdesc %p\n", PB_GET_ERROR(&stream), fields);
22+
return false;
23+
} else {
24+
return true;
25+
}
26+
}

src/mt_protocol.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "mt_internals.h"
2+
#include "meshtastic-pb.h"
23

34
// Magic number at the start of all MT packets
45
#define MT_MAGIC_0 0x94
@@ -191,14 +192,18 @@ bool handle_config_complete_id(uint32_t now, uint32_t config_complete_id) {
191192
return true;
192193
}
193194

195+
if (mp.which_payload_variant == meshtastic_MeshPacket_decoded_tag && mp.decoded.portnum == ourPortNum) {
196+
197+
194198
bool handle_mesh_packet(meshtastic_MeshPacket *meshPacket) {
195199
if (meshPacket->which_payload_variant == meshtastic_MeshPacket_decoded_tag) {
196200
if (meshPacket->decoded.portnum == meshtastic_PortNum_TEXT_MESSAGE_APP) {
197201
if (text_message_callback != NULL)
198202
text_message_callback(meshPacket->from, (const char*)meshPacket->decoded.payload.bytes);
199203
} else if (meshPacket->decoded.portnum == meshtastic_PortNum_TELEMETRY_APP) {
200-
if (telemetry_callback != NULL)
201-
telemetry_callback(meshPacket->from, );
204+
meshtastic_Telemetry *telemetry = {0};
205+
if (telemetry_callback != NULL && pb_decode_from_bytes(meshPacket->decoded.payload.bytes, meshPacket->decoded.payload.bytes, &meshtastic_Telemetry_msg, &telemetry))
206+
telemetry_callback(meshPacket->from, telemetry);
202207
} else {
203208
// TODO handle other portnums
204209
return false;

0 commit comments

Comments
 (0)