# Original author: mhepp(https://forum.lvgl.io/u/mhepp/summary) # Copyright (c) 2024 - 2025 Kevin G. Schlosser # Added directory support, upstreamed at https://github.com/lvgl-micropython/lvgl_micropython/issues/398 import lvgl as lv import struct def _fs_open_cb(drv, path, mode): if mode == lv.FS_MODE.WR: p_mode = 'wb' elif mode == lv.FS_MODE.RD: p_mode = 'rb' elif mode == lv.FS_MODE.WR | lv.FS_MODE.RD: p_mode = 'rb+' else: raise RuntimeError("fs_open_callback() - open mode error, %s is invalid mode" % mode) try: f = open(path, p_mode) except OSError as e: raise RuntimeError("fs_open_callback(%s) exception: %s" % (path, e)) return {'file' : f, 'path': path} def _fs_close_cb(drv, fs_file): try: fs_file.__cast__()['file'].close() except OSError as e: raise RuntimeError("fs_close_callback(%s) exception: %s" % (fs_file.__cast__()['path'], e)) return lv.FS_RES.OK def _fs_read_cb(drv, fs_file, buf, btr, br): try: tmp_data = fs_file.__cast__()['file'].read(btr) buf.__dereference__(btr)[0:len(tmp_data)] = tmp_data br.__dereference__(4)[0:4] = struct.pack("= 0: fs_drv.cache_size = cache_size fs_drv.register()