68 lines
1.8 KiB
C
68 lines
1.8 KiB
C
/*
|
|
* ringbuf.h
|
|
*
|
|
* Created on: Jul 12, 2022
|
|
* Author: tom
|
|
*/
|
|
|
|
#ifndef _INC_RINGBUF_H_
|
|
#define _INC_RINGBUF_H_
|
|
|
|
/* Defines */
|
|
/* <ENTER> given, was \n, should be \r */
|
|
#define RINGBUF_DELIMITER '\r'
|
|
|
|
#define RING_STATISTICS_ENABLED 1
|
|
|
|
#define RINGBUF_MAX_READ_LEN 80
|
|
|
|
typedef enum {
|
|
RINGBUF_PARAM_NONE = 0x00,
|
|
RINGBUF_ALLOWOVERWRITE= 0x01,
|
|
} ringbuf_param_t;
|
|
|
|
#if !defined _SYS_ERRNO_H_ && !defined __ERRNO_H__ && !defined __AT1_ERROR_NUMBERS__
|
|
typedef enum {
|
|
EPERM = 1, /*!< Operation not permitted */
|
|
EIO = 5, /*!< I/O error */
|
|
ENOMEM = 12, /*!< Out of memory */
|
|
EFAULT = 14, /*!< Bad address */
|
|
EBUSY = 16, /*!< Device or resource busy */
|
|
ENODEV = 19, /*!< No such device */
|
|
EINVAL = 22, /*!< Invalid argument */
|
|
EADDRINUSE = 98,/*!< Address already in use */
|
|
ETIMEDOUT = 116,/*!< Connection timed out */
|
|
} ringbuf_errno_t;
|
|
#endif
|
|
//extern ringbuf;
|
|
#define hring struct ringbuf *
|
|
//receive callback typedef definition
|
|
typedef void (*ringbuf_rcv_cb_t)(uint16_t delimiterfound, void* cb_data);
|
|
|
|
#if !defined min
|
|
#define min(a,b) ((a < b)? a : b)
|
|
#endif
|
|
|
|
hring ringbuf_create(size_t size, ringbuf_param_t param);
|
|
void ringbuf_destroy(hring);
|
|
int ringbuf_push(hring, const uint8_t *data, size_t size);
|
|
int ringbuf_pull(hring, uint8_t *data, size_t maxsize);
|
|
int ringbuf_clear(hring);
|
|
int ringbuf_free(hring);
|
|
int ringbuf_read(hring, char *str);
|
|
int ringbuf_write(hring, char *str);
|
|
int ringbuf_callback_register(hring, ringbuf_rcv_cb_t cb_func, void *cb_data);
|
|
int ringbuf_set_max_read_len(hring, int max_read_len);
|
|
int ringbuf_get_max_read_len(hring);
|
|
int ringbuf_is_empty(hring);
|
|
int ringbuf_dump(hring);
|
|
|
|
#if RING_STATISTICS_ENABLED
|
|
int ringbuf_statistics(hring);
|
|
int ringbuf_stat_writes(hring);
|
|
int ringbuf_stat_reads(hring);
|
|
int ringbuf_stat_overflow(hring);
|
|
#endif
|
|
|
|
#endif /* _INC_RINGBUF_H_ */
|