@ -367,7 +367,6 @@ static const char restartWebsite[] PROGMEM = "<p>Der Tonuino wird neu gestartet.
SPIClass spiSD ( HSPI ) ;
SPIClass spiSD ( HSPI ) ;
TaskHandle_t mp3Play ;
TaskHandle_t mp3Play ;
TaskHandle_t rfid ;
TaskHandle_t rfid ;
TaskHandle_t fileTaskHandle ;
# ifdef NEOPIXEL_ENABLE
# ifdef NEOPIXEL_ENABLE
TaskHandle_t LED ;
TaskHandle_t LED ;
# endif
# endif
@ -649,12 +648,8 @@ bool pathValid(const char *_fileItem) {
* @ param levels
* @ param levels
*/
*/
char fileNameBuf [ 255 ] ;
char fileNameBuf [ 255 ] ;
bool notifyOverWebsocket = true ;
//FIXME: This function blocks the websocket connection
void parseSDFileList ( fs : : FS & fs , const char * dirname , const char * parent , uint8_t levels ) {
void parseSDFileList ( fs : : FS & fs , const char * dirname , const char * parent , uint8_t levels ) {
// i/o is timing critical keep all stuff running
esp_task_wdt_reset ( ) ;
esp_task_wdt_reset ( ) ;
yield ( ) ;
yield ( ) ;
@ -687,11 +682,13 @@ void parseSDFileList(fs::FS &fs, const char * dirname, const char * parent, uint
}
}
strncpy ( fileNameBuf , ( char * ) file . name ( ) , sizeof ( fileNameBuf ) / sizeof ( fileNameBuf [ 0 ] ) ) ;
strncpy ( fileNameBuf , ( char * ) file . name ( ) , sizeof ( fileNameBuf ) / sizeof ( fileNameBuf [ 0 ] ) ) ;
// we have a folder
// we have a folder
if ( file . isDirectory ( ) ) {
if ( file . isDirectory ( ) ) {
esp_task_wdt_reset ( ) ;
esp_task_wdt_reset ( ) ;
if ( pathValid ( fileNameBuf ) ) {
if ( pathValid ( fileNameBuf ) ) {
sendWebsocketData ( 0 , 31 ) ;
appendNodeToJSONFile ( SD , DIRECTORY_INDEX_FILE , fileNameBuf , parent , " folder " ) ;
appendNodeToJSONFile ( SD , DIRECTORY_INDEX_FILE , fileNameBuf , parent , " folder " ) ;
// check for next subfolder
// check for next subfolder
@ -701,19 +698,19 @@ void parseSDFileList(fs::FS &fs, const char * dirname, const char * parent, uint
}
}
// we have a file
// we have a file
} else {
} else {
if ( fileValid ( fileNameBuf ) ) {
if ( fileValid ( fileNameBuf ) ) {
appendNodeToJSONFile ( SD , DIRECTORY_INDEX_FILE , fileNameBuf , parent , " file " ) ;
appendNodeToJSONFile ( SD , DIRECTORY_INDEX_FILE , fileNameBuf , parent , " file " ) ;
}
}
}
}
vTaskDelay ( portTICK_PERIOD_MS * 50 ) ;
file = root . openNextFile ( ) ;
file = root . openNextFile ( ) ;
// i/o is timing critical keep all stuff running
// i/o is timing critical keep all stuff running
esp_task_wdt_reset ( ) ;
esp_task_wdt_reset ( ) ;
}
}
}
}
// TODO: maybe this is not save with asyncWebserver
uint8_t runFileIndexing = 0 ;
uint8_t fileIndexingDone = 0 ;
/**
/**
* Public function for creating file index json on SD - Card .
* Public function for creating file index json on SD - Card .
* It notifies the user client via websockets when the indexing
* It notifies the user client via websockets when the indexing
@ -727,19 +724,11 @@ void createJSONFileList(){
sendWebsocketData ( 0 , 30 ) ;
sendWebsocketData ( 0 , 30 ) ;
}
}
void fileHandlingTask ( void * arguments ) {
while ( true ) {
if ( runFileIndexing ) {
runFileIndexing = 0 ;
//createJSONFileList();
fileIndexingDone = 1 ;
}
void fileHandlingTask ( void * arguments ) {
createJSONFileList ( ) ;
esp_task_wdt_reset ( ) ;
esp_task_wdt_reset ( ) ;
vTaskDelay ( portTICK_PERIOD_MS * 150 ) ;
}
vTaskDelete ( NULL ) ;
}
}
// Measures voltage of a battery as per interval or after bootup (after allowing a few seconds to settle down)
// Measures voltage of a battery as per interval or after bootup (after allowing a few seconds to settle down)
@ -3028,6 +3017,7 @@ bool getWifiEnableStatusFromNVS(void) {
prefsSettings . putUInt ( " enableWifi " , 1 ) ;
prefsSettings . putUInt ( " enableWifi " , 1 ) ;
wifiStatus = 1 ;
wifiStatus = 1 ;
}
}
return wifiStatus ;
return wifiStatus ;
}
}
@ -3315,9 +3305,17 @@ bool processJsonRequest(char *_serialJson) {
sendWebsocketData ( 0 , 20 ) ;
sendWebsocketData ( 0 , 20 ) ;
return false ;
return false ;
} else if ( doc . containsKey ( " refreshFileList " ) ) {
} else if ( doc . containsKey ( " refreshFileList " ) ) {
//createJSONFileList();
runFileIndexing = 1 ;
createJSONFileList ( ) ;
//TODO: we need a semaphore or mutex here to prevent
// a call when the task is still running
xTaskCreate (
fileHandlingTask , /* Task function. */
" TaskTwo " , /* String with name of task. */
10000 , /* Stack size in bytes. */
NULL , /* Parameter passed as input of the task */
1 , /* Priority of the task. */
NULL ) ; /* Task handle. */
}
}
return true ;
return true ;
@ -3342,7 +3340,6 @@ void sendWebsocketData(uint32_t client, uint8_t code) {
object [ " refreshFileList " ] = " ready " ;
object [ " refreshFileList " ] = " ready " ;
} else if ( code = = 31 ) {
} else if ( code = = 31 ) {
object [ " indexingState " ] = fileNameBuf ;
object [ " indexingState " ] = fileNameBuf ;
esp_task_wdt_reset ( ) ;
}
}
char jBuf [ 255 ] ;
char jBuf [ 255 ] ;
@ -3353,7 +3350,6 @@ void sendWebsocketData(uint32_t client, uint8_t code) {
} else {
} else {
ws . printf ( client , jBuf ) ;
ws . printf ( client , jBuf ) ;
}
}
notifyOverWebsocket = true ;
}
}
@ -3929,18 +3925,6 @@ void setup() {
1 /* Core where the task should run */
1 /* Core where the task should run */
) ;
) ;
/**
* SD Card File Indexing Task
*/
xTaskCreatePinnedToCore (
fileHandlingTask , /* Function to implement the task */
" fileHandlingTask " , /* Name of the task */
2000 , /* Stack size in words */
NULL , /* Task input parameter */
3 , /* Priority of the task */
& fileTaskHandle , /* Task handle. */
1 /* Core where the task should run */
) ;
//esp_sleep_enable_ext0_wakeup((gpio_num_t) DREHENCODER_BUTTON, 0);
//esp_sleep_enable_ext0_wakeup((gpio_num_t) DREHENCODER_BUTTON, 0);
@ -3979,7 +3963,6 @@ void setup() {
Serial . print ( F ( " Free heap: " ) ) ;
Serial . print ( F ( " Free heap: " ) ) ;
Serial . println ( ESP . getFreeHeap ( ) ) ;
Serial . println ( ESP . getFreeHeap ( ) ) ;
}
}
@ -3997,13 +3980,6 @@ void loop() {
sleepHandler ( ) ;
sleepHandler ( ) ;
deepSleepManager ( ) ;
deepSleepManager ( ) ;
rfidPreferenceLookupHandler ( ) ;
rfidPreferenceLookupHandler ( ) ;
/*
if ( fileIndexingDone ) {
fileIndexingDone = 0 ;
sendWebsocketData ( 0 , 30 ) ;
} */
if ( wifiManager ( ) = = WL_CONNECTED ) {
if ( wifiManager ( ) = = WL_CONNECTED ) {
# ifdef MQTT_ENABLE
# ifdef MQTT_ENABLE
if ( enableMqtt ) {
if ( enableMqtt ) {