diff --git a/src/main.cpp b/src/main.cpp index 0b2c635..fee8cd5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -107,7 +107,7 @@ void loop() { if (intervalElapsed(currentMillis, lastAutoSetBambuAmsTime, autoSetBambuAmsInterval)) { - if (hasReadRfidTag == 0) + if (nfcReaderState == IDLE) { lastAutoSetBambuAmsTime = currentMillis; oledShowMessage("Auto Set " + String(autoSetBambuAmsCounter - autoAmsCounter) + "s"); @@ -141,7 +141,7 @@ void loop() { // Ausgabe der Waage auf Display if(pauseMainTask == 0) { - if (mainTaskWasPaused || (weight != lastWeight && hasReadRfidTag == 0 && (!autoSendToBambu || autoSetToBambuSpoolId == 0))) + if (mainTaskWasPaused || (weight != lastWeight && nfcReaderState == IDLE && (!autoSendToBambu || autoSetToBambuSpoolId == 0))) { (weight < 2) ? ((weight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(weight); } @@ -154,7 +154,7 @@ void loop() { // Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird - if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag < 3) + if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState < WRITING) { lastWeightReadTime = currentMillis; @@ -190,7 +190,8 @@ void loop() { } // reset weight counter after writing tag - if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag > 1) + // TBD: what exactly is the logic behind this? + if (currentMillis - lastWeightReadTime >= weightReadInterval && nfcReaderState != IDLE && nfcReaderState != READ_SUCCESS) { weigthCouterToApi = 0; } @@ -198,7 +199,7 @@ void loop() { lastWeight = weight; // Wenn ein Tag mit SM id erkannte wurde und der Waage Counter anspricht an SM Senden - if (spoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && hasReadRfidTag == 1) { + if (spoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && nfcReaderState == READ_SUCCESS) { oledShowIcon("loading"); if (updateSpoolWeight(spoolId, weight)) { diff --git a/src/nfc.cpp b/src/nfc.cpp index 65966c5..e81f576 100644 --- a/src/nfc.cpp +++ b/src/nfc.cpp @@ -18,7 +18,7 @@ String spoolId = ""; String nfcJsonData = ""; volatile bool pauseBambuMqttTask = false; -volatile uint8_t hasReadRfidTag = 0; +volatile nfcReaderStateType nfcReaderState = IDLE; // 0 = nicht gelesen // 1 = erfolgreich gelesen // 2 = fehler beim Lesen @@ -242,7 +242,7 @@ void writeJsonToTag(void *parameter) { Serial.println("Erstelle NDEF-Message..."); Serial.println(payload); - hasReadRfidTag = 3; + nfcReaderState = WRITING; vTaskSuspend(RfidReaderTask); vTaskDelay(50 / portTICK_PERIOD_MS); @@ -288,7 +288,7 @@ void writeJsonToTag(void *parameter) { //oledShowMessage("NFC-Tag written"); oledShowIcon("success"); vTaskDelay(1000 / portTICK_PERIOD_MS); - hasReadRfidTag = 5; + nfcReaderState = WRITE_SUCCESS; // aktualisieren der Website wenn sich der Status ändert sendNfcData(nullptr); pauseBambuMqttTask = false; @@ -310,7 +310,7 @@ void writeJsonToTag(void *parameter) { Serial.println("Fehler beim Schreiben der NDEF-Message auf den Tag"); oledShowIcon("failed"); vTaskDelay(2000 / portTICK_PERIOD_MS); - hasReadRfidTag = 4; + nfcReaderState = WRITE_ERROR; } } else @@ -318,7 +318,7 @@ void writeJsonToTag(void *parameter) { Serial.println("Fehler: Kein Tag zu schreiben gefunden."); oledShowMessage("No NFC-Tag found"); vTaskDelay(2000 / portTICK_PERIOD_MS); - hasReadRfidTag = 0; + nfcReaderState = IDLE; } sendWriteResult(nullptr, success); @@ -334,7 +334,7 @@ void startWriteJsonToTag(const char* payload) { char* payloadCopy = strdup(payload); // Task nicht mehrfach starten - if (hasReadRfidTag != 3) { + if (nfcReaderState != WRITING) { // Erstelle die Task xTaskCreate( writeJsonToTag, // Task-Funktion @@ -351,7 +351,7 @@ void scanRfidTask(void * parameter) { Serial.println("RFID Task gestartet"); for(;;) { // Wenn geschrieben wird Schleife aussetzen - if (hasReadRfidTag != 3) + if (nfcReaderState != WRITING) { yield(); @@ -363,12 +363,12 @@ void scanRfidTask(void * parameter) { foundNfcTag(nullptr, success); - if (success && hasReadRfidTag != 1) + if (success && nfcReaderState != READ_SUCCESS) { // Display some basic information about the card Serial.println("Found an ISO14443A card"); - hasReadRfidTag = 6; + nfcReaderState = READING; oledShowIcon("transfer"); vTaskDelay(500 / portTICK_PERIOD_MS); @@ -406,11 +406,11 @@ void scanRfidTask(void * parameter) { { oledShowMessage("NFC-Tag unknown"); vTaskDelay(2000 / portTICK_PERIOD_MS); - hasReadRfidTag = 2; + nfcReaderState = READ_ERROR; } else { - hasReadRfidTag = 1; + nfcReaderState = READ_SUCCESS; } free(data); @@ -418,7 +418,7 @@ void scanRfidTask(void * parameter) { else { oledShowMessage("NFC-Tag read error"); - hasReadRfidTag = 2; + nfcReaderState = READ_ERROR; } } else @@ -427,9 +427,9 @@ void scanRfidTask(void * parameter) { } } - if (!success && hasReadRfidTag > 0) + if (!success && nfcReaderState != IDLE) { - hasReadRfidTag = 0; + nfcReaderState = IDLE; //uidString = ""; nfcJsonData = ""; Serial.println("Tag entfernt"); diff --git a/src/nfc.h b/src/nfc.h index 3610050..342f6fc 100644 --- a/src/nfc.h +++ b/src/nfc.h @@ -3,6 +3,16 @@ #include +typedef enum{ + IDLE, + READING, + READ_SUCCESS, + READ_ERROR, + WRITING, + WRITE_SUCCESS, + WRITE_ERROR +} nfcReaderStateType; + void startNfc(); void scanRfidTask(void * parameter); void startWriteJsonToTag(const char* payload); @@ -10,7 +20,9 @@ void startWriteJsonToTag(const char* payload); extern TaskHandle_t RfidReaderTask; extern String nfcJsonData; extern String spoolId; -extern volatile uint8_t hasReadRfidTag; +extern volatile nfcReaderStateType nfcReaderState; extern volatile bool pauseBambuMqttTask; + + #endif \ No newline at end of file diff --git a/src/website.cpp b/src/website.cpp index 18ac882..dd4a760 100644 --- a/src/website.cpp +++ b/src/website.cpp @@ -22,7 +22,7 @@ AsyncWebServer server(webserverPort); AsyncWebSocket ws("/ws"); uint8_t lastSuccess = 0; -uint8_t lastHasReadRfidTag = 0; +nfcReaderStateType lastnfcReaderState = IDLE; void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { @@ -139,34 +139,31 @@ void foundNfcTag(AsyncWebSocketClient *client, uint8_t success) { } void sendNfcData(AsyncWebSocketClient *client) { - if (lastHasReadRfidTag == hasReadRfidTag) return; - if (hasReadRfidTag == 0) { - ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}"); + if (lastnfcReaderState == nfcReaderState) return; + // TBD: Why is there no status for reading the tag? + switch(nfcReaderState){ + case IDLE: + ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}"); + break; + case READ_SUCCESS: + ws.textAll("{\"type\":\"nfcData\", \"payload\":" + nfcJsonData + "}"); + break; + case READ_ERROR: + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Empty Tag or Data not readable\"}}"); + break; + case WRITING: + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Schreibe Tag...\"}}"); + break; + case WRITE_SUCCESS: + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Tag erfolgreich geschrieben\"}}"); + break; + case WRITE_ERROR: + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Error writing to Tag\"}}"); + break; + case DEFAULT: + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Something went wrong\"}}"); } - else if (hasReadRfidTag == 1) { - ws.textAll("{\"type\":\"nfcData\", \"payload\":" + nfcJsonData + "}"); - } - else if (hasReadRfidTag == 2) - { - ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Empty Tag or Data not readable\"}}"); - } - else if (hasReadRfidTag == 3) - { - ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Schreibe Tag...\"}}"); - } - else if (hasReadRfidTag == 4) - { - ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Error writing to Tag\"}}"); - } - else if (hasReadRfidTag == 5) - { - ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Tag erfolgreich geschrieben\"}}"); - } - else - { - ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Something went wrong\"}}"); - } - lastHasReadRfidTag = hasReadRfidTag; + lastnfcReaderState = nfcReaderState; } void sendAmsData(AsyncWebSocketClient *client) {