1#include <stdio.h>
2#include <pb_encode.h>
3#include <pb_decode.h>
4#include "simple.pb.h"
5
6int 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