xref: /nrf52832-nimble/rt-thread/examples/nanopb/simple.c (revision 104654410c56c573564690304ae786df310c91fc)
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