| 12345678910111213141516171819202122232425262728293031323334 |
- #include "os/queue.h"
- #include "libs/circle_buffer.h"
- typedef struct {
- c_buffer_t buffer;
- int16_t esize;
- }queue_t;
- void *queue_create(u16 queue_count, u16 esize){
- queue_t *queue = (queue_t *)os_alloc(queue_count * esize + sizeof(queue_t));
- if (queue == NULL) {
- return NULL;
- }
- queue->esize = esize;
- circle_buffer_init(&queue->buffer, (u8 *)(queue + 1), queue_count * esize);
- return queue;
- }
- bool queue_put(co_queue_t vqueue, void *data){
- queue_t *queue = (queue_t *)vqueue;
- if (circle_put_data(&queue->buffer, data, queue->esize) > 0) {
- return true;
- }
- return false;
- }
- bool queue_get(co_queue_t vqueue, void *data) {
- queue_t *queue = (queue_t *)vqueue;
- if (circle_get_data(&queue->buffer, data, queue->esize) > 0) {
- return true;
- }
- return false;
- }
|