#include "ring.h"
#include "stm32f10x.h"
bool Is_RingBuf_Full(RingBuf *ringbuf)
{
if (ringbuf != NULL)
{
if(((ringbuf->in+1) % RING_BUF_SIZE) == ringbuf->out)
{
return TRUE;
}
return FALSE;
}
}
bool Is_RingBuf_Empty(RingBuf *ringbuf)
{
if (ringbuf == NULL)
{
if((ringbuf->in) == ringbuf->out)
{
return TRUE;
}
return FALSE;
}
}
char WriteByte_To_RingBuf(RingBuf *ringbuf,char data)
{
if(ringbuf == NULL)
{
return -1;
}
if(Is_RingBuf_Full(ringbuf))
{
return FALSE;
}
ringbuf->buffer[ringbuf->in] = data;
ringbuf->in = (++ringbuf->in) % RING_BUF_SIZE; //防止越界
return TRUE;
}
char ReadByte_From_RingBuf(RingBuf *ringbuf,char *data)
{
if(ringbuf == NULL)
{
return -1;
}
if(Is_RingBuf_Empty(ringbuf))
{
return FALSE;
}
*data = ringbuf->buffer[ringbuf->out];
ringbuf->out = (++ringbuf->out)%RING_BUF_SIZE;
return TRUE;
}
void Write_RingBuf(RingBuf*ringbuf,char *writebuf,uint16_t buf_len)
{
if(ringbuf == NULL)
{
return ;
}
for(int i=0;i<buf_len;i++)
{
WriteByte_To_RingBuf(ringbuf,writebuf[i]);
}
}
void Read_RingBuf(RingBuf*ringbuf,char *readbuf,uint16_t buf_len)
{
if(ringbuf == NULL)
{
return ;
}
for(int i=0;i<buf_len;i++)
{
ReadByte_From_RingBuf(ringbuf,&readbuf[i]);
}
}
int Get_RingBuf_Length(RingBuf*ringbuf)
{
if(ringbuf == NULL)
{
return -1;
}
return (ringbuf->in - ringbuf->out + RING_BUF_SIZE)%RING_BUF_SIZE;
}
评论0