From 46a0ac02c529e8dd18feff0394ed5709db26dc2b Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 15 Feb 2016 00:19:27 +0200 Subject: extmod/vfs_fat_ffconf: Reusable FatFs module, move from stmhal/ffconf. TODO: Probably merge into vfs_fat_diskio. --- extmod/vfs_fat_ffconf.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ py/py.mk | 1 + stmhal/Makefile | 1 - stmhal/ffconf.c | 77 ---------------------------------------------- unix/Makefile | 3 -- 5 files changed, 83 insertions(+), 81 deletions(-) create mode 100644 extmod/vfs_fat_ffconf.c delete mode 100644 stmhal/ffconf.c diff --git a/extmod/vfs_fat_ffconf.c b/extmod/vfs_fat_ffconf.c new file mode 100644 index 000000000..f8935af75 --- /dev/null +++ b/extmod/vfs_fat_ffconf.c @@ -0,0 +1,82 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2013, 2014 Damien P. George + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "py/mpconfig.h" +#if MICROPY_FSUSERMOUNT + +#include + +#include "py/mpstate.h" +#include "lib/fatfs/ff.h" +#include "lib/fatfs/ffconf.h" +#include "lib/fatfs/diskio.h" +#include "extmod/fsusermount.h" + +STATIC bool check_path(const TCHAR **path, const char *mount_point_str, mp_uint_t mount_point_len) { + if (strncmp(*path, mount_point_str, mount_point_len) == 0) { + if ((*path)[mount_point_len] == '/') { + *path += mount_point_len; + return true; + } else if ((*path)[mount_point_len] == '\0') { + *path = "/"; + return true; + } + } + return false; +} + +// "path" is the path to lookup; will advance this pointer beyond the volume name. +// Returns logical drive number (-1 means invalid path). +int ff_get_ldnumber (const TCHAR **path) { + if (!(*path)) { + return -1; + } + + if (**path != '/') { + #if _FS_RPATH + return ff_CurrVol; + #else + return -1; + #endif + } + + for (size_t i = 0; i < MP_ARRAY_SIZE(MP_STATE_PORT(fs_user_mount)); ++i) { + fs_user_mount_t *vfs = MP_STATE_PORT(fs_user_mount)[i]; + if (vfs != NULL && check_path(path, vfs->str, vfs->len)) { + return i; + } + } + + return -1; +} + +void ff_get_volname(BYTE vol, TCHAR **dest) { + fs_user_mount_t *vfs = MP_STATE_PORT(fs_user_mount)[vol]; + memcpy(*dest, vfs->str, vfs->len); + *dest += vfs->len; +} + +#endif // MICROPY_FSUSERMOUNT diff --git a/py/py.mk b/py/py.mk index 2213e6a0a..bbcd82566 100644 --- a/py/py.mk +++ b/py/py.mk @@ -171,6 +171,7 @@ PY_O_BASENAME = \ ../extmod/modurandom.o \ ../extmod/fsusermount.o \ ../extmod/vfs_fat.o \ + ../extmod/vfs_fat_ffconf.o \ ../extmod/vfs_fat_diskio.o \ ../extmod/vfs_fat_file.o \ ../extmod/moduos_dupterm.o \ diff --git a/stmhal/Makefile b/stmhal/Makefile index 884a40fda..b2dba37b8 100644 --- a/stmhal/Makefile +++ b/stmhal/Makefile @@ -156,7 +156,6 @@ SRC_C = \ builtin_open.c \ sdcard.c \ fatfs_port.c \ - ffconf.c \ lcd.c \ accel.c \ servo.c \ diff --git a/stmhal/ffconf.c b/stmhal/ffconf.c deleted file mode 100644 index 6cd140f22..000000000 --- a/stmhal/ffconf.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * This file is part of the Micro Python project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013, 2014 Damien P. George - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include - -#include "py/mpstate.h" -#include "lib/fatfs/ff.h" -#include "lib/fatfs/ffconf.h" -#include "lib/fatfs/diskio.h" -#include "extmod/fsusermount.h" - -STATIC bool check_path(const TCHAR **path, const char *mount_point_str, mp_uint_t mount_point_len) { - if (strncmp(*path, mount_point_str, mount_point_len) == 0) { - if ((*path)[mount_point_len] == '/') { - *path += mount_point_len; - return true; - } else if ((*path)[mount_point_len] == '\0') { - *path = "/"; - return true; - } - } - return false; -} - -// "path" is the path to lookup; will advance this pointer beyond the volume name. -// Returns logical drive number (-1 means invalid path). -int ff_get_ldnumber (const TCHAR **path) { - if (!(*path)) { - return -1; - } - - if (**path != '/') { - #if _FS_RPATH - return ff_CurrVol; - #else - return -1; - #endif - } - - for (size_t i = 0; i < MP_ARRAY_SIZE(MP_STATE_PORT(fs_user_mount)); ++i) { - fs_user_mount_t *vfs = MP_STATE_PORT(fs_user_mount)[i]; - if (vfs != NULL && check_path(path, vfs->str, vfs->len)) { - return i; - } - } - - return -1; -} - -void ff_get_volname(BYTE vol, TCHAR **dest) { - fs_user_mount_t *vfs = MP_STATE_PORT(fs_user_mount)[vol]; - memcpy(*dest, vfs->str, vfs->len); - *dest += vfs->len; -} diff --git a/unix/Makefile b/unix/Makefile index 18186ec56..729d894a1 100644 --- a/unix/Makefile +++ b/unix/Makefile @@ -147,9 +147,6 @@ SRC_C = \ fatfs_port.c \ $(SRC_MOD) -STMHAL_SRC_C = \ - stmhal/ffconf.c - # Include builtin package manager in the standard build (and coverage) ifeq ($(PROG),micropython) SRC_C += $(BUILD)/_frozen_upip.c -- cgit v1.2.3