Difference between revisions of "Protobuf notes"
m (Add protobuf.dev links.) |
m (Nanopb concepts.md documentation from googlesource.com.) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
* https://protobuf.dev/getting-started/cpptutorial/ | * https://protobuf.dev/getting-started/cpptutorial/ | ||
* https://protobuf.dev/programming-guides/proto3/ | * https://protobuf.dev/programming-guides/proto3/ | ||
+ | |||
+ | Also a good more detailed introduction: | ||
+ | |||
+ | * https://chromium.googlesource.com/external/github.com/nanopb/nanopb/+/refs/heads/master/docs/concepts.md | ||
+ | |||
+ | When compiling nanopb Protobuf library as part of C language programs, nested Protobuf messages require use of nanopb defined function type `pb_callback_t` in order to encode and to decode those nested messages. Some examples of this on github: | ||
+ | |||
+ | * https://github.com/particle-iot/device-os/blob/9338b13b1e611f1b57f71f702795c2ca71142c1f/proto_defs/src/cloud/describe.pb.h#L9 | ||
+ | |||
+ | * https://github.com/hello/kitsune/blob/6a28afa80dd4547907e58341a84bd0b5bec5d88e/kitsune/protobuf/periodic.pb.h#L11 | ||
+ | |||
+ | In the first example an early on file instance of `pb_callback_t` occurs on [https://github.com/particle-iot/device-os/blob/9338b13b1e611f1b57f71f702795c2ca71142c1f/proto_defs/src/cloud/describe.pb.h#L56 line 56]. Looking further this project has a few dozen protoc generated files . . . switching to a possible smaller project: | ||
+ | |||
+ | * https://github.com/hello/kitsune | ||
+ | |||
+ | In kitsune project, looking at: | ||
+ | |||
+ | (1) file kitsune/kitsune/audio_features_upload_task.c function setup_protbuf( . . . ) | ||
+ | (2) file audio_features_upload_task_helpers.c function encode_repeated_streaming_bytes_and_mark_done(pb_ostream_t *stream, const pb_field_t *field, void * const *arg) | ||
+ | (3) in same file reviewing function write_streams(pb_ostream_t *stream, const pb_field_t *field,hlo_stream_t * hlo_stream) | ||
+ | |||
== [[#top|^]] References To Sort == | == [[#top|^]] References To Sort == |
Latest revision as of 14:46, 6 October 2024
Introduction:
Also a good more detailed introduction:
When compiling nanopb Protobuf library as part of C language programs, nested Protobuf messages require use of nanopb defined function type `pb_callback_t` in order to encode and to decode those nested messages. Some examples of this on github:
In the first example an early on file instance of `pb_callback_t` occurs on line 56. Looking further this project has a few dozen protoc generated files . . . switching to a possible smaller project:
In kitsune project, looking at:
(1) file kitsune/kitsune/audio_features_upload_task.c function setup_protbuf( . . . ) (2) file audio_features_upload_task_helpers.c function encode_repeated_streaming_bytes_and_mark_done(pb_ostream_t *stream, const pb_field_t *field, void * const *arg) (3) in same file reviewing function write_streams(pb_ostream_t *stream, const pb_field_t *field,hlo_stream_t * hlo_stream)
^ References To Sort
Protobuf references, somewhat arbitrary starting point yet introduces some key topics of Protobuf standard and use cases:
- https://www.crankuptheamps.com/blog/posts/2017/10/12/protobuf-battle-of-the-syntaxes/
- https://www.educative.io/edpresso/what-is-the-difference-between-protocol-buffers-and-json
JSON supported data types:
First Protobuf .proto file, compiles using `protoc-c`, part of a package available with Ubuntu 20.04:
// syntax = "proto3"; syntax = "proto2"; // Notes: // $ protoc-c --c_out=. ./first.proto message sensorUpdates { required int32 message_id = 1; optional float vrms = 2; }
. . . It appears that the integer values which message elements are assigned as tantamount to key names in JSON.
^ Nanopb
2022-01-08 Saturday
- https://github.com/nanopb/nanopb/blob/master/generator/proto/nanopb.proto
- https://jpa.kapsi.fi/nanopb/docs/whats_new.html
- https://jpa.kapsi.fi/nanopb/docs/
Cmake script to locate Nanopb headers and sources: