aboutsummaryrefslogtreecommitdiffstats
path: root/docs/encoding.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/encoding.rst')
-rw-r--r--docs/encoding.rst31
1 files changed, 5 insertions, 26 deletions
diff --git a/docs/encoding.rst b/docs/encoding.rst
index e4e0cd7..3f673f3 100644
--- a/docs/encoding.rst
+++ b/docs/encoding.rst
@@ -4,36 +4,15 @@ Nanopb: Encoding messages
The basic way to encode messages is to:
-1) Write a callback function for whatever stream you want to write the message to.
+1) Create an `output stream`_.
2) Fill a structure with your data.
-3) Call pb_encode with the stream, a pointer to *const pb_field_t* array and a pointer to your structure.
+3) Call *pb_encode* with the stream, a pointer to *const pb_field_t* array and a pointer to your structure.
A few extra steps are necessary if you need to know the size of the message beforehand, or if you have dynamically sized fields.
-Output streams
-==============
+.. _`output stream`: concepts.html#output-streams
-This is the contents of *pb_ostream_t* structure::
+Function: pb_encode
+===================
- typedef struct _pb_ostream_t pb_ostream_t;
- struct _pb_ostream_t
- {
- bool (*callback)(pb_ostream_t *stream, const uint8_t *buf, size_t count);
- void *state;
- size_t max_size;
- size_t bytes_written;
- };
-This, combined with the pb_write function, provides a light-weight abstraction
-for whatever destination you want to write data to.
-
-*callback* should be a pointer to your callback function. These are the rules for it:
-
-1) Return false on IO errors. This will cause encoding to abort.
- *
- * 2) You can use state to store your own data (e.g. buffer pointer).
- *
- * 3) pb_write will update bytes_written after your callback runs.
- *
- * 4) Substreams will modify max_size and bytes_written. Don't use them to
- * calculate any pointers. \ No newline at end of file