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