• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <pb_encode.h>
3 #include <pb_decode.h>
4 #include "simple.pb.h"
5 
main()6 int main()
7 {
8     /* This is the buffer where we will store our message. */
9     uint8_t buffer[128];
10     size_t message_length;
11     bool status;
12 
13     /* Encode our message */
14     {
15         /* Allocate space on the stack to store the message data.
16          *
17          * Nanopb generates simple struct definitions for all the messages.
18          * - check out the contents of simple.pb.h! */
19         SimpleMessage message;
20 
21         /* Create a stream that will write to our buffer. */
22         pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
23 
24         /* Fill in the lucky number */
25         message.lucky_number = 13;
26 
27         /* Now we are ready to encode the message! */
28         status = pb_encode(&stream, SimpleMessage_fields, &message);
29         message_length = stream.bytes_written;
30 
31         /* Then just check for any errors.. */
32         if (!status)
33         {
34             printf("Encoding failed: %s\n", PB_GET_ERROR(&stream));
35             return 1;
36         }
37     }
38 
39     /* Now we could transmit the message over network, store it in a file or
40      * wrap it to a pigeon's leg.
41      */
42 
43     /* But because we are lazy, we will just decode it immediately. */
44 
45     {
46         /* Allocate space for the decoded message. */
47         SimpleMessage message;
48 
49         /* Create a stream that reads from the buffer. */
50         pb_istream_t stream = pb_istream_from_buffer(buffer, message_length);
51 
52         /* Now we are ready to decode the message. */
53         status = pb_decode(&stream, SimpleMessage_fields, &message);
54 
55         /* Check for errors... */
56         if (!status)
57         {
58             printf("Decoding failed: %s\n", PB_GET_ERROR(&stream));
59             return 1;
60         }
61 
62         /* Print the data contained in the message. */
63         printf("Your lucky number was %d!\n", message.lucky_number);
64     }
65 
66     return 0;
67 }
68 
69