#include #include "sys_queue.h" void queue_init(queue_list_t* queue) { queue->front = -1; queue->rear = -1; queue->size = 0; } bool queue_full(queue_list_t* queue) { return (queue->size == QUEUE_MAX_DATA_NUM); } bool queue_empty(queue_list_t* queue) { return (queue->size == 0); } void queue_in(queue_list_t* queue, void* item, int length) { if (queue_full(queue)) { return; } length = length > QUEUE_MAX_DATA_LEN ? QUEUE_MAX_DATA_LEN : length; queue->rear++; queue->rear %= QUEUE_MAX_DATA_NUM; queue->size++; memset(&queue->data[queue->rear], 0, sizeof(queue_element_t)); memcpy(queue->data[queue->rear].cmd, item, length); queue->data[queue->rear].length = length; } int queue_out(queue_list_t* queue, void* item) { if (queue_empty(queue)) { return 0; } queue->front++; queue->front %= QUEUE_MAX_DATA_NUM; queue->size--; memcpy(item, queue->data[queue->front].cmd, queue->data[queue->front].length); return queue->data[queue->front].length; } int queue_size(queue_list_t* queue) { return queue->size; }