summaryrefslogtreecommitdiff
path: root/firmware/s1224/include/kiss.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/s1224/include/kiss.h')
-rw-r--r--firmware/s1224/include/kiss.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/firmware/s1224/include/kiss.h b/firmware/s1224/include/kiss.h
new file mode 100644
index 0000000..66a890b
--- /dev/null
+++ b/firmware/s1224/include/kiss.h
@@ -0,0 +1,34 @@
+/**
+ * KISS frame encode/decode (FEND 0xC0).
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+#ifndef S1224_KISS_H
+#define S1224_KISS_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+#define KISS_FEND 0xC0u
+#define KISS_FESC 0xDBu
+#define KISS_TFEND 0xDCu
+#define KISS_TFESC 0xDDu
+#define KISS_CMD_DATA 0x00u
+#define KISS_MAX_PAYLOAD 512
+
+typedef struct {
+ uint8_t buf[KISS_MAX_PAYLOAD + 4];
+ size_t len;
+ bool in_frame;
+ bool esc;
+} kiss_rx_t;
+
+void kiss_rx_init(kiss_rx_t *kx);
+/** Feed one byte. Returns true when a DATA payload is ready in out. */
+bool kiss_rx_byte(kiss_rx_t *kx, uint8_t b, uint8_t *out, size_t *out_len);
+
+/** Write KISS DATA frame to dst; returns bytes written (0 on overflow). */
+size_t kiss_encode_data(const uint8_t *payload, size_t len,
+ uint8_t *dst, size_t dst_cap);
+
+#endif /* S1224_KISS_H */
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com