FAT12 read only file system

Fork of FATFileSystem by mbed official

Committer:
va009039
Date:
Wed Nov 11 19:47:04 2015 +0900
Revision:
7:f9f52d9c0c57
Parent:
6:3c5b3606e019
Child:
8:6c6acf81ff08
first commit F12RFileSystem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 7:f9f52d9c0c57 1 /* mbed Microcontroller Library
va009039 7:f9f52d9c0c57 2 * Copyright (c) 2006-2016 ARM Limited
va009039 7:f9f52d9c0c57 3 *
va009039 7:f9f52d9c0c57 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
va009039 7:f9f52d9c0c57 5 * of this software and associated documentation files (the "Software"), to deal
va009039 7:f9f52d9c0c57 6 * in the Software without restriction, including without limitation the rights
va009039 7:f9f52d9c0c57 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
va009039 7:f9f52d9c0c57 8 * copies of the Software, and to permit persons to whom the Software is
va009039 7:f9f52d9c0c57 9 * furnished to do so, subject to the following conditions:
va009039 7:f9f52d9c0c57 10 *
va009039 7:f9f52d9c0c57 11 * The above copyright notice and this permission notice shall be included in
va009039 7:f9f52d9c0c57 12 * all copies or substantial portions of the Software.
va009039 7:f9f52d9c0c57 13 *
va009039 7:f9f52d9c0c57 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
va009039 7:f9f52d9c0c57 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
va009039 7:f9f52d9c0c57 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
va009039 7:f9f52d9c0c57 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
va009039 7:f9f52d9c0c57 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
va009039 7:f9f52d9c0c57 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
va009039 7:f9f52d9c0c57 20 * SOFTWARE.
va009039 7:f9f52d9c0c57 21 */
va009039 7:f9f52d9c0c57 22 #include <algorithm>
va009039 7:f9f52d9c0c57 23 #include "F12RFileHandle.h"
va009039 7:f9f52d9c0c57 24 #include "fsdebug.h"
va009039 7:f9f52d9c0c57 25
va009039 7:f9f52d9c0c57 26 F12RFileHandle::F12RFileHandle(F12RFileSystem& fs_, uint32_t d):fs(fs_) {
va009039 7:f9f52d9c0c57 27 pos = 0;
va009039 7:f9f52d9c0c57 28 cluster = fs.storage_peek(d + 26, 2);
va009039 7:f9f52d9c0c57 29 file_length = fs.storage_peek(d + 28, 4);
va009039 7:f9f52d9c0c57 30 FS_DBG("cluster=%d", cluster);
va009039 7:f9f52d9c0c57 31 FS_DBG("file_length=%d", file_length);
va009039 7:f9f52d9c0c57 32 }
va009039 7:f9f52d9c0c57 33
va009039 7:f9f52d9c0c57 34 int F12RFileHandle::close() {
va009039 7:f9f52d9c0c57 35 delete this;
va009039 7:f9f52d9c0c57 36 return 0;
va009039 7:f9f52d9c0c57 37 }
va009039 7:f9f52d9c0c57 38
va009039 7:f9f52d9c0c57 39 ssize_t F12RFileHandle::write(const void* buffer, size_t length) {
va009039 7:f9f52d9c0c57 40 return -1;
va009039 7:f9f52d9c0c57 41 }
va009039 7:f9f52d9c0c57 42
va009039 7:f9f52d9c0c57 43 ssize_t F12RFileHandle::read(void* buffer, size_t length) {
va009039 7:f9f52d9c0c57 44 FS_DBG("length=%d", length);
va009039 7:f9f52d9c0c57 45 ssize_t n = 0;
va009039 7:f9f52d9c0c57 46 while(n < length && pos < file_length) {
va009039 7:f9f52d9c0c57 47 uint32_t chunk = std::min(length - n, file_length - pos);
va009039 7:f9f52d9c0c57 48 chunk = std::min(chunk, fs.cluster_tail(pos));
va009039 7:f9f52d9c0c57 49 FS_TEST_ASSERT(cluster >= 2 && cluster < 0xff8);
va009039 7:f9f52d9c0c57 50 fs.storage->storage_read((fs.base_data + cluster - 2)*512 + fs.cluster_head(pos), (uint8_t*)buffer + n, chunk);
va009039 7:f9f52d9c0c57 51 pos += chunk;
va009039 7:f9f52d9c0c57 52 if (fs.cluster_head(pos) == 0) {
va009039 7:f9f52d9c0c57 53 cluster = fs.fat_read(cluster);
va009039 7:f9f52d9c0c57 54 }
va009039 7:f9f52d9c0c57 55 n += chunk;
va009039 7:f9f52d9c0c57 56 }
va009039 7:f9f52d9c0c57 57 return n;
va009039 7:f9f52d9c0c57 58 }
va009039 7:f9f52d9c0c57 59
va009039 7:f9f52d9c0c57 60 int F12RFileHandle::isatty() {
va009039 7:f9f52d9c0c57 61 return 0;
va009039 7:f9f52d9c0c57 62 }
va009039 7:f9f52d9c0c57 63
va009039 7:f9f52d9c0c57 64 off_t F12RFileHandle::lseek(off_t position, int whence) {
va009039 7:f9f52d9c0c57 65 FS_DBG("position=%d whence=%d", (uint32_t)position, whence);
va009039 7:f9f52d9c0c57 66 return -1;
va009039 7:f9f52d9c0c57 67 }
va009039 7:f9f52d9c0c57 68
va009039 7:f9f52d9c0c57 69 int F12RFileHandle::fsync() {
va009039 7:f9f52d9c0c57 70 return 0;
va009039 7:f9f52d9c0c57 71 }
va009039 7:f9f52d9c0c57 72
va009039 7:f9f52d9c0c57 73 off_t F12RFileHandle::flen() {
va009039 7:f9f52d9c0c57 74 FS_DBG("file_length=%d", file_length);
va009039 7:f9f52d9c0c57 75 return file_length;
va009039 7:f9f52d9c0c57 76 }