/* Cesar project {{{ * * Copyright (C) 2007 Spidcom * * <<>> * * }}} */ /** * \file ce/src/cei_param.c * \brief Manage the list of cei message to create. * \ingroup ce * * « long description » */ #include "common/std.h" #include "ce/inc/cei_param.h" bool cei_param_add (cei_param_t *new_cei) { dbg_assert (new_cei); if (cei_param_fifo.number == CEI_WANTED_MAX) { // DROP new_cei because FIFO is full. return (false); } else { cei_param_fifo.list[cei_param_fifo.writer_index] = *new_cei; cei_param_fifo.number++; cei_param_fifo.writer_index++; if (cei_param_fifo.writer_index == CEI_WANTED_MAX) cei_param_fifo.writer_index = 0; return (true); } } cei_param_t * cei_param_get (void) { cei_param_t *ret = NULL; if (cei_param_fifo.number > 0) { ret = &cei_param_fifo.list[cei_param_fifo.reader_index]; cei_param_fifo.reader_index++; if (cei_param_fifo.reader_index == CEI_WANTED_MAX ) cei_param_fifo.reader_index = 0; cei_param_fifo.number --; } return (ret); } void cei_param_fifo_init (void) { cei_param_fifo.reader_index = 0; cei_param_fifo.writer_index = 0; cei_param_fifo.number = 0; }