#include "queue.h"
void QueueEmpty(Queue_t *q)
{
q->front = q->tail = 0;
q->length= 0;
}
uint16_t QueueDataIn(Queue_t *q, uint8_t *value)
{
if (q->length && q->front == q->tail) {
return 0;
}
q->length += 1;
q->data[q->tail] = *value;
q->tail = (q->tail + 1) % QUEUE_SIZE;
return 1;
}
uint16_t QueueDataOut(Queue_t *q, uint8_t *value)
{
if (q->length){
__disable_irq();
q->length -= 1;
*value = q->data[q->front];
q->front = (q->front + 1) % QUEUE_SIZE;
__enable_irq();
return 1;
}
return 0;
}
uint16_t QueueLength(Queue_t *q)
{
return q->length;
}
#ifndef __QUEUE_H
#define __QUEUE_H
#include "stdio.h"
#include "stdint.h"
#include "string.h"
#define QUEUE_SIZE (64)
typedef struct{
uint16_t front;
uint16_t tail;
uint16_t length;
uint8_t data[QUEUE_SIZE];
}Queue_t;
void QueueEmpty(Queue_t *q);
uint16_t QueueDataIn(Queue_t *q, uint8_t *value);
uint16_t QueueDataOut(Queue_t *q, uint8_t *value);
uint16_t QueueLength(Queue_t *q);
#endif