Merge pull request #171 from kylemanna/misc
[apps/agl-service-can-low-level.git] / examples / simple / simple.c
1 #include <stdio.h>
2 #include <pb_encode.h>
3 #include <pb_decode.h>
4 #include "simple.pb.h"
5
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