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_ */
 |