Move kfile interface to the io/ directory.
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 2 Jul 2010 10:01:25 +0000 (10:01 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 2 Jul 2010 10:01:25 +0000 (10:01 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3985 38d2e660-2303-0410-9eaa-f027e97ec537

57 files changed:
bertos/cfg/kfile_debug.c
bertos/cfg/kfile_debug.h
bertos/cpu/arm/drv/flash_at91.c
bertos/cpu/arm/drv/flash_at91.h
bertos/cpu/arm/drv/spi_dma_at91.c
bertos/cpu/arm/drv/spi_dma_at91.h
bertos/cpu/avr/drv/flash_avr.c
bertos/cpu/avr/drv/flash_avr.h
bertos/cpu/cortex-m3/drv/flash_lm3s.c
bertos/cpu/cortex-m3/drv/flash_lm3s.h
bertos/cpu/cortex-m3/drv/ssi_lm3s.h
bertos/drv/dataflash.c
bertos/drv/dataflash.h
bertos/drv/dataflash_hwtest.c
bertos/drv/eeprom.h
bertos/drv/flash25.c
bertos/drv/flash25.h
bertos/drv/flash25_hwtest.c
bertos/drv/ft245rl.c
bertos/drv/ft245rl.h
bertos/drv/mcp41.c
bertos/drv/mcp41.h
bertos/drv/sd.c
bertos/drv/sd.h
bertos/drv/ser.h
bertos/drv/sipo.c
bertos/drv/sipo.h
bertos/drv/tlv5618.c
bertos/drv/tlv5618.h
bertos/drv/tmp123.c
bertos/drv/tmp123.h
bertos/emul/kfile_posix.h
bertos/fs/battfs.h
bertos/fs/fat.h
bertos/io/kfile.c [new file with mode: 0644]
bertos/io/kfile.h [new file with mode: 0644]
bertos/io/kfile_test.c [new file with mode: 0644]
bertos/kern/kfile.c
bertos/kern/kfile.h
bertos/kern/kfile_test.c [deleted file]
bertos/mware/ini_reader.h
bertos/mware/parser.c
bertos/net/afsk.h
bertos/net/ax25.h
bertos/net/keytag.c
bertos/net/keytag.h
bertos/net/nmea.h
bertos/net/pocketbus.c
bertos/net/pocketbus.h
bertos/net/xmodem.h
bertos/struct/kfile_fifo.c
bertos/struct/kfile_fifo.h
bertos/struct/kfile_mem.c
bertos/struct/kfile_mem.h
boards/triface/examples/triface/protocol.c
boards/triface/examples/triface/protocol.h
test/run_tests.sh

index 0a71af68a2d60d2f1c3d3abfc868c17054d958b4..40233a025527edf26dc575230b8bdbedd9cadae7 100644 (file)
@@ -37,7 +37,7 @@
 
 #include "kfile_debug.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h>
 
index 4cd31ddf99a36f36215d18f033f2f2f908d9630e..0dce7e750221bacffa4b2bcbb568a63cb960eff3 100644 (file)
@@ -42,7 +42,7 @@
 #ifndef CFG_KFILE_DEBUG
 #define CFG_KFILE_DEBUG
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /**
  * Context for KFile over debug console.
index f46c48812e8cedcde9f322515a228fed63b6980b..83cc73b7aaf110505f286a03291336b56bb024a8 100644 (file)
@@ -54,7 +54,7 @@
 #include <cpu/attr.h>
 #include <cpu/power.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <io/arm.h>
 
index 0b6c8d663676d7a3be29c69550bed5709fe7cee0..1bb7d94b4fb63777f8d63e6355723161d3e9fb0d 100644 (file)
@@ -42,7 +42,7 @@
 
 #include <cpu/types.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <io/arm.h>
 
index 8576fc07e6d887ed9240160fd845e13ccc1e3ede..2c6a9308abea753b9aef134d19acb7aa07bbd63e 100644 (file)
@@ -42,7 +42,7 @@
 #include "spi_dma_at91.h"
 #include "hw/hw_spi_dma.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <struct/fifobuf.h>
 #include <struct/kfile_fifo.h>
 #include <drv/timer.h>
index 6ceef4aa7c266007b40d862d26e68cb687c9a7f9..23e64a91af9f733b359fea50b7291456c12d19e2 100644 (file)
@@ -42,7 +42,7 @@
 #ifndef DRV_SPI_DMA_AT91_H
 #define DRV_SPI_DMA_AT91_H
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 typedef struct SpiDmaAt91
 {
index 2c3d1840496f33253c9a41faf7d5cdb1d95d8cba..af1d6de89c2a7aaa6897b6b5403ef23c8c01d505 100644 (file)
@@ -57,7 +57,7 @@
 #include <drv/wdt.h>
 #include <drv/flash.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <avr/io.h>
 #include <avr/boot.h>
index 6c06eaf345e95021da79811da003697a071a770b..ecbe1b772cccda9f8e038b10b13eaa75e0e27e5f 100644 (file)
@@ -45,7 +45,7 @@
 
 #include <cfg/compiler.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <avr/io.h>
 
index 1bebb5354c5136497426d4c6f5ead49d87c2f5b0..b7498caceb31e9d34f88d3ea8182f616b1e0bbec 100644 (file)
@@ -40,7 +40,7 @@
 
 #include <cfg/macros.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <drv/timer.h>
 #include <drv/flash.h>
index 9d0547161ba808f12b2dd2edc8ef5feeba933776..e70a7919fb3ca0323f680b5541e080f7d70e6675 100644 (file)
@@ -39,7 +39,7 @@
 #define FLASH_LM3S_H
 
 #include <cpu/types.h>
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /* Flash memory mapping */
 #define FLASH_MEM_SIZE          0x40000 //< 256KiB
index d5f09e3d7730ad1f3a3586796e9e95c260e1284d..d8ab39ea10b58d3f2192decba62a9c40229622a3 100644 (file)
@@ -38,7 +38,7 @@
 #define SSI_LM3S_H
 
 #include <cpu/power.h> /* cpu_relax() */
-#include <kern/kfile.h> /* KFile */
+#include <io/kfile.h> /* KFile */
 #include <io/lm3s.h>
 
 /**
index 573bea1e0f6c9130127589f963e7f072f622bfe1..a9135968e525e275b02033dc90c89d8aeeca2cee 100644 (file)
@@ -52,7 +52,7 @@
 
 #include <fs/battfs.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <cpu/power.h> /* cpu_relax() */
 
index dd805ad25d25759993fc1ea2549819404ab1c4f5..a60f30eaebd7858dfb0b0f1fc33e9efbf7b43166 100644 (file)
@@ -48,7 +48,7 @@
 
 #include <cfg/compiler.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <fs/battfs.h>
 
 /**
index fa5f480eea2cae9dc4de6beb3f5ffa726ca4b18b..7dcd9eb2bf5a90c0dfec5e16952c0beb76eafd6d 100644 (file)
@@ -66,7 +66,7 @@
 #include <drv/dataflash.h>
 
 #include <kern/proc.h>
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h>
 
index 995919ae184c422ebc77e051fff43a1571c5ebae..5bd834af6441222c4db44c0968617ee645dd322c 100644 (file)
@@ -44,7 +44,7 @@
 
 #include <cfg/compiler.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 
 /**
index 0f67e3d443689b921ba14249dcd09b90bffbf32c..3f84903b6d1f37b44bef233c93d4e6a0f1187afc 100644 (file)
@@ -52,7 +52,7 @@
 #include <drv/timer.h>
 #include <drv/flash25.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <cpu/power.h> /* cpu_relax() */
 
index 2712c70aedba56f5623042fe5371f8e886bf80b3..921e1b5cf6560a12373530baca559d68f1af772d 100644 (file)
@@ -47,7 +47,7 @@
 #include "cfg/cfg_flash25.h"
 #include <cfg/compiler.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /**
  * Type definition for serial flash memory.
index 1297feeaecf6fcbef82f698217321a243340e251..29534c64533c54fbb36f080d16c48432f9f71564 100644 (file)
@@ -43,7 +43,7 @@
  */
 
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <drv/flash25.h>
 
index 3cfac12c260f4b1892eab12d8583dc8524e91f31..1042cd7b28e2164e39ed79d5715bf16ae718f78d 100644 (file)
@@ -49,7 +49,7 @@
 
 #include <drv/timer.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h>
 
index 258b0a4b76f82a85a7cb5eb5dd71d1adc2299d88..24dae6d6d8653d951b9a5ff3af8838876fe9b712 100644 (file)
@@ -45,7 +45,7 @@
 #ifndef DRV_FT245RL_H
 #define DRV_FT245RL_H
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <cfg/compiler.h>
 
 /**
index bfa8fd4ebac7935544e66976c5c3b5001d7d9d6b..dfdcba6bfabc7f17db8ba38f2a7553e07a9dd026 100644 (file)
@@ -43,7 +43,7 @@
 
 #include <drv/timer.h>
 #include <drv/mcp41.h>
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 static KFile *ch;
 
index 6f5cf366cffc20f6dd8a61e4180b24dc48b40402..698774a0d1096e33131b5ac6ffdfefdf53f42ac7 100644 (file)
@@ -47,7 +47,7 @@
 #include "hw/mcp41_map.h"
 #include <cfg/compiler.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #define MCP41_WRITE_DATA 0x11
 #define MCP41_HW_MAX     255
index 0c15156301ea1e41d6598a5c00f238d3647aad08..a3a3906289229bc28fe007aa6ad035ea177a24fa 100644 (file)
@@ -38,7 +38,7 @@
 
 #include "sd.h"
 #include "hw/hw_sd.h"
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <drv/timer.h>
 
 #include <fs/fat.h>
index 42c1d7df1bed9cc579610a8066eac4011e784ee4..207dcfd23c4152937bf52a5dd6dc206045763d8c 100644 (file)
@@ -47,7 +47,7 @@
 
 #include "cfg/cfg_fat.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <fs/fatfs/diskio.h>
 
index 226d9e0c9cdd6c350a8b8271cf4e074b8c667031..cd81f5af7b0e2bfa74ad834b2cb60a178b9b8be4 100644 (file)
@@ -46,7 +46,7 @@
 #ifndef DRV_SER_H
 #define DRV_SER_H
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <struct/fifobuf.h>
 #include <cfg/compiler.h>
 
index 2d3d64fd36c8a8cdc9de36f4e0502b9288ed25c0..58830bbbbc95907b9385070f4360dfd6a9f14a4f 100644 (file)
@@ -47,7 +47,7 @@
 #include <cfg/compiler.h>
 #include <cfg/log.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h>
 
index 940f85377c7dba38e142cdff59d174191a5252bb..7dbc6cc8504f945f745cb89fcc29d12e1a736466 100644 (file)
@@ -52,7 +52,7 @@
 
 #include "hw/hw_sipo.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #define SIPO_DATAORDER_START_LSB        1
 #define SIPO_DATAORDER_START_MSB     0x80
index 4639df6b9d4cd7f5e854caee92d0e9bf43a56867..048e36ba67dcecfb1c9c6fa8d6a49edceeae9d8b 100644 (file)
@@ -38,7 +38,7 @@
 #include "tlv5618.h"
 #include "hw/hw_tlv5618.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h> //memset
 
index 7deb1eb7fc987b1c22e9643b005744af2d808c40..197229e7902103388f26b9f11a4ef5079fce07ec 100644 (file)
@@ -43,7 +43,7 @@
 #define DRV_TLV5618_H
 
 #include <cfg/compiler.h>
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 typedef struct Tlv5618
 {
index cce2696a2daf8e4c0943f8336e24922590db6e26..7f8b4f09cd802c1af7d25b29e754772207bd51cb 100644 (file)
@@ -44,7 +44,7 @@
 
 #include <cpu/byteorder.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <drv/ntc.h> // Macro and data type to manage celsius degree
 
index 85859b25f942f671e98dc10f35b94e056da9941e..015076bd77956844ec65add70a7d7f17e0e92f75 100644 (file)
@@ -45,7 +45,7 @@
 
 #include <cpu/types.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <drv/ntc.h> // Macro and data type to manage celsius degree
 
index ba88ab78ad6c50c014eb8bf15e0d93b866ca264e..7caa3003a52c31e8bfa9492de5e6a021d61bb2ac 100644 (file)
@@ -39,7 +39,7 @@
 #ifndef KFILE_POSIX_H
 #define KFILE_POSIX_H
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <stdio.h>
 
 typedef struct KFilePosix
index 921c59da8b4246c0b851bc09da51a7d649cbe7d3..d38b4d4aa459ef3620de7979e6b38b86f67e3f5b 100644 (file)
@@ -49,7 +49,7 @@
 #include <cpu/types.h> // CPU_BITS_PER_CHAR
 #include <algo/rotating_hash.h>
 #include <struct/list.h>
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <io/kblock.h>
 
 typedef uint16_t fill_t;    ///< Type for keeping trace of space filled inside a page
index 3e7dc787a1a8da95b1d4ee127640ab4fde373947..26d0d1c08a037eeb1ad425f5bb04003dd6346f09 100644 (file)
@@ -48,7 +48,7 @@
 #ifndef FS_FAT_H
 #define FS_FAT_H
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include "fatfs/ff.h"
 
 typedef struct FatFile
diff --git a/bertos/io/kfile.c b/bertos/io/kfile.c
new file mode 100644 (file)
index 0000000..d98f154
--- /dev/null
@@ -0,0 +1,284 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
+ * -->
+ *
+ * \brief Virtual KFile I/O interface.
+ *
+ * This module implements some generic I/O interfaces for kfile.
+ *
+ * \version $Id$
+ * \author Francesco Sacchi <batt@develer.com>
+ * \author Daniele Basile <asterix@develer.com>
+ */
+
+#include "kfile.h"
+
+#include "cfg/cfg_kfile.h"
+#include <cfg/debug.h>
+#include <cfg/log.h>
+
+#include <drv/timer.h>
+#include <mware/formatwr.h>
+
+#include <string.h>
+
+/*
+ * Sanity check for config parameters required by this module.
+ */
+#if !defined(CONFIG_KFILE_GETS) || ((CONFIG_KFILE_GETS != 0) && CONFIG_KFILE_GETS != 1)
+       #error CONFIG_KFILE_GETS must be set to either 0 or 1 in appconfig.h
+#endif
+#if !defined(CONFIG_PRINTF)
+       #error CONFIG_PRINTF missing in appconfig.h
+#endif
+
+
+/**
+ * Generic putc() implementation using \a fd->write.
+ */
+int kfile_putc(int _c, struct KFile *fd)
+{
+       unsigned char c = (unsigned char)_c;
+
+       if (kfile_write(fd, &c, sizeof(c)) == sizeof(c))
+               return (int)((unsigned char)_c);
+       else
+               return EOF;
+}
+
+/**
+ * Generic getc() implementation using \a fd->read.
+ */
+int kfile_getc(struct KFile *fd)
+{
+       unsigned char c;
+
+       if (kfile_read(fd, &c, sizeof(c)) == sizeof(c))
+               return (int)((unsigned char)c);
+       else
+               return EOF;
+}
+
+#if CONFIG_PRINTF
+/**
+ * Formatted write.
+ */
+int kfile_printf(struct KFile *fd, const char *format, ...)
+{
+       va_list ap;
+       int len;
+
+       va_start(ap, format);
+       len = _formatted_write(format, (void (*)(char, void *))kfile_putc, fd, ap);
+       va_end(ap);
+
+       return len;
+}
+#endif /* CONFIG_PRINTF */
+
+/**
+ * Write a string to kfile \a fd.
+ * \return 0 if OK, EOF in case of error.
+ */
+int kfile_print(struct KFile *fd, const char *s)
+{
+       while (*s)
+       {
+               if (kfile_putc(*s++, fd) == EOF)
+                       return EOF;
+       }
+       return 0;
+}
+
+#if CONFIG_KFILE_GETS
+/**
+ * Read a line long at most as size and put it
+ * in buf.
+ * \return number of chars read or EOF in case
+ *         of error.
+ */
+int kfile_gets(struct KFile *fd, char *buf, int size)
+{
+       return kfile_gets_echo(fd, buf, size, false);
+}
+
+
+/**
+ * Read a line long at most as size and put it
+ * in buf, with optional echo.
+ *
+ * \return number of chars read, or EOF in case
+ *         of error.
+ */
+int kfile_gets_echo(struct KFile *fd, char *buf, int size, bool echo)
+{
+       int i = 0;
+       int c;
+
+       for (;;)
+       {
+               if ((c = kfile_getc(fd)) == EOF)
+               {
+                       buf[i] = '\0';
+                       return -1;
+               }
+
+               /* FIXME */
+               if (c == '\r' || c == '\n' || i >= size-1)
+               {
+                       buf[i] = '\0';
+                       if (echo)
+                               kfile_print(fd, "\r\n");
+                       break;
+               }
+               buf[i++] = c;
+               if (echo)
+                       kfile_putc(c, fd);
+       }
+
+       return i;
+}
+#endif /* !CONFIG_KFILE_GETS */
+
+
+/**
+ * Move \a fd file seek position of \a offset bytes from \a whence.
+ *
+ * This is a generic implementation of seek function, you can redefine
+ * it in your local module if needed.
+ */
+kfile_off_t kfile_genericSeek(struct KFile *fd, kfile_off_t offset, KSeekMode whence)
+{
+       kfile_off_t seek_pos;
+
+       switch (whence)
+       {
+
+       case KSM_SEEK_SET:
+               seek_pos = 0;
+               break;
+       case KSM_SEEK_END:
+               seek_pos = fd->size;
+               break;
+       case KSM_SEEK_CUR:
+               seek_pos = fd->seek_pos;
+               break;
+       default:
+               ASSERT(0);
+               return EOF;
+               break;
+       }
+
+       #if LOG_LEVEL >= LOG_LVL_INFO
+       /* Bound check */
+       if (seek_pos + offset > fd->size)
+               LOG_INFO("seek outside EOF\n");
+       #endif
+
+       fd->seek_pos = seek_pos + offset;
+
+       return fd->seek_pos;
+}
+
+/**
+ * Reopen file \a fd.
+ * This is a generic implementation that only flush file
+ * and reset seek_pos to 0.
+ */
+struct KFile * kfile_genericReopen(struct KFile *fd)
+{
+       kfile_flush(fd);
+       kfile_seek(fd, 0, KSM_SEEK_SET);
+       return fd;
+}
+
+/**
+ * Close file \a fd.
+ * This is a generic implementation that only return 0.
+ */
+int kfile_genericClose(UNUSED_ARG(struct KFile *, fd))
+{
+       return 0;
+};
+
+
+/**
+ * Discard input to resynchronize with remote end.
+ *
+ * Discard incoming data until the kfile_getc stops receiving
+ * characters for at least \a delay milliseconds.
+ *
+ * \note If the timeout occur, we reset the error before to
+ * quit.
+ */
+void kfile_resync(KFile *fd, mtime_t delay)
+{
+       ticks_t start_time = timer_clock();
+       for(;;)
+       {
+               if(kfile_getc(fd) != EOF)
+                       start_time = timer_clock();
+
+               if ((timer_clock() - start_time) > ms_to_ticks(delay))
+               {
+                       kfile_clearerr(fd);
+                       break;
+               }
+
+       }
+}
+
+/**
+ * Stub function that does nothing.
+ * This is a generic implementation that only return 0.
+ */
+static int kfile_generic(UNUSED_ARG(struct KFile *, fd))
+{
+       return 0;
+};
+
+
+/**
+ * Base class KFile constructor.
+ */
+void kfile_init(struct KFile *fd)
+{
+       ASSERT(fd);
+       memset(fd, 0, sizeof(*fd));
+       fd->clearerr = (ClearErrFunc_t)kfile_generic;
+       fd->close =  kfile_genericClose;
+       fd->error = kfile_generic;
+       fd->flush = kfile_generic;
+       fd->read = (ReadFunc_t)kfile_generic;
+       fd->reopen = kfile_genericReopen;
+       fd->seek = kfile_genericSeek;
+       fd->write = (WriteFunc_t)kfile_generic;
+}
+
diff --git a/bertos/io/kfile.h b/bertos/io/kfile.h
new file mode 100644 (file)
index 0000000..44c32b0
--- /dev/null
@@ -0,0 +1,289 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 1999, 2000, 2001, 2003 Bernie Innocenti <bernie@codewiz.org>
+ *
+ * -->
+ *
+ * \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.
+ */
+typedef void (*ClearErrFunc_t) (struct KFile *fd);
+/* \} */
+
+/**
+ * Context data for callback functions which operate on
+ * pseudo files.
+ *
+ * \note Remember to add the corresponding accessor functions
+ *       when extending this interface.
+ */
+typedef struct KFile
+{
+       ReadFunc_t     read;
+       WriteFunc_t    write;
+       ReOpenFunc_t   reopen;
+       CloseFunc_t    close;
+       SeekFunc_t     seek;
+       FlushFunc_t    flush;
+       ErrorFunc_t    error;
+       ClearErrFunc_t clearerr;
+       DB(id_t _type); ///< Used to keep track, at runtime, of the class type.
+
+       /* NOTE: these must _NOT_ be size_t on 16bit CPUs! */
+       kfile_off_t    seek_pos;
+       kfile_off_t    size;
+} KFile;
+
+/**
+ * Generic implementation of kfile_seek.
+ */
+kfile_off_t kfile_genericSeek(struct KFile *fd, kfile_off_t offset, KSeekMode whence);
+
+/**
+ * Generic implementation of kfile_reopen.
+ */
+struct KFile * kfile_genericReopen(struct KFile *fd);
+
+int kfile_genericClose(struct KFile *fd);
+
+int kfile_putc(int c, struct KFile *fd); ///< Generic putc implementation using kfile_write.
+int kfile_getc(struct KFile *fd);  ///< Generic getc implementation using kfile_read.
+int kfile_printf(struct KFile *fd, const char *format, ...);
+int kfile_print(struct KFile *fd, const char *s);
+int kfile_gets(struct KFile *fd, char *buf, int size);
+int kfile_gets_echo(struct KFile *fd, char *buf, int size, bool echo);
+void kfile_resync(KFile *fd, mtime_t delay);
+void kfile_init(struct KFile *fd);
+
+/**
+ * Interface functions for KFile access.
+ * \note Remember to change following functions if KFile interface changes.
+ * \{
+ */
+INLINE size_t kfile_read(struct KFile *fd, void *buf, size_t size)
+{
+       ASSERT(fd->read);
+       return fd->read(fd, buf, size);
+}
+
+INLINE size_t kfile_write(struct KFile *fd, const void *buf, size_t size)
+{
+       ASSERT(fd->write);
+       return fd->write(fd, buf, size);
+}
+
+INLINE KFile * kfile_reopen(struct KFile *fd)
+{
+       ASSERT(fd->reopen);
+       return fd->reopen(fd);
+}
+
+INLINE int kfile_close(struct KFile *fd)
+{
+       ASSERT(fd->close);
+       return fd->close(fd);
+}
+
+INLINE kfile_off_t kfile_seek(struct KFile *fd, kfile_off_t offset, KSeekMode whence)
+{
+       ASSERT(fd->seek);
+       return fd->seek(fd, offset, whence);
+}
+
+INLINE int kfile_flush(struct KFile *fd)
+{
+       ASSERT(fd->flush);
+       return fd->flush(fd);
+}
+
+INLINE int kfile_error(struct KFile *fd)
+{
+       ASSERT(fd->error);
+       return fd->error(fd);
+}
+
+INLINE void kfile_clearerr(struct KFile *fd)
+{
+       ASSERT(fd->clearerr);
+       fd->clearerr(fd);
+}
+/* \} */
+
+/**
+ * Kfile test function.
+ */
+int kfile_testSetup(void);
+int kfile_testRun(void);
+int kfile_testRunGeneric(KFile *fd, uint8_t *test_buf, uint8_t *save_buf, size_t size);
+int kfile_testTearDown(void);
+
+
+#endif /* KERN_KFILE_H */
diff --git a/bertos/io/kfile_test.c b/bertos/io/kfile_test.c
new file mode 100644 (file)
index 0000000..410243e
--- /dev/null
@@ -0,0 +1,335 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \brief Test suite for virtual KFile I/O interface.
+ *
+ * This module implements a test for some generic I/O interfaces for kfile.
+ *
+ * \version $Id$
+ * \author Francesco Sacchi <batt@develer.com>
+ * \author Daniele Basile <asterix@develer.com>
+ */
+
+
+#include "kfile.h"
+#include <struct/kfile_mem.h>
+
+#include "cfg/cfg_kfile.h"
+#include <cfg/debug.h>
+#include <cfg/test.h>
+#include <cfg/module.h>
+
+// Define logging setting (for cfg/log.h module).
+#define LOG_LEVEL   KFILE_LOG_LEVEL
+#define LOG_FORMAT  KFILE_LOG_FORMAT
+#include <cfg/log.h>
+
+#include <mware/formatwr.h>
+
+#include <string.h>
+
+MOD_DEFINE(kfile_test);
+
+// Size of the "virtual" disk that
+// we want to test.
+#define BUF_TEST_LEN     3209
+
+// Buffer for test
+uint8_t test_buf[BUF_TEST_LEN];
+uint8_t test_buf_save[BUF_TEST_LEN];
+
+uint8_t test_disk[BUF_TEST_LEN];
+KFileMem mem;
+
+/*
+ * Help function to init disk and the buffers.
+ */
+static void init_testBuf(void)
+{
+
+       kprintf("Init fake buffer..\n");
+       for (int i = 0; i < BUF_TEST_LEN; i++)
+       {
+               test_disk[i] = i;
+               kprintf("%d ", test_disk[i]);
+       }
+       kprintf("\nend\n");
+
+       memset(test_buf, 0, sizeof(test_buf));
+       memset(test_buf_save, 0, sizeof(test_buf_save));
+}
+
+/**
+ * KFile read/write subtest.
+ * Try to write/read in the same \a f file location \a size bytes.
+ * \return true if all is ok, false otherwise
+ * \note Restore file position at exit (if no error)
+ * \note Test buffer \a buf must be filled with
+ * the following statement:
+ * <pre>
+ * buf[i] = i & 0xff
+ * </pre>
+ */
+static bool kfile_rwTest(KFile *f, uint8_t *buf, size_t size)
+{
+       /*
+        * Write test buffer
+        */
+       if (kfile_write(f, buf, size) != size)
+       {
+               LOG_ERR("error writing buf");
+               return false;
+       }
+
+       kfile_seek(f, -(kfile_off_t)size, KSM_SEEK_CUR);
+
+       /*
+        * Reset test buffer
+        */
+       memset(buf, 0, size);
+
+       /*
+        * Read file in test buffer
+        */
+       if (kfile_read(f, buf, size) != size)
+       {
+               LOG_ERR("error reading buf");
+               return false;
+       }
+
+
+       kfile_seek(f, -(kfile_off_t)size, KSM_SEEK_CUR);
+
+       /*
+        * Check test result
+        */
+       for (size_t i = 0; i < size; i++)
+       {
+               if (buf[i] != (i & 0xff))
+               {
+                       LOG_ERR("error comparing at index [%d] read [%02x] expected [%02x]\n", i, buf[i], i);
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+/**
+ * KFile read/write test.
+ * This function write and read \a test_buf long \a size
+ * on \a fd handler.
+ * \a save_buf can be NULL or a buffer where to save previous file content.
+ */
+int kfile_testRunGeneric(KFile *fd, uint8_t *test_buf, uint8_t *save_buf, size_t size)
+{
+
+       /*
+        * Part of test buf size that you would write.
+        * This var is used in test 3 to check kfile_write
+        * when writing beyond filesize limit.
+        */
+       kfile_off_t len = size / 2;
+
+
+       /* Fill test buffer */
+       for (size_t i = 0; i < size; i++)
+               test_buf[i] = (i & 0xff);
+
+       /*
+        * If necessary, user can save content,
+        * for later restore.
+        */
+       if (save_buf)
+       {
+               LOG_INFO("Saved content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
+               kfile_read(fd, save_buf, size);
+       }
+
+       /* TEST 1 BEGIN. */
+       LOG_INFO("Test 1: write from pos 0 to [%ld]\n", (long)size);
+
+       /*
+        * Seek to addr 0.
+        */
+       if (kfile_seek(fd, 0, KSM_SEEK_SET) != 0)
+               goto kfile_test_end;
+
+       /*
+        * Test read/write to address 0..size
+        */
+       if (!kfile_rwTest(fd, test_buf, size))
+               goto kfile_test_end;
+
+       LOG_INFO("Test 1: ok!\n");
+
+       /*
+        * Restore previous read content.
+        */
+       if (save_buf)
+       {
+               kfile_seek(fd, 0, KSM_SEEK_SET);
+
+               if (kfile_write(fd, save_buf, size) != size)
+                       goto kfile_test_end;
+
+               LOG_INFO("Restore content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
+       }
+       /* TEST 1 END. */
+
+       /* TEST 2 BEGIN. */
+       LOG_INFO("Test 2: write from pos [%ld] to [%ld]\n", fd->size/2 , fd->size/2 + size);
+
+       /*
+        * Go to half test size.
+        */
+       kfile_seek(fd, (fd->size / 2), KSM_SEEK_SET);
+
+       /*
+        * If necessary, user can save content
+        * for later restore.
+        */
+       if (save_buf)
+       {
+               kfile_read(fd, save_buf, size);
+               kfile_seek(fd, -(kfile_off_t)size, KSM_SEEK_CUR);
+               LOG_INFO("Saved content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
+       }
+
+       /*
+        * Test read/write to address filesize/2 ... filesize/2 + size
+        */
+       if (!kfile_rwTest(fd, test_buf, size))
+               goto kfile_test_end;
+
+       LOG_INFO("Test 2: ok!\n");
+
+       /*
+        * Restore previous content.
+        */
+       if (save_buf)
+       {
+               kfile_seek(fd, -(kfile_off_t)size, KSM_SEEK_CUR);
+
+               if (kfile_write(fd, save_buf, size) != size)
+                       goto kfile_test_end;
+
+               LOG_INFO("Restore content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
+       }
+
+       /* TEST 2 END. */
+
+       /* TEST 3 BEGIN. */
+       LOG_INFO("Test 3: write outside of fd->size limit [%ld]\n", fd->size);
+
+       /*
+        * Go to the Flash end
+        */
+       kfile_seek(fd, -len, KSM_SEEK_END);
+
+       /*
+        * If necessary, user can save content,
+        * for later restore.
+        */
+       if (save_buf)
+       {
+               kfile_read(fd, save_buf, len);
+               kfile_seek(fd, -len, KSM_SEEK_CUR);
+               LOG_INFO("Saved content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + len);
+       }
+
+       /*
+        * Test read/write to address (filesize - size) ... filesize
+        */
+       if (kfile_rwTest(fd, test_buf, size))
+               goto kfile_test_end;
+
+       kprintf("Test 3: ok!\n");
+
+       /*
+        * Restore previous read content
+        */
+       if (save_buf)
+       {
+               kfile_seek(fd, -len, KSM_SEEK_END);
+
+               if ((kfile_off_t)kfile_write(fd, save_buf, len) != len)
+                       goto kfile_test_end;
+
+               LOG_INFO("Restore content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + len);
+       }
+
+       /* TEST 3 END. */
+
+       kfile_close(fd);
+       return 0;
+
+kfile_test_end:
+       kfile_close(fd);
+       LOG_ERR("One kfile_test failed!\n");
+       return EOF;
+}
+
+
+
+
+/**
+ * Setup all needed for kfile test
+ */
+int kfile_testSetup(void)
+{
+        MOD_INIT(kfile_test);
+        LOG_INFO("Mod init..ok\n");
+
+               // Init our backend and the buffers
+               kfilemem_init(&mem, test_disk, BUF_TEST_LEN);
+               init_testBuf();
+
+        return 0;
+}
+
+int kfile_testRun(void)
+{
+       return kfile_testRunGeneric(&mem.fd, test_buf, test_buf_save, BUF_TEST_LEN);
+}
+
+/**
+ * End a dataflash Test.
+ * (Unused)
+ */
+int kfile_testTearDown(void)
+{
+       return 0;
+}
+
+TEST_MAIN(kfile);
+
index d98f15484ef6a3a7c71c1832f5b7c9d95c91892a..e869116374a0af61ecd76269b8e1d928fe7d932a 100644 (file)
@@ -1,284 +1,5 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
- * -->
- *
- * \brief Virtual KFile I/O interface.
- *
- * This module implements some generic I/O interfaces for kfile.
- *
- * \version $Id$
- * \author Francesco Sacchi <batt@develer.com>
- * \author Daniele Basile <asterix@develer.com>
- */
-
-#include "kfile.h"
-
-#include "cfg/cfg_kfile.h"
-#include <cfg/debug.h>
-#include <cfg/log.h>
-
-#include <drv/timer.h>
-#include <mware/formatwr.h>
-
-#include <string.h>
-
-/*
- * Sanity check for config parameters required by this module.
- */
-#if !defined(CONFIG_KFILE_GETS) || ((CONFIG_KFILE_GETS != 0) && CONFIG_KFILE_GETS != 1)
-       #error CONFIG_KFILE_GETS must be set to either 0 or 1 in appconfig.h
-#endif
-#if !defined(CONFIG_PRINTF)
-       #error CONFIG_PRINTF missing in appconfig.h
-#endif
-
-
-/**
- * Generic putc() implementation using \a fd->write.
- */
-int kfile_putc(int _c, struct KFile *fd)
-{
-       unsigned char c = (unsigned char)_c;
-
-       if (kfile_write(fd, &c, sizeof(c)) == sizeof(c))
-               return (int)((unsigned char)_c);
-       else
-               return EOF;
-}
-
-/**
- * Generic getc() implementation using \a fd->read.
- */
-int kfile_getc(struct KFile *fd)
-{
-       unsigned char c;
-
-       if (kfile_read(fd, &c, sizeof(c)) == sizeof(c))
-               return (int)((unsigned char)c);
-       else
-               return EOF;
-}
-
-#if CONFIG_PRINTF
-/**
- * Formatted write.
- */
-int kfile_printf(struct KFile *fd, const char *format, ...)
-{
-       va_list ap;
-       int len;
-
-       va_start(ap, format);
-       len = _formatted_write(format, (void (*)(char, void *))kfile_putc, fd, ap);
-       va_end(ap);
-
-       return len;
-}
-#endif /* CONFIG_PRINTF */
-
-/**
- * Write a string to kfile \a fd.
- * \return 0 if OK, EOF in case of error.
- */
-int kfile_print(struct KFile *fd, const char *s)
-{
-       while (*s)
-       {
-               if (kfile_putc(*s++, fd) == EOF)
-                       return EOF;
-       }
-       return 0;
-}
-
-#if CONFIG_KFILE_GETS
-/**
- * Read a line long at most as size and put it
- * in buf.
- * \return number of chars read or EOF in case
- *         of error.
- */
-int kfile_gets(struct KFile *fd, char *buf, int size)
-{
-       return kfile_gets_echo(fd, buf, size, false);
-}
-
-
-/**
- * Read a line long at most as size and put it
- * in buf, with optional echo.
- *
- * \return number of chars read, or EOF in case
- *         of error.
- */
-int kfile_gets_echo(struct KFile *fd, char *buf, int size, bool echo)
-{
-       int i = 0;
-       int c;
-
-       for (;;)
-       {
-               if ((c = kfile_getc(fd)) == EOF)
-               {
-                       buf[i] = '\0';
-                       return -1;
-               }
-
-               /* FIXME */
-               if (c == '\r' || c == '\n' || i >= size-1)
-               {
-                       buf[i] = '\0';
-                       if (echo)
-                               kfile_print(fd, "\r\n");
-                       break;
-               }
-               buf[i++] = c;
-               if (echo)
-                       kfile_putc(c, fd);
-       }
-
-       return i;
-}
-#endif /* !CONFIG_KFILE_GETS */
-
-
-/**
- * Move \a fd file seek position of \a offset bytes from \a whence.
- *
- * This is a generic implementation of seek function, you can redefine
- * it in your local module if needed.
- */
-kfile_off_t kfile_genericSeek(struct KFile *fd, kfile_off_t offset, KSeekMode whence)
-{
-       kfile_off_t seek_pos;
-
-       switch (whence)
-       {
-
-       case KSM_SEEK_SET:
-               seek_pos = 0;
-               break;
-       case KSM_SEEK_END:
-               seek_pos = fd->size;
-               break;
-       case KSM_SEEK_CUR:
-               seek_pos = fd->seek_pos;
-               break;
-       default:
-               ASSERT(0);
-               return EOF;
-               break;
-       }
-
-       #if LOG_LEVEL >= LOG_LVL_INFO
-       /* Bound check */
-       if (seek_pos + offset > fd->size)
-               LOG_INFO("seek outside EOF\n");
-       #endif
-
-       fd->seek_pos = seek_pos + offset;
-
-       return fd->seek_pos;
-}
-
-/**
- * Reopen file \a fd.
- * This is a generic implementation that only flush file
- * and reset seek_pos to 0.
- */
-struct KFile * kfile_genericReopen(struct KFile *fd)
-{
-       kfile_flush(fd);
-       kfile_seek(fd, 0, KSM_SEEK_SET);
-       return fd;
-}
-
-/**
- * Close file \a fd.
- * This is a generic implementation that only return 0.
- */
-int kfile_genericClose(UNUSED_ARG(struct KFile *, fd))
-{
-       return 0;
-};
-
-
-/**
- * Discard input to resynchronize with remote end.
- *
- * Discard incoming data until the kfile_getc stops receiving
- * characters for at least \a delay milliseconds.
- *
- * \note If the timeout occur, we reset the error before to
- * quit.
- */
-void kfile_resync(KFile *fd, mtime_t delay)
-{
-       ticks_t start_time = timer_clock();
-       for(;;)
-       {
-               if(kfile_getc(fd) != EOF)
-                       start_time = timer_clock();
-
-               if ((timer_clock() - start_time) > ms_to_ticks(delay))
-               {
-                       kfile_clearerr(fd);
-                       break;
-               }
-
-       }
-}
-
-/**
- * Stub function that does nothing.
- * This is a generic implementation that only return 0.
- */
-static int kfile_generic(UNUSED_ARG(struct KFile *, fd))
-{
-       return 0;
-};
-
-
-/**
- * Base class KFile constructor.
- */
-void kfile_init(struct KFile *fd)
-{
-       ASSERT(fd);
-       memset(fd, 0, sizeof(*fd));
-       fd->clearerr = (ClearErrFunc_t)kfile_generic;
-       fd->close =  kfile_genericClose;
-       fd->error = kfile_generic;
-       fd->flush = kfile_generic;
-       fd->read = (ReadFunc_t)kfile_generic;
-       fd->reopen = kfile_genericReopen;
-       fd->seek = kfile_genericSeek;
-       fd->write = (WriteFunc_t)kfile_generic;
-}
+// notest: all
 
+#warning "This file is deprecated, use the new io/kfile.c"
+#error analc
+#include <io/kfile.c>
index 44c32b06b00e97b4342accf364550246e98a05f2..24e07dd576335abf069e9d8b65fbde4d3c411bd6 100644 (file)
@@ -1,289 +1,3 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
- * Copyright 1999, 2000, 2001, 2003 Bernie Innocenti <bernie@codewiz.org>
- *
- * -->
- *
- * \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.
- */
-typedef void (*ClearErrFunc_t) (struct KFile *fd);
-/* \} */
-
-/**
- * Context data for callback functions which operate on
- * pseudo files.
- *
- * \note Remember to add the corresponding accessor functions
- *       when extending this interface.
- */
-typedef struct KFile
-{
-       ReadFunc_t     read;
-       WriteFunc_t    write;
-       ReOpenFunc_t   reopen;
-       CloseFunc_t    close;
-       SeekFunc_t     seek;
-       FlushFunc_t    flush;
-       ErrorFunc_t    error;
-       ClearErrFunc_t clearerr;
-       DB(id_t _type); ///< Used to keep track, at runtime, of the class type.
-
-       /* NOTE: these must _NOT_ be size_t on 16bit CPUs! */
-       kfile_off_t    seek_pos;
-       kfile_off_t    size;
-} KFile;
-
-/**
- * Generic implementation of kfile_seek.
- */
-kfile_off_t kfile_genericSeek(struct KFile *fd, kfile_off_t offset, KSeekMode whence);
-
-/**
- * Generic implementation of kfile_reopen.
- */
-struct KFile * kfile_genericReopen(struct KFile *fd);
-
-int kfile_genericClose(struct KFile *fd);
-
-int kfile_putc(int c, struct KFile *fd); ///< Generic putc implementation using kfile_write.
-int kfile_getc(struct KFile *fd);  ///< Generic getc implementation using kfile_read.
-int kfile_printf(struct KFile *fd, const char *format, ...);
-int kfile_print(struct KFile *fd, const char *s);
-int kfile_gets(struct KFile *fd, char *buf, int size);
-int kfile_gets_echo(struct KFile *fd, char *buf, int size, bool echo);
-void kfile_resync(KFile *fd, mtime_t delay);
-void kfile_init(struct KFile *fd);
-
-/**
- * Interface functions for KFile access.
- * \note Remember to change following functions if KFile interface changes.
- * \{
- */
-INLINE size_t kfile_read(struct KFile *fd, void *buf, size_t size)
-{
-       ASSERT(fd->read);
-       return fd->read(fd, buf, size);
-}
-
-INLINE size_t kfile_write(struct KFile *fd, const void *buf, size_t size)
-{
-       ASSERT(fd->write);
-       return fd->write(fd, buf, size);
-}
-
-INLINE KFile * kfile_reopen(struct KFile *fd)
-{
-       ASSERT(fd->reopen);
-       return fd->reopen(fd);
-}
-
-INLINE int kfile_close(struct KFile *fd)
-{
-       ASSERT(fd->close);
-       return fd->close(fd);
-}
-
-INLINE kfile_off_t kfile_seek(struct KFile *fd, kfile_off_t offset, KSeekMode whence)
-{
-       ASSERT(fd->seek);
-       return fd->seek(fd, offset, whence);
-}
-
-INLINE int kfile_flush(struct KFile *fd)
-{
-       ASSERT(fd->flush);
-       return fd->flush(fd);
-}
-
-INLINE int kfile_error(struct KFile *fd)
-{
-       ASSERT(fd->error);
-       return fd->error(fd);
-}
-
-INLINE void kfile_clearerr(struct KFile *fd)
-{
-       ASSERT(fd->clearerr);
-       fd->clearerr(fd);
-}
-/* \} */
-
-/**
- * Kfile test function.
- */
-int kfile_testSetup(void);
-int kfile_testRun(void);
-int kfile_testRunGeneric(KFile *fd, uint8_t *test_buf, uint8_t *save_buf, size_t size);
-int kfile_testTearDown(void);
-
-
-#endif /* KERN_KFILE_H */
+#warning "This file is deprecated, include the new <io/kfile.h>"
+#error anal
+#include <io/kfile.h>
diff --git a/bertos/kern/kfile_test.c b/bertos/kern/kfile_test.c
deleted file mode 100644 (file)
index 410243e..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief Test suite for virtual KFile I/O interface.
- *
- * This module implements a test for some generic I/O interfaces for kfile.
- *
- * \version $Id$
- * \author Francesco Sacchi <batt@develer.com>
- * \author Daniele Basile <asterix@develer.com>
- */
-
-
-#include "kfile.h"
-#include <struct/kfile_mem.h>
-
-#include "cfg/cfg_kfile.h"
-#include <cfg/debug.h>
-#include <cfg/test.h>
-#include <cfg/module.h>
-
-// Define logging setting (for cfg/log.h module).
-#define LOG_LEVEL   KFILE_LOG_LEVEL
-#define LOG_FORMAT  KFILE_LOG_FORMAT
-#include <cfg/log.h>
-
-#include <mware/formatwr.h>
-
-#include <string.h>
-
-MOD_DEFINE(kfile_test);
-
-// Size of the "virtual" disk that
-// we want to test.
-#define BUF_TEST_LEN     3209
-
-// Buffer for test
-uint8_t test_buf[BUF_TEST_LEN];
-uint8_t test_buf_save[BUF_TEST_LEN];
-
-uint8_t test_disk[BUF_TEST_LEN];
-KFileMem mem;
-
-/*
- * Help function to init disk and the buffers.
- */
-static void init_testBuf(void)
-{
-
-       kprintf("Init fake buffer..\n");
-       for (int i = 0; i < BUF_TEST_LEN; i++)
-       {
-               test_disk[i] = i;
-               kprintf("%d ", test_disk[i]);
-       }
-       kprintf("\nend\n");
-
-       memset(test_buf, 0, sizeof(test_buf));
-       memset(test_buf_save, 0, sizeof(test_buf_save));
-}
-
-/**
- * KFile read/write subtest.
- * Try to write/read in the same \a f file location \a size bytes.
- * \return true if all is ok, false otherwise
- * \note Restore file position at exit (if no error)
- * \note Test buffer \a buf must be filled with
- * the following statement:
- * <pre>
- * buf[i] = i & 0xff
- * </pre>
- */
-static bool kfile_rwTest(KFile *f, uint8_t *buf, size_t size)
-{
-       /*
-        * Write test buffer
-        */
-       if (kfile_write(f, buf, size) != size)
-       {
-               LOG_ERR("error writing buf");
-               return false;
-       }
-
-       kfile_seek(f, -(kfile_off_t)size, KSM_SEEK_CUR);
-
-       /*
-        * Reset test buffer
-        */
-       memset(buf, 0, size);
-
-       /*
-        * Read file in test buffer
-        */
-       if (kfile_read(f, buf, size) != size)
-       {
-               LOG_ERR("error reading buf");
-               return false;
-       }
-
-
-       kfile_seek(f, -(kfile_off_t)size, KSM_SEEK_CUR);
-
-       /*
-        * Check test result
-        */
-       for (size_t i = 0; i < size; i++)
-       {
-               if (buf[i] != (i & 0xff))
-               {
-                       LOG_ERR("error comparing at index [%d] read [%02x] expected [%02x]\n", i, buf[i], i);
-                       return false;
-               }
-       }
-
-       return true;
-}
-
-/**
- * KFile read/write test.
- * This function write and read \a test_buf long \a size
- * on \a fd handler.
- * \a save_buf can be NULL or a buffer where to save previous file content.
- */
-int kfile_testRunGeneric(KFile *fd, uint8_t *test_buf, uint8_t *save_buf, size_t size)
-{
-
-       /*
-        * Part of test buf size that you would write.
-        * This var is used in test 3 to check kfile_write
-        * when writing beyond filesize limit.
-        */
-       kfile_off_t len = size / 2;
-
-
-       /* Fill test buffer */
-       for (size_t i = 0; i < size; i++)
-               test_buf[i] = (i & 0xff);
-
-       /*
-        * If necessary, user can save content,
-        * for later restore.
-        */
-       if (save_buf)
-       {
-               LOG_INFO("Saved content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
-               kfile_read(fd, save_buf, size);
-       }
-
-       /* TEST 1 BEGIN. */
-       LOG_INFO("Test 1: write from pos 0 to [%ld]\n", (long)size);
-
-       /*
-        * Seek to addr 0.
-        */
-       if (kfile_seek(fd, 0, KSM_SEEK_SET) != 0)
-               goto kfile_test_end;
-
-       /*
-        * Test read/write to address 0..size
-        */
-       if (!kfile_rwTest(fd, test_buf, size))
-               goto kfile_test_end;
-
-       LOG_INFO("Test 1: ok!\n");
-
-       /*
-        * Restore previous read content.
-        */
-       if (save_buf)
-       {
-               kfile_seek(fd, 0, KSM_SEEK_SET);
-
-               if (kfile_write(fd, save_buf, size) != size)
-                       goto kfile_test_end;
-
-               LOG_INFO("Restore content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
-       }
-       /* TEST 1 END. */
-
-       /* TEST 2 BEGIN. */
-       LOG_INFO("Test 2: write from pos [%ld] to [%ld]\n", fd->size/2 , fd->size/2 + size);
-
-       /*
-        * Go to half test size.
-        */
-       kfile_seek(fd, (fd->size / 2), KSM_SEEK_SET);
-
-       /*
-        * If necessary, user can save content
-        * for later restore.
-        */
-       if (save_buf)
-       {
-               kfile_read(fd, save_buf, size);
-               kfile_seek(fd, -(kfile_off_t)size, KSM_SEEK_CUR);
-               LOG_INFO("Saved content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
-       }
-
-       /*
-        * Test read/write to address filesize/2 ... filesize/2 + size
-        */
-       if (!kfile_rwTest(fd, test_buf, size))
-               goto kfile_test_end;
-
-       LOG_INFO("Test 2: ok!\n");
-
-       /*
-        * Restore previous content.
-        */
-       if (save_buf)
-       {
-               kfile_seek(fd, -(kfile_off_t)size, KSM_SEEK_CUR);
-
-               if (kfile_write(fd, save_buf, size) != size)
-                       goto kfile_test_end;
-
-               LOG_INFO("Restore content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + size);
-       }
-
-       /* TEST 2 END. */
-
-       /* TEST 3 BEGIN. */
-       LOG_INFO("Test 3: write outside of fd->size limit [%ld]\n", fd->size);
-
-       /*
-        * Go to the Flash end
-        */
-       kfile_seek(fd, -len, KSM_SEEK_END);
-
-       /*
-        * If necessary, user can save content,
-        * for later restore.
-        */
-       if (save_buf)
-       {
-               kfile_read(fd, save_buf, len);
-               kfile_seek(fd, -len, KSM_SEEK_CUR);
-               LOG_INFO("Saved content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + len);
-       }
-
-       /*
-        * Test read/write to address (filesize - size) ... filesize
-        */
-       if (kfile_rwTest(fd, test_buf, size))
-               goto kfile_test_end;
-
-       kprintf("Test 3: ok!\n");
-
-       /*
-        * Restore previous read content
-        */
-       if (save_buf)
-       {
-               kfile_seek(fd, -len, KSM_SEEK_END);
-
-               if ((kfile_off_t)kfile_write(fd, save_buf, len) != len)
-                       goto kfile_test_end;
-
-               LOG_INFO("Restore content..form [%ld] to [%ld]\n", fd->seek_pos, fd->seek_pos + len);
-       }
-
-       /* TEST 3 END. */
-
-       kfile_close(fd);
-       return 0;
-
-kfile_test_end:
-       kfile_close(fd);
-       LOG_ERR("One kfile_test failed!\n");
-       return EOF;
-}
-
-
-
-
-/**
- * Setup all needed for kfile test
- */
-int kfile_testSetup(void)
-{
-        MOD_INIT(kfile_test);
-        LOG_INFO("Mod init..ok\n");
-
-               // Init our backend and the buffers
-               kfilemem_init(&mem, test_disk, BUF_TEST_LEN);
-               init_testBuf();
-
-        return 0;
-}
-
-int kfile_testRun(void)
-{
-       return kfile_testRunGeneric(&mem.fd, test_buf, test_buf_save, BUF_TEST_LEN);
-}
-
-/**
- * End a dataflash Test.
- * (Unused)
- */
-int kfile_testTearDown(void)
-{
-       return 0;
-}
-
-TEST_MAIN(kfile);
-
index ef5d94899a545e219f79f41b7b6ce42d67ff013d..377659be5904099c8d31c64507bc8c86ebde7694 100644 (file)
@@ -50,7 +50,7 @@
 #ifndef INI_READER_H
 #define INI_READER_H
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /**
  * \brief Returns the value for the given string in char* format.
index b06013c8186746b76a173f7bf40bfcc9f27f763f..b6b408816c1f7732d0404f5a015f7f238c1b3e31 100644 (file)
@@ -57,7 +57,7 @@
 
 #include "cfg/cfg_parser.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <struct/hashtable.h>
 
 #include <stdlib.h> // atol(), NULL
index 57d3da8ed4e12c667c650bd4afde6becc8df2833..d5eb272db1dc16e903c4f7d2ce433a06a15297df 100644 (file)
@@ -46,7 +46,7 @@
 #include "cfg/cfg_afsk.h"
 #include "hw/hw_afsk.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 #include <cfg/compiler.h>
 #include <struct/fifobuf.h>
 
index 0e609136f18e5d56f20b066f39b6ea23eacaa731..1e75501e647c9f56fd612491849c78e3b18f56ba 100644 (file)
@@ -49,7 +49,7 @@
 #include "cfg/cfg_ax25.h"
 
 #include <cfg/compiler.h>
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /**
  * Maximum size of a AX25 frame.
index 32473ceb733fd047614a8558616ad6eab82a3a7c..2f75b3ee63f66a2afe784935121074c7a897b039 100644 (file)
@@ -55,7 +55,7 @@
 #include <cfg/log.h>
 #include <cfg/macros.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h>
 /**
index f086bc3419b1a856ae7e6245a01d31f406c4cc04..2a2c5fbfe1ef3fed4bc35eae19e59547b5fe89ab 100644 (file)
@@ -45,7 +45,7 @@
 
 #include <cfg/cfg_keytag.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 
 /**
index f0a8b3de455da53675cc65d3deac999d0198c085..184a7a0aa1e4d07faf30df923807af84e56c29c4 100644 (file)
@@ -45,7 +45,7 @@
 
 #include <net/nmeap/inc/nmeap.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <time.h>
 
index 117e40d07204e515e1b80494e0f19f5413700d80..bded2db0bccbe406e47ff98f908eef8c28508c48 100644 (file)
@@ -87,7 +87,7 @@
 #include <cfg/debug.h>
 #include <cfg/macros.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <cpu/byteorder.h>
 
index e67f2634575bc6fe2a68f29e2f0b178367247939..69635e95b4540e167407c51eb200f0e81d8a8efb 100644 (file)
@@ -48,7 +48,7 @@
 
 #include <algo/rotating_hash.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /**
  * pocketBus special characters definitions.
index db27cf41af72b949ecbf03f30337a022e5e57024..2e864d6da1f075d587fea5ce7f4627d651bf1ae0 100644 (file)
@@ -45,7 +45,7 @@
 #define NET_XMODEM_H
 
 #include <cfg/compiler.h>
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /**
  * Called to know if we want to abort data tranfer.
index 9ebc59df1af548366fa6ba0f1ae1e93b4d1e7a5e..66264eb4fbbabc815e0d96e39d92cf0aa8111d8e 100644 (file)
@@ -39,7 +39,7 @@
 #include "kfile_fifo.h"
 #include "fifobuf.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h>
 
index 78c1f46d3740deff0b99aae1e67d6bfc810269ec..ebf23960a1aa6c86114057391a91ca486bd30432 100644 (file)
@@ -64,7 +64,7 @@
 #define STRUCT_KFILE_FIFO
 
 #include "fifobuf.h"
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 typedef struct KFileFifo
 {
index 5560fdc6181c7af6b58b9e1a9d1ec73ec64784ff..0ff03904e76ef64f6b4a7447c51c4a2c17079df6 100644 (file)
@@ -38,7 +38,7 @@
 
 #include "kfile_mem.h"
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <string.h>
 
index c723de2f4400d4b28bdfe2209630e2a4784ec60c..b39eacbee0254d2f2ce9dea2005d234daae764d2 100644 (file)
@@ -45,7 +45,7 @@
 #ifndef STRUCT_KFILE_MEM
 #define STRUCT_KFILE_MEM
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 /**
  * Context for KFile over memory buffer.
index 900531e6e2e743c03826c48839c60e90c614bbe5..78d262e2f98f83071f22c1922f05d86d1f5c5921 100644 (file)
@@ -59,7 +59,7 @@
 #include <cfg/compiler.h>
 #include <cfg/debug.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 #include <stdlib.h>
 #include <string.h>
index 8075bc8771a312a4dc5e5196e209c63e3a62c138..e3c95b4e393892e60948d7932378aa5d5fd3ce17 100644 (file)
@@ -42,7 +42,7 @@
 
 #include <drv/sipo.h>
 
-#include <kern/kfile.h>
+#include <io/kfile.h>
 
 void protocol_init(KFile *fd);
 void protocol_run(KFile *fd);
index be0ed430e0f4d72a3af852436c5f337630eae680..9034ac92f0e7df3eb590e173132beb9b2a62ff49 100755 (executable)
@@ -33,7 +33,6 @@ SRC_LIST="
        bertos/algo/ramp.c
        bertos/drv/kdebug.c
        bertos/drv/timer.c
-       bertos/kern/kfile.c
        bertos/kern/monitor.c
        bertos/kern/proc.c
        bertos/kern/signal.c
@@ -65,6 +64,7 @@ SRC_LIST="
        bertos/io/kblock.c
        bertos/io/kblock_ram.c
        bertos/io/kblock_file.c
+       bertos/io/kfile.c
 "
 
 buildout='/dev/null'