logicanalyzer

24 channel, 100Msps logic analyzer hardware and software

#include "Event_Machine.h"

//Initialize the event machine
void event_machine_init(EVENT_MACHINE* machine, EVENT_HANDLER handler, uint8_t event_size, uint8_t queue_depth)
{
    queue_init(&machine->queue, event_size, queue_depth);
    machine->handler = handler;
}

bool event_has_events(EVENT_MACHINE* machine)
{
    return &machine->queue.wptr !=  &machine->queue.rptr;
}

//Adds an event to the machine
void event_push(EVENT_MACHINE* machine, void* event)
{
    queue_add_blocking(&machine->queue, event);
}

//Processes the pending events
void event_process_queue(EVENT_MACHINE* machine, void* event_buffer, uint8_t max_events)
{
    uint8_t evt_count = 0;
    while(!queue_is_empty(&machine->queue) && evt_count++ < max_events)
    {
        queue_remove_blocking(&machine->queue, event_buffer);
        machine->handler(event_buffer);
    }
}

//Clears the stored events in the machine
void event_clear(EVENT_MACHINE* machine)
{
    machine->queue.wptr = 0;
    machine->queue.rptr = 0;
}

//Free an event machine
void event_free(EVENT_MACHINE* machine)
{
    queue_free(&machine->queue);
    machine->handler = NULL;
}