You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.3 KiB
76 lines
1.3 KiB
9 years ago
|
#pragma once
|
||
|
|
||
|
#include "main.h"
|
||
|
#include "utils/circbuf.h"
|
||
|
|
||
|
#define TASK_QUEUE_SIZE 64
|
||
|
#define EVENT_QUEUE_SIZE 64
|
||
|
|
||
|
|
||
|
/** Application events */
|
||
|
typedef enum {
|
||
|
EVENT_ONE // placeholder
|
||
|
|
||
|
} EventType;
|
||
|
|
||
|
|
||
|
/** Event Queue entry */
|
||
|
typedef struct {
|
||
|
EventType type;
|
||
|
void *data;
|
||
|
} Event;
|
||
|
|
||
|
typedef struct {
|
||
|
void (*handler)(void*);
|
||
|
void* arg;
|
||
|
} QueuedTask;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Set up the task and event queues
|
||
|
* @param tq_size : number of slots in the task queue
|
||
|
* @param eq_size : number of slots in the event queue
|
||
|
*/
|
||
|
void queues_init(size_t tq_size, size_t eq_size);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Post a task on the task queue, with arg.
|
||
|
*
|
||
|
* @see tq_post()
|
||
|
*
|
||
|
* @param handler : task function
|
||
|
* @param arg : argument for the handler
|
||
|
* @return success
|
||
|
*/
|
||
|
bool tq_post(void (*handler)(void *), void *arg);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Post an event on the event queue
|
||
|
* @param event : pointer to an event to post; will be copied.
|
||
|
* @return success
|
||
|
*/
|
||
|
bool eq_post(const Event *event);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Run all pending tasks on the task queue
|
||
|
*/
|
||
|
void tq_poll(void);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Run one pending task on the task queue
|
||
|
* @return true if a task was run.
|
||
|
*/
|
||
|
bool tq_poll_one(void);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Take one event off the event queue.
|
||
|
* @param dest : pointer to a destination event variable.
|
||
|
* @return success
|
||
|
*/
|
||
|
bool eq_take(Event *dest);
|