#include "user_queue.h"
#include<string.h>

Queue queue;

DATA_LOAD_T data_load;


//初始化队列
void InitQueue(pQueue queue)
{
	queue->qFront = 0;
	queue->qRear  = 0;
}

//队列是否为空
bool IsEmptyQueue(pQueue queue)
{
	if (queue->qFront == queue->qRear)//队首等于队尾
		return true;
	else
		return false;
}

//队列是否为满
bool IsFullQueue(pQueue queue)
{
	//队尾下个数据为队首
	if (((queue->qRear + 1) % QUEUE_ZISE) == queue->qFront)
		return true;
	else
		return false;
}
//入队
uint8_t EnterQueue(pQueue queue, uint8_t *value,uint16_t len)
{
	if (IsFullQueue(queue))
	{
		return 0;
	}

	//从队尾入队
	memcpy(&queue->BasicArr[queue->qRear],value,len);
	queue->qRear = (queue->qRear + len) % QUEUE_ZISE;//队尾移向下个位置
	return 1;
}

//出队
uint8_t OutQueue(pQueue queue,uint8_t *out,uint16_t len)
{
	if (IsEmptyQueue(queue))
	{
		return 0;
	}
	memcpy(out,&queue->BasicArr[queue->qFront],len);//出队值
	queue->qFront = (queue->qFront + len) % QUEUE_ZISE;//指向下一个出队值
	return 1;
}

uint8_t Analysis_Queue_data(pQueue queue)
{
	uint8_t bcc=0,i,bcc1=0;
	
	if (IsEmptyQueue(queue))//判断队列是否有数据
	{
		return 0;
	}
	
	while(queue->BasicArr[queue->qFront] != 0xAA)//找帧头
	{
		queue->qFront++;
		if(IsEmptyQueue(queue)==true)
				return 0;
	}
	
	bcc = queue->BasicArr[queue->BasicArr[++queue->qFront]+2] ;//校验位  此时队首到了帧长的位置
	
	for(i=2;i<queue->BasicArr[queue->qFront]+2;i++)
	{
		bcc1+=queue->BasicArr[i] ;
	}
	
	if(bcc != bcc1)//判断校验
	{
		return 0;
	}
	
	if(queue->BasicArr[queue->BasicArr[queue->qFront]+3]!=0x55)//判断帧尾
	{
		return 0;
	}
	queue->qFront--;//回到队首
	return 1;
}
	
	
