@@ -74,6 +74,41 @@ def _fs_write_cb(drv, fs_file, buf, btw, bw):
7474
7575 return  lv .FS_RES .OK 
7676
77+ def  _fs_dir_open_cb (drv , path ):
78+  #print(f"_fs_dir_open_cb for path '{path}'") 
79+  try :
80+  import  os  # for ilistdir() 
81+  return  {'iterator'  : os .ilistdir (path )}
82+  except  Exception  as  e :
83+  print (f"_fs_dir_open_cb exception: { e }  )
84+  return  None 
85+ 
86+ def  _fs_dir_read_cb (drv , lv_fs_dir_t , buf , btr ):
87+  try :
88+  iterator  =  lv_fs_dir_t .__cast__ ()['iterator' ]
89+  nextfile  =  iterator .__next__ ()
90+  #print(f"nextfile: {nextfile}") 
91+  filename  =  nextfile [0 ]
92+  entry_type  =  nextfile [1 ] # Type field 
93+  if  entry_type  ==  0x4000 :
94+  #print(f"{filename} is a directory") 
95+  filename  =  f"/{ filename }  
96+  # Convert filename to bytes with null terminator 
97+  tmp_data_bytes  =  filename .encode () +  b'\x00 ' 
98+  buf .__dereference__ (btr )[0 :len (tmp_data_bytes )] =  tmp_data_bytes 
99+  return  lv .FS_RES .OK 
100+  except  StopIteration :
101+  # Clear buffer and return FS_ERR when iteration ends 
102+  buf .__dereference__ (btr )[0 :1 ] =  b'\x00 '  # Empty string (null byte) 
103+  return  lv .FS_RES .NOT_EX  # Next entry "does not exist" 
104+  except  Exception  as  e :
105+  print (f"_fs_dir_read_cb exception: { e }  )
106+  return  lv .FS_RES .UNKNOWN 
107+ 
108+ def  _fs_dir_close_cb (drv , lv_fs_dir_t ):
109+  #print(f"_fs_dir_close_cb called") 
110+  # No need to cleanup the iterator so nothing to do 
111+  return  lv .FS_RES .OK 
77112
78113def  fs_register (fs_drv , letter , cache_size = 500 ):
79114
@@ -85,6 +120,9 @@ def fs_register(fs_drv, letter, cache_size=500):
85120 fs_drv .seek_cb  =  _fs_seek_cb 
86121 fs_drv .tell_cb  =  _fs_tell_cb 
87122 fs_drv .close_cb  =  _fs_close_cb 
123+  fs_drv .dir_open_cb  =  _fs_dir_open_cb 
124+  fs_drv .dir_read_cb  =  _fs_dir_read_cb 
125+  #fs_drv.dir_close_cb = _fs_dir_close_cb 
88126
89127 if  cache_size  >=  0 :
90128 fs_drv .cache_size  =  cache_size 
0 commit comments