// // Created by MightyPork on 2017/11/21. // // Job and message scheduling queue structs and typedefs // #ifndef GEX_SCHED_QUEUE_H #define GEX_SCHED_QUEUE_H #include "platform.h" #include /** * Queued job typedef */ typedef struct sched_que_item Job; /** * Queued job callback */ typedef void (*ScheduledJobCb) (Job *job); /** * Queued job data struct */ struct sched_que_item { /** The callback */ ScheduledJobCb cb; /** Data word 1 */ union { TF_ID frame_id; // typically used to pass frame id to the callback void *data1; // arbitrary pointer or int }; /** Data word 2 */ union { uint32_t d32; // passing a number uint8_t *buf; // uchar buffer const uint8_t *cbuf; // const uchar buffer const char *str; // string void *data2; // arbitrary pointer }; /** Data word 3 */ union { uint32_t len; // typically length of the buffer void *data3; // arbitrary pointer }; }; /** * Queued data chunk structure - used for buffering received messages for TinyFrame */ struct rx_que_item { uint32_t len; uint8_t data[MSG_QUE_SLOT_SIZE]; }; /** * Combined struct - added when we merged the two separate queues */ struct rx_sched_combined_que_item { bool is_job; // tag indicating whether the job or msg field is used union { struct rx_que_item msg; struct sched_que_item job; }; }; #endif //GEX_SCHED_QUEUE_H