Ondřej Hruška
788930eca4
|
8 years ago | |
---|---|---|
.gitignore | 8 years ago | |
LICENSE | 8 years ago | |
README.md | 8 years ago | |
TinyFrame.c | 8 years ago | |
TinyFrame.h | 8 years ago | |
test.c | 8 years ago |
README.md
TinyFrame
TinyFrame is a simple library for building and parsing frames (packets) to be sent over a serial interface (like UART). It's implemented to be compatible with C89 and platform agnostic.
Frames are protected by a checksum and contain a "unique" ID, which can be used for chaining messages. Each peer uses a different value for the first bit of all IDs it generates (the "master flag" or "peer_bit") to ensure there are no clashes. Typically the master (PC, main microcontroller) will use "1" and the surrogate (WiFi module, USB-serial connected gadget, display driver...) uses "0".
The library lets you bind listeners waiting for any frame, or a particular ID. This allows for easy implementation of async communication.
Frame structure
The frame makeup is inspired by that of SBMP (my other, more complicated and advanced UART protocol library).
<SOF><ID><NOB><PAYLOAD><CKSUM>
SOF ... start of frame, 0x01
ID ... (master_flag | 7-bit counter) - the frame ID
NOB ... nr of payload bytes in the frame (1..256)
PAYLOAD ... NOB bytes of data, can contain any byte values 1..256
CKSUM ... checksum, implemented as XOR of all preceding bytes in the message
The frame ID (in SBMP called "session ID") can be used to chain multiple related messages and maintain the context this way. For example, a response may copy the frame ID of the request frame, which then triggers a callback bound by the requesting peer. Such behavior is application specific and is thus left to the upper layers of the protocol.