# deck.fs: FS interaction helpers (WIP) # Created by Luxferre in 2025, released into public domain import os MCU_STORAGE = False try: import storage, sdcardio, board MCU_STORAGE = True except: pass def unlock_rootfs(): if MCU_STORAGE: storage.remount("/", readonly=False) 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 def copy(source_path, dest_path, buffer_size=8192): """ Copies a file from source_path to dest_path """ try: with open(source_path, "rb") as src: with open(dest_path, "wb") as dst: while True: # Read a chunk from the source buffer = src.read(buffer_size) if not buffer: break # Write the chunk to the destination dst.write(buffer) return True except OSError as e: print(f"Error copying file: {e}") return False except Exception as e: print(f"An unexpected error occurred: {e}") return False cp = copy # shortcut export # Some shortcut export bindings to corresponding os functions sep = pathsep = os.sep cwd = pwd = os.getcwd ls = listdir = os.listdir md = mkdir = os.mkdir cd = chdir = os.chdir rd = rmdir = os.rmdir rm = remove = os.remove mv = rename = move = os.rename try: sync = os.sync except: def sync(): pass env = getenv = os.getenv rnd = urandom = os.urandom # adapted statistics methods # for a file def stat(path): st_mode, _, _, _, _, _, \ st_size, st_atime, st_mtime, st_ctime = os.stat(path) return { 'mode': st_mode, 'size': st_size, 'atime': st_atime, 'mtime': st_mtime, 'ctime': st_ctime } # for a filesystem def statvfs(path): f_bsize, f_frsize, f_frags, f_bfree, f_bavail, f_files, \ f_ffree, f_favail, f_flag, f_namemax = os.statvfs(path) return { 'block_size': f_bsize, 'fragment_size': f_frsize, 'fragments': f_frags, 'blocks_free': f_bfree, 'blocks_avail': f_bavail, 'inodes': f_files, 'inodes_free': f_ffree, 'inodes_avail': f_favail, 'mount_flags': f_flag, 'max_name_len': f_namemax } du = stat # shortcut export df = statvfs # shortcut export