p7utils/src/p7os/cake.exe/libgint/src/events/event_push.c

27 lines
627 B
C

#include <internals/events.h>
#include <events.h>
volatile struct Event event_queue[EVENTS_QUEUE_SIZE];
volatile int queue_start = 0;
volatile int queue_size = 0;
/*
event_push()
Queues a user-defined event, allowing it to be retrieved by getevent()
or pollevent() later. Pushing ET_None events is not allowed.
Returns non-zero on error.
*/
int event_push(struct Event event)
{
if(queue_size >= EVENTS_QUEUE_SIZE) return 1;
if(event.type == ET_None) return 2;
int index = queue_start + queue_size;
if(index >= EVENTS_QUEUE_SIZE) index -= EVENTS_QUEUE_SIZE;
event_queue[index] = event;
queue_size++;
return 0;
}