- * \brief Virtual KFile I/O interface.
- *
- * KFile is a simple, generic interface for file I/O. It uses an
- * object-oriented model to supply a device-neutral interface to
- * communicate with drivers.
- *
- * This module contains only definitions, the instance structure
- * and the common API.
- * Each KFile subclass can override one or more methods of the interface,
- * and can extend the base KFile structure with its own private data.
- * For instance, a serial driver might implement the KFile interface by
- * declaring a context structure like this:
- *
- * \code
- * typedef struct Serial
- * {
- * // base class instance
- * KFile fd;
- *
- * // private instance data
- * FIFOBuffer txfifo, rxfifo;
- * } Serial;
- * \endcode
- *
- * You should also supply a macro for casting KFile to Serial:
- *
- * \code
- * INLINE Serial * SERIAL_CAST(KFile *fd)
- * {
- * ASSERT(fd->_type == KFT_SERIAL);
- * return (Serial *)fd;
- * }
- * \endcode
- *
- * Then you can implement as many interface functions as needed
- * and leave the rest to NULL.
- *
- * Example implementation of the close KFile method for Serial:
- *
- * \code
- * static int ser_kfile_close(struct KFile *fd)
- * {
- * Serial *fds = SERIAL_CAST(fd);
- * // [driver specific code here]
- * return 0;
- * }
- * \endcode
- *
- * The SERIAL_CAST() macro helps ensure that the passed object is
- * really of type Serial.
- *
- * The KFile interface does not supply an open function: this is deliberate,
- * because in embedded systems each device has its own init parameters.
- * For the same reason, specific device settings like, for example,
- * the baudrate, are not part of interface and should be handled by the
- * driver-specific API.
- *
- * \version $Id$
- * \author Bernie Innocenti <bernie@codewiz.org>
- * \author Francesco Sacchi <batt@develer.com>
- * \author Daniele Basile <asterix@develer.com>
- *
- * $WIZ$ module_name = "kfile"
- * $WIZ$ module_configuration = "bertos/cfg/cfg_kfile.h"
- * $WIZ$ module_depends = "timer", "formatwr"
- */
-
-#ifndef KERN_KFILE_H
-#define KERN_KFILE_H
-
-#include <cfg/compiler.h>
-#include <cfg/debug.h>
-#include <cfg/macros.h>
-
-/* fwd decl */
-struct KFile;
-
-typedef int32_t kfile_off_t; ///< KFile offset type, used by kfile_seek().
-
-/**
- * Costants for repositioning read/write file offset.
- * These are needed because on some embedded platforms
- * ANSI I/O library may not be present.
- */
-typedef enum KSeekMode
-{
- KSM_SEEK_SET, ///< Seek from file beginning.
- KSM_SEEK_CUR, ///< Seek from file current position.
- KSM_SEEK_END, ///< Seek from file end.
-} KSeekMode;
-
-/**
- * Prototypes for KFile access functions.
- * I/O file functions must be ANSI compliant.
- * \note A KFile user can choose which function subset to implement,
- * but has to set to NULL unimplemented features.
- * \{
- */
-
-/**
- * Read from file.
- * \return the number of bytes read.
- */
-typedef size_t (*ReadFunc_t) (struct KFile *fd, void *buf, size_t size);
-
-/**
- * Write to file.
- * \return the number of bytes written.
- */
-typedef size_t (*WriteFunc_t) (struct KFile *fd, const void *buf, size_t size);
-
-/**
- * Seek into file (if seekable).
- * \return the new file offset or EOF on errors.
- */
-typedef kfile_off_t (*SeekFunc_t) (struct KFile *fd, kfile_off_t offset, KSeekMode whence);
-
-/**
- * Close and reopen file \a fd.
- * The reopening is done with the former file parameters and access modes.
- */
-typedef struct KFile * (*ReOpenFunc_t) (struct KFile *fd);
-
-/**
- * Close file.
- * \return 0 on success, EOF on errors.
- */
-typedef int (*CloseFunc_t) (struct KFile *fd);
-
-/**
- * Flush file I/O.
- * \return 0 on success, EOF on errors.
- */
-typedef int (*FlushFunc_t) (struct KFile *fd);
-
-/**
- * Get file error mask.
- * \return 0 on success or file error code, device specific.
- */
-typedef int (*ErrorFunc_t) (struct KFile *fd);
-
-/**
- * Clear errors.