Home | History | Annotate | Download | only in simple
      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 
     69