/** * \file * * * \brief KFile interface over a FIFO buffer. * * Convenient way to push data into a FIFO using the KFile interface. * For example, it's possible to read from a serial port and put the characters * into a fifo: * \code * // serial reader process * { * // other stuff here... * kfile_read(&ser_port.fd, buffer, sizeof(buffer)); * kfile_write(&kfifo.fd, buffer, sizeof(buffer)); * // ... * } * * // controller process * { * //... * kfile_read(&kfifo.fd, buffer2, sizeof(buffer2)); * // use read data * } * \endcode * * * \author Francesco Sacchi * * $WIZ$ module_name = "kfilefifo" * $WIZ$ module_depends = "kfile" */ #ifndef STRUCT_KFILE_FIFO #define STRUCT_KFILE_FIFO #include "fifobuf.h" #include typedef struct KFileFifo { KFile fd; FIFOBuffer *fifo; } KFileFifo; /** * ID for KFile FIFO. */ #define KFT_KFILEFIFO MAKE_ID('F', 'I', 'F', '0') /** * Convert + ASSERT from generic KFile to KFileFifo. */ INLINE KFileFifo * KFILEFIFO_CAST(KFile *fd) { ASSERT(fd->_type == KFT_KFILEFIFO); return (KFileFifo *)fd; } /** * Initialize KFileFifo struct. * * \param kf Interface to initialize. * \param fifo Fifo buffer to operate on. */ void kfilefifo_init(KFileFifo *kf, FIFOBuffer *fifo); int kfilefifo_testSetup(void); int kfilefifo_testRun(void); int kfilefifo_testTearDown(void); #endif /* STRUCT_KFILE_FIFO */