aboutsummaryrefslogtreecommitdiffstats
path: root/docs/Protocol.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/Protocol.md')
-rw-r--r--docs/Protocol.md38
1 files changed, 15 insertions, 23 deletions
diff --git a/docs/Protocol.md b/docs/Protocol.md
index 92ffcf27..ce5719e1 100644
--- a/docs/Protocol.md
+++ b/docs/Protocol.md
@@ -1,3 +1,5 @@
+# Protocol
+
The Klipper messaging protocol is used for low-level communication
between the Klipper host software and the Klipper micro-controller
software. At a high level the protocol can be thought of as a series
@@ -26,8 +28,7 @@ The goal of the protocol is to enable an error-free communication
channel between the host and micro-controller that is low-latency,
low-bandwidth, and low-complexity for the micro-controller.
-Micro-controller Interface
-==========================
+## Micro-controller Interface
The Klipper transmission protocol can be thought of as a
[RPC](https://en.wikipedia.org/wiki/Remote_procedure_call) mechanism
@@ -37,8 +38,7 @@ messages that it can generate. The host uses that information to
command the micro-controller to perform actions and to interpret the
results.
-Declaring commands
-------------------
+### Declaring commands
The micro-controller software declares a "command" by using the
DECL_COMMAND() macro in the C code. For example:
@@ -69,8 +69,7 @@ The micro-controller build will collect all commands declared with
DECL_COMMAND(), determine their parameters, and arrange for them to be
callable.
-Declaring responses
--------------------
+### Declaring responses
To send information from the micro-controller to the host a "response"
is generated. These are both declared and transmitted using the
@@ -97,7 +96,7 @@ code does not need to issue a sendf() in response to a received
command, it is not limited in the number of times sendf() may be
invoked, and it may invoke sendf() at any time from a task handler.
-### Output responses
+#### Output responses
To simplify debugging, there is also an output() C function. For
example:
@@ -109,8 +108,7 @@ output("The value of %u is %s with size %u.", x, buf, buf_len);
The output() function is similar in usage to printf() - it is intended
to generate and format arbitrary messages for human consumption.
-Declaring enumerations
-----------------------
+### Declaring enumerations
Enumerations allow the host code to use string identifiers for
parameters that the micro-controller handles as integers. They are
@@ -133,8 +131,7 @@ example, a "pin" parameter (or any parameter with a suffix of "_pin")
would accept PC0, PC1, PC2, ..., PC7 as valid values. The strings will
be transmitted with integers 16, 17, 18, ..., 23.
-Declaring constants
--------------------
+### Declaring constants
Constants can also be exported. For example, the following:
@@ -150,15 +147,13 @@ a constant that is a string - for example:
DECL_CONSTANT_STR("MCU", "pru");
```
-Low-level message encoding
-==========================
+## Low-level message encoding
To accomplish the above RPC mechanism, each command and response is
encoded into a binary format for transmission. This section describes
the transmission system.
-Message Blocks
---------------
+### Message Blocks
All data sent from host to micro-controller and vice-versa are
contained in "message blocks". A message block has a two byte header
@@ -187,8 +182,7 @@ an additional sync character at the start of the block. Unlike in
HDLC, a sync character is not exclusive to the framing and may be
present in the message block content.
-Message Block Contents
-----------------------
+### Message Block Contents
Each message block sent from host to micro-controller contains a
series of zero or more message commands in its contents. Each command
@@ -231,7 +225,7 @@ encoding rules. In practice, message blocks sent from the
micro-controller to the host never contain more than one response in
the message block contents.
-### Variable Length Quantities
+#### Variable Length Quantities
See the [wikipedia article](https://en.wikipedia.org/wiki/Variable-length_quantity)
for more information on the general format of VLQ encoded
@@ -249,7 +243,7 @@ takes to encode:
| -67108864 .. 201326591 | 4 |
| -2147483648 .. 4294967295 | 5 |
-### Variable length strings
+#### Variable length strings
As an exception to the above encoding rules, if a parameter to a
command or response is a dynamic string then the parameter is not
@@ -264,8 +258,7 @@ The command descriptions found in the data dictionary allow both the
host and micro-controller to know which command parameters use simple
VLQ encoding and which parameters use string encoding.
-Data Dictionary
-===============
+## Data Dictionary
In order for meaningful communications to be established between
micro-controller and host, both sides must agree on a "data
@@ -311,8 +304,7 @@ dictionary also contains the software version, enumerations (as
defined by DECL_ENUMERATION), and constants (as defined by
DECL_CONSTANT).
-Message flow
-============
+## Message flow
Message commands sent from host to micro-controller are intended to be
error-free. The micro-controller will check the CRC and sequence