|  | #include <stdio.h> | 
|  | #include <pb_encode.h> | 
|  | #include <pb_decode.h> | 
|  | #include "simple.pb.h" | 
|  |  | 
|  | int main() | 
|  | { | 
|  | /* This is the buffer where we will store our message. */ | 
|  | uint8_t buffer[128]; | 
|  | size_t message_length; | 
|  | bool status; | 
|  |  | 
|  | /* Encode our message */ | 
|  | { | 
|  | /* Allocate space on the stack to store the message data. | 
|  | * | 
|  | * Nanopb generates simple struct definitions for all the messages. | 
|  | * - check out the contents of simple.pb.h! | 
|  | * It is a good idea to always initialize your structures | 
|  | * so that you do not have garbage data from RAM in there. | 
|  | */ | 
|  | SimpleMessage message = SimpleMessage_init_zero; | 
|  |  | 
|  | /* Create a stream that will write to our buffer. */ | 
|  | pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); | 
|  |  | 
|  | /* Fill in the lucky number */ | 
|  | message.lucky_number = 13; | 
|  |  | 
|  | /* Now we are ready to encode the message! */ | 
|  | status = pb_encode(&stream, SimpleMessage_fields, &message); | 
|  | message_length = stream.bytes_written; | 
|  |  | 
|  | /* Then just check for any errors.. */ | 
|  | if (!status) | 
|  | { | 
|  | printf("Encoding failed: %s\n", PB_GET_ERROR(&stream)); | 
|  | return 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | /* Now we could transmit the message over network, store it in a file or | 
|  | * wrap it to a pigeon's leg. | 
|  | */ | 
|  |  | 
|  | /* But because we are lazy, we will just decode it immediately. */ | 
|  |  | 
|  | { | 
|  | /* Allocate space for the decoded message. */ | 
|  | SimpleMessage message = SimpleMessage_init_zero; | 
|  |  | 
|  | /* Create a stream that reads from the buffer. */ | 
|  | pb_istream_t stream = pb_istream_from_buffer(buffer, message_length); | 
|  |  | 
|  | /* Now we are ready to decode the message. */ | 
|  | status = pb_decode(&stream, SimpleMessage_fields, &message); | 
|  |  | 
|  | /* Check for errors... */ | 
|  | if (!status) | 
|  | { | 
|  | printf("Decoding failed: %s\n", PB_GET_ERROR(&stream)); | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | /* Print the data contained in the message. */ | 
|  | printf("Your lucky number was %d!\n", message.lucky_number); | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  |