--- /dev/null
+#ifndef __CCCI_RINGBUF_H__
+#define __CCCI_RINGBUF_H__
+#include "ccci_core.h"
+typedef enum
+{
+ CCCI_RINGBUF_OK = 0,
+ CCCI_RINGBUF_PARAM_ERR,
+ CCCI_RINGBUF_NOT_ENOUGH,
+ CCCI_RINGBUF_BAD_HEADER,
+ CCCI_RINGBUF_BAD_FOOTER,
+ CCCI_RINGBUF_NOT_COMPLETE,
+ CCCI_RINGBUF_EMPTY,
+} ccci_ringbuf_error;
+
+struct ccci_ringbuf
+{
+ struct
+ {
+ unsigned int read;
+ unsigned int write;
+ unsigned int length;
+ } rx_control, tx_control;
+ unsigned char buffer[0];
+};
+#define CCCI_RINGBUF_CTL_LEN (4+sizeof(struct ccci_ringbuf)+4)
+
+int ccci_ringbuf_readable(int md_id,struct ccci_ringbuf * ringbuf);
+int ccci_ringbuf_writeable(int md_id,struct ccci_ringbuf * ringbuf,unsigned int write_size);
+struct ccci_ringbuf * ccci_create_ringbuf(int md_id, unsigned char* buf,int buf_size,int rx_size, int tx_size);
+int ccci_ringbuf_read(int md_id,struct ccci_ringbuf * ringbuf, unsigned char *buf, int read_size);
+int ccci_ringbuf_write(int md_id,struct ccci_ringbuf *ringbuf, unsigned char *data, int data_len);
+void ccci_ringbuf_move_rpointer(int md_id,struct ccci_ringbuf * ringbuf,int read_size);
+void ccci_ringbuf_reset(int md_id,struct ccci_ringbuf * ringbuf,int dir);
+#endif //__CCCI_RINGBUF_H__