From ebbf0fbbe61dca9c9ee594ddfe7f0320374c5c42 Mon Sep 17 00:00:00 2001 From: Luxferre Date: Mon, 22 Dec 2025 23:54:41 +0200 Subject: [PATCH] implemented microSD mount/unmount functions --- README.md | 2 ++ deck/fs.py | 24 +++++++++++++++++++++++- tdeckboot.py | 5 +++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0ac3d9b..bada79e 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,8 @@ Exports the following functions: - `lock_rootfs()`: make the device root filesystem read-only (does nothing on desktop) - `stat(path)` (aka `du(path)`): alias to `os.stat` but returning the stats as a dictionary - `statvfs(path)` (aka `df(path)`): alias to `os.statvfs` but returning the stats as a dictionary +- `mount_sd(path='/sd', readonly=False)`: mount the inserted microSD card (T-Deck only, must be FAT32) +- `umount_sd(path='/sd')`: unmount the inserted microSD card (T-Deck only) The following `deck.fs` functions are direct aliases to the corresponding `os` call counterparts: diff --git a/deck/fs.py b/deck/fs.py index 1f84133..c672103 100644 --- a/deck/fs.py +++ b/deck/fs.py @@ -5,7 +5,7 @@ import os MCU_STORAGE = False try: - import storage + import storage, sdcardio, board MCU_STORAGE = True except: pass @@ -18,6 +18,28 @@ def lock_rootfs(): if MCU_STORAGE: storage.remount("/", readonly=True) +def mount_sd(path='/sd', readonly=False): + sd_ok = True + if MCU_STORAGE: + try: + sdcard = sdcardio.SDCard(board.SPI(), board.SDCARD_CS) + vfs = storage.VfsFat(sdcard) + storage.mount(vfs, path, readonly=readonly) + sd_ok = True + except: + sd_ok = False + return sd_ok + +def umount_sd(path='/sd'): + sd_ok = True + if MCU_STORAGE: + try: + storage.umount(path) + sd_ok = True + except: + sd_ok = False + return sd_ok + # TODO: switch to buffered copying to avoid RAM overflow def copy(p1, p2): with open(p1, 'rb') as f1: diff --git a/tdeckboot.py b/tdeckboot.py index 8140091..2d2f44f 100644 --- a/tdeckboot.py +++ b/tdeckboot.py @@ -3,10 +3,11 @@ # Usage: from tdeckboot import * # Created by Luxferre in 2025, released into public domain -from deck.fs import unlock_rootfs, lock_rootfs, env, rnd, sync -from deck.fs import du, df, sep, pwd, ls, md, cd, rd, rm, mv, cp +from deck.fs import unlock_rootfs, lock_rootfs, mount_sd, umount_sd, env, rnd +from deck.fs import du, df, sep, pwd, ls, md, cd, rd, rm, mv, cp, sync from deck.input import input, input_multi from deck.pager import print_paged, term_size +# from deck.hwinfo import from app.ed import edit, view try: from deck import net