@@ -30,10 +30,10 @@ static const char *const TAG = "STORAGE";
3030/* *
3131 * Lists files and directories at path.
3232 */
33- static void listFiles (const char *const dirname)
33+ static void listFiles (const char *const dirname, const std::shared_ptr<fs::FS> fs )
3434{
3535 std::cout << " Directory: '" << dirname << " '" << std::endl;
36- File root = FFat. open (dirname);
36+ File root = fs-> open (dirname);
3737 if (!root || !root.isDirectory ())
3838 {
3939 ESP_LOGE (TAG, " Error: '%s' is not a directory!\n " , dirname);
@@ -75,6 +75,7 @@ class FileSystemSwitcher
7575 void requestState (const bool fileSystemActive)
7676 {
7777 requestFileSystemActive = fileSystemActive;
78+ ESP_LOGD (TAG, " request new state: %s" , fileSystemActive ? " true" : " false" );
7879 stateChangeRequested.notify_all ();
7980 }
8081
@@ -88,6 +89,7 @@ class FileSystemSwitcher
8889 while (true )
8990 {
9091 std::unique_lock fs_state_lock{fileSystemState_mutex};
92+ ESP_LOGD (TAG, " waiting for state change request" );
9193 stateChangeRequested.wait (fs_state_lock,
9294 [this ]() { return requestFileSystemActive != fileSystemIsActive; });
9395 if (fileSystemIsActive = requestFileSystemActive)
@@ -96,14 +98,14 @@ class FileSystemSwitcher
9698 usbMsc.mediaPresent (false );
9799 FFat.end (); // invalidate cache
98100 assert (FFat.begin ()); // update data
99- listFiles (" /" );
100101 }
101102 else
102103 {
103104 ESP_LOGD (TAG, " unmount FS" );
104105 FFat.end (); // flush and unmount
105106 usbMsc.mediaPresent (true );
106107 }
108+ stateChanged.notify_all ();
107109 }
108110 }
109111
@@ -228,3 +230,9 @@ void Storage::end()
228230 usbIsRunning = false ;
229231 FFat.end ();
230232}
233+
234+ void Storage::test ()
235+ {
236+ auto fs_p = fileSystemSwitcher.getFileSystem_locking ();
237+ listFiles (" /" , fs_p);
238+ }
0 commit comments