/** * @file queue.h * @brief Message queue for inter-task communication */ #ifndef QUEUE_H #define QUEUE_H #include "kernel.h" /* Queue Control Block */ typedef struct { void* buffer; uint32_t item_size; uint32_t max_items; uint32_t current_items; uint32_t head; uint32_t tail; TaskHandle_t* waiting_senders; TaskHandle_t* waiting_receivers; uint32_t waiting_sender_count; uint32_t waiting_receiver_count; } Queue_t; /* Queue Functions */ KernelStatus_t queue_create(Queue_t* queue, void* buffer, uint32_t item_size, uint32_t max_items); KernelStatus_t queue_send(Queue_t* queue, const void* item, TimeOut_t timeout); KernelStatus_t queue_receive(Queue_t* queue, void* item, TimeOut_t timeout); KernelStatus_t queue_send_from_isr(Queue_t* queue, const void* item); KernelStatus_t queue_receive_from_isr(Queue_t* queue, void* item); uint32_t queue_get_count(Queue_t* queue); KernelStatus_t queue_delete(Queue_t* queue); #endif /* QUEUE_H */