#ifndef _SR_RINGBUFF_H
#define _SR_RINGBUFF_H

#include "sr_config.h"
#include "sr_osal.h"


#define DATE_COVERAGE  0
#define RINGBUFF_LEN   64


/**
 * @brief ringbuff结构体定义
 *
 */
typedef struct SR_RINGBUFF
{
  uint16_t head;        /*!< 数据头部位置*/
  uint16_t tail;        /*!< 数据尾部位置*/
  uint16_t curLen;      /*!< buff当前可用数据长度，单位：字节*/
  uint16_t totalSize;   /*!< buff的总大小，单位：字节*/
  uint8_t  *pBuff;      /*!< buff指针，指向buff缓存(pDynBuff或用户形参传入的)*/ 
#ifdef  SR_USE_OS 
  SR_MUTX_T mutex;      /*!< 互斥锁，用于保护buff的读写操作  1:上锁   0：关锁*/
#endif
  uint8_t  pDynBuff[]; /*!< 柔性数组（长度为0的数组并不占用空间），用于访问动态分配的buff缓存*/

}SR_RINGBUFF_T;


int SR_RbInit(SR_RINGBUFF_T *rb,uint8_t *buff,uint16_t size);
SR_RINGBUFF_T *SR_RbCreate(uint16_t size);
int SR_RbDestroy(SR_RINGBUFF_T *rb);
int SR_RbWriteByte(SR_RINGBUFF_T *rb,uint8_t data);
int SR_RbWriteLen(SR_RINGBUFF_T *rb,uint8_t *data,uint16_t dLen);
int SR_RbReadByte(SR_RINGBUFF_T *rb,uint8_t *rData);
int SR_RbReadLen(SR_RINGBUFF_T *rb,uint8_t *rData,uint16_t dLen);
uint16_t SR_RbGetValidLen(SR_RINGBUFF_T *rb);
void SR_RbClear(SR_RINGBUFF_T *rb);










#endif

