From c0ec94e4c94371d22c334396c5d937d0a682de78 Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Mon, 26 Sep 2016 22:04:02 +0000 Subject: ubs-serial-rs485: First solidly working version. Needs major refactoring to split out the _actual_ arch dependent pieces. Needs parity and more complete baud rate support. Needs rs485 support. --- tests/usb-serial-rs485/ringb.h | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 tests/usb-serial-rs485/ringb.h (limited to 'tests/usb-serial-rs485/ringb.h') diff --git a/tests/usb-serial-rs485/ringb.h b/tests/usb-serial-rs485/ringb.h new file mode 100644 index 0000000..c3d5356 --- /dev/null +++ b/tests/usb-serial-rs485/ringb.h @@ -0,0 +1,60 @@ +/* + * Karl Palsson + * Considered to be released under your choice of: + * MIT/ISC/Apache2/BSD2Clause/GPLv2 + * If you're looking for elegant compact performance you've come to the wrong + * place hombre. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct ringb { + volatile unsigned int idx_r; + volatile unsigned int idx_w; + uint8_t *buf; + int buf_len; +}; + +/** + * Load up a ring buffer. Always suceeds + * @param ring struct saving state, provided by the user + * @param buf where the data will be kept + * @param len size of buf in in elements. + */ +void ringb_init(struct ringb *ring, uint8_t *buf, int len); + +/** + * push data in + * @param ring + * @param c + * @return true if space was available + */ +bool ringb_put(struct ringb *ring, uint8_t c); + +/** + * pull data out + * @param ring + * @return -1 for no data, uint8_t range for valid. + */ +int ringb_get(struct ringb *ring); + +/** + * Toss data and reset to empty + * @param ring + */ +void ringb_flush(struct ringb *ring); + +int ringb_depth(struct ringb *ring); + + + +#ifdef __cplusplus +} +#endif -- cgit