X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=kern%2Fkfile.c;h=6750aba3380a674e0c88fa2f16c142cc3a5b9416;hb=HEAD;hp=38f438027d3c738a32a42fab054776e5b86a6ef4;hpb=9440bf5d1e06bbbecd17da05a2be5705e3503a47;p=bertos.git diff --git a/kern/kfile.c b/kern/kfile.c deleted file mode 100644 index 38f43802..00000000 --- a/kern/kfile.c +++ /dev/null @@ -1,299 +0,0 @@ -/** - * \file - * - * - * \brief Virtual KFile I/O interface. - * This module implement a standard fd.seek and a kfile - * test function. - * - * \version $Id$ - * \author Francesco Sacchi - * \author Daniele Basile - * - */ - -#include - -#inclede - - -/** - * Move \a fd file seek position of \a offset bytes - * from current position. - * This is a generic implementation of seek function, you should redefine - * it in your local module. - */ -int32_t kfile_seek(struct _KFile *fd, kfile_off_t offset, KSeekMode whence) -{ - uint32_t seek_pos; - - switch(whence) - { - - case KSM_SEEK_SET: - seek_pos = 0; - break; - case KSM_SEEK_END: - seek_pos = fd->size - 1; - break; - case KSM_SEEK_CUR: - seek_pos = fd->seek_pos; - break; - default: - ASSERT(0); - return -1; - break; - - } - - /* Bound check */ - if (seek_pos + offset > fd->size) - { - ASSERT(0); - return -1; - } - - fd->seek_pos = seek_pos + offset; - kprintf("Flash seek to [%lu]\n", fd->seek_pos); - - return fd->seek_pos; -} - -#if CONFIG_TEST - -/** - * Program memory 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: - *
- * buf[i] = i & 0xff
- * 
- */ -static bool kfile_rwTest(KFile *f, uint8_t *buf, size_t _size) -{ - int32_t size = _size; - - // Write test buffer - if (f->write(f, buf, size) != size) - return false; - f->seek(f, -size, KSM_SEEK_CUR); - - // Reset test buffer - memset(buf, 0, size); - - // Read flash in test buffer - if (f->read(f, buf, size) != size) - return false; - f->seek(f, -size, KSM_SEEK_CUR); - - // Check test result - for (size_t i = 0; i < size; i++) - if (buf[i] != (i & 0xff)) - return false; - - return true; -} - -/** - * Test for program memory read/write. - */ -bool kfile_test(uint8_t *buf, size_t _size , uint8_t *save_buf, size_t * save_buf_size) -{ - KFile fd; - int32_t size = _size; - - /* - * Part of test buf size that you would write. - * This var is useded in test 3 to check fd.write - * when write outside size limit. Normaly we want - * perform a write until is space to write, otherwise - * we return. - */ - int32_t len = size/2; - - /* - * Fill in test buffer - */ - for (int i = 0; i < size; i++) - test_buf[i] = (i & 0xff); - - kprintf("Generated test string..\n"); - - /* - * Open fd handler - */ - fd.open(&fd, NULL, 0); - kprintf("Opened fd handler..\n"); - - /* - * If necessary, user could save content, - * for later restore. - */ - if (save_buf != NULL) - { - fd.read(&fd, save_buf, save_buf_size); - kprintf("Saved content..form [%lu] to [%lu]\n", fd.seek_pos, fd.seek_pos + save_buf_size); - } - - /* TEST 1 BEGIN. */ - kprintf("Test 1: write from pos 0 to [%lu]\n", fd.size); - - /* - * Seek to addr 0 - */ - if (fd.seek(&fd, 0, KSM_SEEK_SET) != 0) - goto kfile_test_end; - - kprintf("Seek to [%lu], expected[0]\n", fd.seek_pos); - - /* - * Test flash read/write to address 0..size - */ - if (!Kfile_rwTest(&fd, test_buf, size)) - goto kfile_test_end; - - kprintf("Test 1: ok!\n"); - - /* - * Restore previous read content - */ - if (save_buf != NULL) - { - fd.seek(&fd, 0, KSM_SEEK_SET); - - if (fd.write(&fd, save_buf, save_buf_size) != size) - goto kfile_test_end; - - kprintf("Restore content..form [%lu] to [%lu]\n", fd.seek_pos, fd.seek_pos + save_buf_size); - } - /* TEST 1 END. */ - - /* TEST 2 BEGIN. */ - kprintf("Test 2: write from pos [%lu] to [%lu]\n", fd.size/2 , size); - - /* - * Go to half test size. - */ - fd.seek(&fd, (fd.size/ 2), KSM_SEEK_SET); - - kprintf("Seek to [%lu], expected[%lu]\n", fd.seek_pos, fd.size/2); - - /* - * If necessary, user could save content, - * for later restore. - */ - if (save_buf != NULL) - { - fd.read(&fd, save_buf, save_buf_size); - fd.seek(&fd, -size, KSM_SEEK_CUR); - kprintf("Saved content..form [%lu] to [%lu]\n", fd.seek_pos, fd.seek_pos + save_buf_size); - } - - /* - * Test flash read/write to address FLASHEND/2 ... FLASHEND/2 + size - */ - if (!Kfile_rwTest(&fd, test_buf, size)) - goto kfile_test_end; - - kprintf("Test 2: ok!\n"); - - /* - * Restore previous read content - */ - if (save_buf != NULL) - { - fd.seek(&fd, -size, KSM_SEEK_CUR); - - if (fd.write(&fd, save_buf, save_buf_size) != size) - goto kfile_test_end; - - kprintf("Restore content..form [%lu] to [%lu]\n", fd.seek_pos, fd.seek_pos + save_buf_size); - } - - /* TEST 2 END. */ - - /* TEST 3 BEGIN. */ - kprintf("Test 3: write outside of fd.size limit [%lu]\n", fd.size); - - /* - * Go to the Flash end - */ - fd.seek(&fd, -len, KSM_SEEK_END); - kprintf("Seek to [%lu], expected[%lu]\n", fd.seek_pos, fd.size - len); - - /* - * If necessary, user could save content, - * for later restore. - */ - if (save_buf != NULL) - { - ASSERT(len > save_buf_size); - - fd.read(&fd, save_buf, len); - fd.seek(&fd, -len, KSM_SEEK_CUR); - kprintf("Saved content..form [%lu] to [%lu]\n", fd.seek_pos, fd.seek_pos + len); - } - - /* - * Test flash read/write to address (FLASHEND - size) ... FLASHEND - */ - if (!Kfile_rwTest(&fd, test_buf, size)) - goto kfile_test_end; - - kprintf("Test 3: ok !\n"); - - /* - * Restore previous read content - */ - if (save_buf != NULL) - { - fd.seek(&fd, -len, KSM_SEEK_END); - - if (fd.write(&fd, save_buf, len) != len) - goto kfile_test_end; - - kprintf("Restore content..form [%lu] to [%lu]\n", fd.seek_pos, fd.seek_pos + len); - } - - /* TEST 3 END. */ - - fd.close(&fd); - return true; - -kfile_test_end: - fd.close(&fd); - return false; -} - -#endif /* CONFIG_TEST */ \ No newline at end of file