diff --git a/src/Led.cpp b/src/Led.cpp index 03fb01c35..23d8bd5f7 100644 --- a/src/Led.cpp +++ b/src/Led.cpp @@ -1087,3 +1087,16 @@ void Led_SetButtonLedsEnabled(boolean value) { return AnimationReturnType(animationActive, animationDelay, refresh); } #endif + +void Led_TaskPause(void) { + #ifdef NEOPIXEL_ENABLE + vTaskSuspend(Led_TaskHandle); + FastLED.clear(true); + #endif +} + +void Led_TaskResume(void) { + #ifdef NEOPIXEL_ENABLE + vTaskResume(Led_TaskHandle); + #endif +} diff --git a/src/Led.h b/src/Led.h index 96ccb7e83..7ae59d95e 100644 --- a/src/Led.h +++ b/src/Led.h @@ -63,4 +63,6 @@ void Led_SetPause(boolean value); void Led_ResetToInitialBrightness(void); void Led_ResetToNightBrightness(void); uint8_t Led_GetBrightness(void); -void Led_SetBrightness(uint8_t value); \ No newline at end of file +void Led_SetBrightness(uint8_t value); +void Led_TaskPause(void); +void Led_TaskResume(void); diff --git a/src/Rfid.h b/src/Rfid.h index 4c34cc499..33070497b 100644 --- a/src/Rfid.h +++ b/src/Rfid.h @@ -18,5 +18,7 @@ extern char gCurrentRfidTagId[cardIdStringSize]; void Rfid_Init(void); void Rfid_Cyclic(void); void Rfid_Exit(void); +void Rfid_TaskPause(void); +void Rfid_TaskResume(void); void Rfid_WakeupCheck(void); void Rfid_PreferenceLookupHandler(void); diff --git a/src/RfidCommon.cpp b/src/RfidCommon.cpp index 90e237762..e5221947e 100644 --- a/src/RfidCommon.cpp +++ b/src/RfidCommon.cpp @@ -17,9 +17,14 @@ char gCurrentRfidTagId[cardIdStringSize] = ""; // No crap here as otherwise it c char gOldRfidTagId[cardIdStringSize] = "X"; // Init with crap #endif +// check if we have RFID-reader enabled +#if defined (RFID_READER_TYPE_MFRC522_SPI) || defined (RFID_READER_TYPE_MFRC522_I2C) || defined(RFID_READER_TYPE_PN5180) + #define RFID_READER_ENABLED 1 +#endif + // Tries to lookup RFID-tag-string in NVS and extracts parameter from it if found void Rfid_PreferenceLookupHandler(void) { - #if defined (RFID_READER_TYPE_MFRC522_SPI) || defined (RFID_READER_TYPE_MFRC522_I2C) || defined(RFID_READER_TYPE_PN5180) + #if defined (RFID_READER_ENABLED) BaseType_t rfidStatus; char rfidTagId[cardIdStringSize]; char _file[255]; @@ -98,3 +103,19 @@ void Rfid_PreferenceLookupHandler(void) { } #endif } + +#if defined (RFID_READER_ENABLED) + extern TaskHandle_t rfidTaskHandle; +#endif + +void Rfid_TaskPause(void) { + #if defined (RFID_READER_ENABLED) + vTaskSuspend(rfidTaskHandle); + #endif +} +void Rfid_TaskResume(void) { + #if defined (RFID_READER_ENABLED) + vTaskResume(rfidTaskHandle); + #endif +} + diff --git a/src/System.h b/src/System.h index 0e7dacce0..480c866c9 100644 --- a/src/System.h +++ b/src/System.h @@ -4,8 +4,6 @@ extern Preferences gPrefsRfid; extern Preferences gPrefsSettings; extern TaskHandle_t AudioTaskHandle; -extern TaskHandle_t rfidTaskHandle; -extern TaskHandle_t Led_TaskHandle; void System_Init(void); diff --git a/src/Web.cpp b/src/Web.cpp index 71de608fc..1be293af1 100644 --- a/src/Web.cpp +++ b/src/Web.cpp @@ -827,11 +827,9 @@ void explorerHandleFileStorageTask(void *parameter) { uploadFile = gFSystem.open((char *)parameter, "w"); // pause some tasks to get more free CPU time for the upload - #ifdef NEOPIXEL_ENABLE - vTaskSuspend(Led_TaskHandle); - #endif vTaskSuspend(AudioTaskHandle); - vTaskSuspend(rfidTaskHandle); + Led_TaskPause(); + Rfid_TaskPause(); for (;;) { @@ -861,11 +859,9 @@ void explorerHandleFileStorageTask(void *parameter) { if (lastUpdateTimestamp + maxUploadDelay * 1000 < millis()) { Log_Println(webTxCanceled, LOGLEVEL_ERROR); // resume the paused tasks - #ifdef NEOPIXEL_ENABLE - vTaskResume(Led_TaskHandle); - #endif + Led_TaskResume(); vTaskResume(AudioTaskHandle); - vTaskResume(rfidTaskHandle); + Rfid_TaskResume(); // just delete task without signaling (abort) vTaskDelete(NULL); return; @@ -880,11 +876,9 @@ void explorerHandleFileStorageTask(void *parameter) { #endif } // resume the paused tasks - #ifdef NEOPIXEL_ENABLE - vTaskResume(Led_TaskHandle); - #endif + Led_TaskResume(); vTaskResume(AudioTaskHandle); - vTaskResume(rfidTaskHandle); + Rfid_TaskResume(); // send signal to upload function to terminate xQueueSend(explorerFileUploadStatusQueue, &value, 0); vTaskDelete(NULL);