summaryrefslogtreecommitdiffstats
path: root/docs/encoding.rst
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@npb.mail.kapsi.fi>2011-08-11 19:22:36 +0000
committerPetteri Aimonen <jpa@npb.mail.kapsi.fi>2011-08-11 19:22:36 +0000
commit6dfba365b00175eae7e8b83aaf5d29ce190fd9eb (patch)
treef7908f61cb8606a281aa709d187f3b8329385821 /docs/encoding.rst
parent09f92bafa59460ea4597c557e469e982386c9e3b (diff)
Documenting and improving stream behaviour
git-svn-id: https://svn.kapsi.fi/jpa/nanopb@954 e3a754e5-d11d-0410-8d38-ebb782a927b9
Diffstat (limited to 'docs/encoding.rst')
-rw-r--r--docs/encoding.rst39
1 files changed, 39 insertions, 0 deletions
diff --git a/docs/encoding.rst b/docs/encoding.rst
new file mode 100644
index 00000000..e4e0cd7f
--- /dev/null
+++ b/docs/encoding.rst
@@ -0,0 +1,39 @@
+=========================
+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.
+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.
+
+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
+==============
+
+This is the contents of *pb_ostream_t* structure::
+
+ 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