Compare commits
9 Commits
v2.0.0-bet
...
v2.0.0-bet
Author | SHA1 | Date | |
---|---|---|---|
458bd2e67b | |||
e6a5cb29a9 | |||
6502bb7185 | |||
63fafa2463 | |||
f664e85933 | |||
7bf9868d79 | |||
b9e488d675 | |||
2e3fc19741 | |||
4d84169b29 |
312
CHANGELOG.md
312
CHANGELOG.md
@@ -1,5 +1,317 @@
|
||||
# Changelog
|
||||
|
||||
## [2.0.0-beta9] - 2025-08-30
|
||||
### Breaking Changes
|
||||
- enhance commit categorization for breaking changes
|
||||
- Handling of Spools with Tags from Vendors. fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag
|
||||
|
||||
### Added
|
||||
- add handling for successful NFC tag writes to send weight to Spoolman without auto-sending to Bambu
|
||||
- implement robust page reading with error recovery for NFC tags
|
||||
- enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection
|
||||
- implement robust page reading and safe tag detection with error recovery
|
||||
- add Manufacturer Tags support documentation in German and English
|
||||
- add display delay for vendor, filament, and spool creation processes
|
||||
- add progress bar updates for vendor and filament creation processes
|
||||
- update vendor and filament ID handling to use NULL and add delays for stability
|
||||
- add delay to ensure proper setting of vendor and filament IDs after API state changes
|
||||
- enhance NDEF decoding with detailed validation and debugging output
|
||||
- enhance NDEF decoding to validate structure and extract JSON payload
|
||||
- add logging for decoded JSON data in NFC processing
|
||||
- implement filament and spool creation in Spoolman API
|
||||
- Add JSON structure comments for filament and spool creation
|
||||
- Add vendor and filament management to API; implement recycling factory handling in NFC
|
||||
|
||||
### Changed
|
||||
- update platformio.ini for beta version v2.0.0-beta9
|
||||
- update changelog and header for version v2.0.0-beta8
|
||||
- update platformio.ini for beta version v2.0.0-beta8
|
||||
- update changelog and header for version v2.0.0-beta7
|
||||
- update platformio.ini for beta version v2.0.0-beta7
|
||||
- update changelog and header for version v2.0.0-beta6
|
||||
- update changelog and header for version v2.0.0-beta6
|
||||
- update platformio.ini for beta version v2.0.0-beta6
|
||||
- update changelog and header for version v2.0.0-beta5
|
||||
- update platformio.ini for beta version v2.0.0-beta5
|
||||
- update changelog and header for version v2.0.0-beta4
|
||||
- update platformio.ini for beta version v2.0.0-beta4
|
||||
- update changelog and header for version v2.0.0-beta3
|
||||
- update platformio.ini for beta version v2.0.0-beta3
|
||||
- update createVendor and checkVendor functions to accept JsonDocument payload
|
||||
- update changelog and header for version v2.0.0-beta2
|
||||
- update platformio.ini for beta version v2.0.0-beta2
|
||||
- clarify product URL description for Manufacturer Tags in German and English documentation
|
||||
- update changelog and header for version v2.0.0-beta1
|
||||
- update platformio.ini for beta version v2.0.0-beta1
|
||||
- update version to 2.0.0 in platformio.ini
|
||||
- update changelog and header for version v1.5.12-beta18
|
||||
- update platformio.ini for beta version v1.5.12-beta18
|
||||
- update changelog and header for version v1.5.12-beta17
|
||||
- update platformio.ini for beta version v1.5.12-beta17
|
||||
- optimize page limit detection and remove redundant verification code
|
||||
- update changelog and header for version v1.5.12-beta16
|
||||
- update platformio.ini for beta version v1.5.12-beta16
|
||||
- Refactor NFC interface handling and improve error diagnostics
|
||||
- update changelog and header for version v1.5.12-beta15
|
||||
- update platformio.ini for beta version v1.5.12-beta15
|
||||
- enhance NFC write operation diagnostics and improve error handling
|
||||
- enhance NFC write operation handling and prevent tag operations during write
|
||||
- update changelog and header for version v1.5.12-beta14
|
||||
- update platformio.ini for beta version v1.5.12-beta14
|
||||
- optimize JSON payload structure and enhance NFC tag validation process
|
||||
- update changelog and header for version v1.5.12-beta13
|
||||
- update platformio.ini for beta version v1.5.12-beta13
|
||||
- reorganize clearUserDataArea function for improved clarity and safety
|
||||
- update changelog and header for version v1.5.12-beta12
|
||||
- update platformio.ini for beta version v1.5.12-beta12
|
||||
- update changelog and header for version v1.5.12-beta11
|
||||
- update platformio.ini for beta version v1.5.12-beta11
|
||||
- update changelog and header for version v1.5.12-beta10
|
||||
- update platformio.ini for beta version v1.5.12-beta10
|
||||
- streamline task creation in checkVendor and checkFilament functions
|
||||
- update changelog and header for version v1.5.12-beta9
|
||||
- update platformio.ini for beta version v1.5.12-beta9
|
||||
- update changelog and header for version v1.5.12-beta8
|
||||
- update platformio.ini for beta version v1.5.12-beta8
|
||||
- update changelog and header for version v1.5.12-beta7
|
||||
- update platformio.ini for beta version v1.5.12-beta7
|
||||
- update changelog and header for version v1.5.12-beta6
|
||||
- update platformio.ini for beta version v1.5.12-beta6
|
||||
- improve task synchronization in vendor, filament, and spool creation functions
|
||||
- update changelog and header for version v1.5.12-beta5
|
||||
- update platformio.ini for beta version v1.5.12-beta5
|
||||
- update changelog and header for version v1.5.12-beta4
|
||||
- update platformio.ini for beta version v1.5.12-beta4
|
||||
- update changelog and header for version v1.5.12-beta3
|
||||
- update platformio.ini for beta version v1.5.12-beta3
|
||||
- update changelog and header for version v1.5.12-beta2
|
||||
- update platformio.ini for beta version v1.5.12-beta2
|
||||
- update changelog and header for version v1.5.12-beta1
|
||||
- update platformio.ini for beta version v1.5.12-beta1
|
||||
- Merge branch 'main' into recyclingfabrik
|
||||
- Merge branch 'main' into recyclingfabrik
|
||||
|
||||
### Fixed
|
||||
- call scale.tare() in setup after starting scale
|
||||
- update createVendor function to use external_id as comment instead of static text
|
||||
- update to_old_version in platformio.ini to reflect correct previous version
|
||||
- increase delay in start_scale function for improved stability
|
||||
- replace progress bar with message display for remaining weight in sendToApi function
|
||||
- update vendor check to use shorthand key in payload
|
||||
- reset NFC state on API send failure to allow retry
|
||||
- update createdFilamentId reset value to 65535 for better task handling
|
||||
- update createdVendorId reset value to 65535 for improved API handling
|
||||
- update spoolman ID reset values to 65535 for better API response detection
|
||||
- correct color_hex key usage and comment out unused date fields in spool creation
|
||||
- improve API state handling and vendor name formatting
|
||||
- enhance filament creation logic to include dynamic comments based on payload
|
||||
|
||||
|
||||
## [2.0.0-beta8] - 2025-08-30
|
||||
### Breaking Changes
|
||||
- enhance commit categorization for breaking changes
|
||||
- Handling of Spools with Tags from Vendors. fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag
|
||||
|
||||
### Added
|
||||
- implement robust page reading with error recovery for NFC tags
|
||||
- enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection
|
||||
- implement robust page reading and safe tag detection with error recovery
|
||||
- add Manufacturer Tags support documentation in German and English
|
||||
- add display delay for vendor, filament, and spool creation processes
|
||||
- add progress bar updates for vendor and filament creation processes
|
||||
- update vendor and filament ID handling to use NULL and add delays for stability
|
||||
- add delay to ensure proper setting of vendor and filament IDs after API state changes
|
||||
- enhance NDEF decoding with detailed validation and debugging output
|
||||
- enhance NDEF decoding to validate structure and extract JSON payload
|
||||
- add logging for decoded JSON data in NFC processing
|
||||
- implement filament and spool creation in Spoolman API
|
||||
- Add JSON structure comments for filament and spool creation
|
||||
- Add vendor and filament management to API; implement recycling factory handling in NFC
|
||||
|
||||
### Changed
|
||||
- update platformio.ini for beta version v2.0.0-beta8
|
||||
- update changelog and header for version v2.0.0-beta7
|
||||
- update platformio.ini for beta version v2.0.0-beta7
|
||||
- update changelog and header for version v2.0.0-beta6
|
||||
- update changelog and header for version v2.0.0-beta6
|
||||
- update platformio.ini for beta version v2.0.0-beta6
|
||||
- update changelog and header for version v2.0.0-beta5
|
||||
- update platformio.ini for beta version v2.0.0-beta5
|
||||
- update changelog and header for version v2.0.0-beta4
|
||||
- update platformio.ini for beta version v2.0.0-beta4
|
||||
- update changelog and header for version v2.0.0-beta3
|
||||
- update platformio.ini for beta version v2.0.0-beta3
|
||||
- update createVendor and checkVendor functions to accept JsonDocument payload
|
||||
- update changelog and header for version v2.0.0-beta2
|
||||
- update platformio.ini for beta version v2.0.0-beta2
|
||||
- clarify product URL description for Manufacturer Tags in German and English documentation
|
||||
- update changelog and header for version v2.0.0-beta1
|
||||
- update platformio.ini for beta version v2.0.0-beta1
|
||||
- update version to 2.0.0 in platformio.ini
|
||||
- update changelog and header for version v1.5.12-beta18
|
||||
- update platformio.ini for beta version v1.5.12-beta18
|
||||
- update changelog and header for version v1.5.12-beta17
|
||||
- update platformio.ini for beta version v1.5.12-beta17
|
||||
- optimize page limit detection and remove redundant verification code
|
||||
- update changelog and header for version v1.5.12-beta16
|
||||
- update platformio.ini for beta version v1.5.12-beta16
|
||||
- Refactor NFC interface handling and improve error diagnostics
|
||||
- update changelog and header for version v1.5.12-beta15
|
||||
- update platformio.ini for beta version v1.5.12-beta15
|
||||
- enhance NFC write operation diagnostics and improve error handling
|
||||
- enhance NFC write operation handling and prevent tag operations during write
|
||||
- update changelog and header for version v1.5.12-beta14
|
||||
- update platformio.ini for beta version v1.5.12-beta14
|
||||
- optimize JSON payload structure and enhance NFC tag validation process
|
||||
- update changelog and header for version v1.5.12-beta13
|
||||
- update platformio.ini for beta version v1.5.12-beta13
|
||||
- reorganize clearUserDataArea function for improved clarity and safety
|
||||
- update changelog and header for version v1.5.12-beta12
|
||||
- update platformio.ini for beta version v1.5.12-beta12
|
||||
- update changelog and header for version v1.5.12-beta11
|
||||
- update platformio.ini for beta version v1.5.12-beta11
|
||||
- update changelog and header for version v1.5.12-beta10
|
||||
- update platformio.ini for beta version v1.5.12-beta10
|
||||
- streamline task creation in checkVendor and checkFilament functions
|
||||
- update changelog and header for version v1.5.12-beta9
|
||||
- update platformio.ini for beta version v1.5.12-beta9
|
||||
- update changelog and header for version v1.5.12-beta8
|
||||
- update platformio.ini for beta version v1.5.12-beta8
|
||||
- update changelog and header for version v1.5.12-beta7
|
||||
- update platformio.ini for beta version v1.5.12-beta7
|
||||
- update changelog and header for version v1.5.12-beta6
|
||||
- update platformio.ini for beta version v1.5.12-beta6
|
||||
- improve task synchronization in vendor, filament, and spool creation functions
|
||||
- update changelog and header for version v1.5.12-beta5
|
||||
- update platformio.ini for beta version v1.5.12-beta5
|
||||
- update changelog and header for version v1.5.12-beta4
|
||||
- update platformio.ini for beta version v1.5.12-beta4
|
||||
- update changelog and header for version v1.5.12-beta3
|
||||
- update platformio.ini for beta version v1.5.12-beta3
|
||||
- update changelog and header for version v1.5.12-beta2
|
||||
- update platformio.ini for beta version v1.5.12-beta2
|
||||
- update changelog and header for version v1.5.12-beta1
|
||||
- update platformio.ini for beta version v1.5.12-beta1
|
||||
- Merge branch 'main' into recyclingfabrik
|
||||
- Merge branch 'main' into recyclingfabrik
|
||||
|
||||
### Fixed
|
||||
- call scale.tare() in setup after starting scale
|
||||
- update createVendor function to use external_id as comment instead of static text
|
||||
- update to_old_version in platformio.ini to reflect correct previous version
|
||||
- increase delay in start_scale function for improved stability
|
||||
- replace progress bar with message display for remaining weight in sendToApi function
|
||||
- update vendor check to use shorthand key in payload
|
||||
- reset NFC state on API send failure to allow retry
|
||||
- update createdFilamentId reset value to 65535 for better task handling
|
||||
- update createdVendorId reset value to 65535 for improved API handling
|
||||
- update spoolman ID reset values to 65535 for better API response detection
|
||||
- correct color_hex key usage and comment out unused date fields in spool creation
|
||||
- improve API state handling and vendor name formatting
|
||||
- enhance filament creation logic to include dynamic comments based on payload
|
||||
|
||||
|
||||
## [2.0.0-beta7] - 2025-08-30
|
||||
### Breaking Changes
|
||||
- enhance commit categorization for breaking changes
|
||||
- Handling of Spools with Tags from Vendors. fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag
|
||||
|
||||
### Added
|
||||
- enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection
|
||||
- implement robust page reading and safe tag detection with error recovery
|
||||
- add Manufacturer Tags support documentation in German and English
|
||||
- add display delay for vendor, filament, and spool creation processes
|
||||
- add progress bar updates for vendor and filament creation processes
|
||||
- update vendor and filament ID handling to use NULL and add delays for stability
|
||||
- add delay to ensure proper setting of vendor and filament IDs after API state changes
|
||||
- enhance NDEF decoding with detailed validation and debugging output
|
||||
- enhance NDEF decoding to validate structure and extract JSON payload
|
||||
- add logging for decoded JSON data in NFC processing
|
||||
- implement filament and spool creation in Spoolman API
|
||||
- Add JSON structure comments for filament and spool creation
|
||||
- Add vendor and filament management to API; implement recycling factory handling in NFC
|
||||
|
||||
### Changed
|
||||
- update platformio.ini for beta version v2.0.0-beta7
|
||||
- update changelog and header for version v2.0.0-beta6
|
||||
- update changelog and header for version v2.0.0-beta6
|
||||
- update platformio.ini for beta version v2.0.0-beta6
|
||||
- update changelog and header for version v2.0.0-beta5
|
||||
- update platformio.ini for beta version v2.0.0-beta5
|
||||
- update changelog and header for version v2.0.0-beta4
|
||||
- update platformio.ini for beta version v2.0.0-beta4
|
||||
- update changelog and header for version v2.0.0-beta3
|
||||
- update platformio.ini for beta version v2.0.0-beta3
|
||||
- update createVendor and checkVendor functions to accept JsonDocument payload
|
||||
- update changelog and header for version v2.0.0-beta2
|
||||
- update platformio.ini for beta version v2.0.0-beta2
|
||||
- clarify product URL description for Manufacturer Tags in German and English documentation
|
||||
- update changelog and header for version v2.0.0-beta1
|
||||
- update platformio.ini for beta version v2.0.0-beta1
|
||||
- update version to 2.0.0 in platformio.ini
|
||||
- update changelog and header for version v1.5.12-beta18
|
||||
- update platformio.ini for beta version v1.5.12-beta18
|
||||
- update changelog and header for version v1.5.12-beta17
|
||||
- update platformio.ini for beta version v1.5.12-beta17
|
||||
- optimize page limit detection and remove redundant verification code
|
||||
- update changelog and header for version v1.5.12-beta16
|
||||
- update platformio.ini for beta version v1.5.12-beta16
|
||||
- Refactor NFC interface handling and improve error diagnostics
|
||||
- update changelog and header for version v1.5.12-beta15
|
||||
- update platformio.ini for beta version v1.5.12-beta15
|
||||
- enhance NFC write operation diagnostics and improve error handling
|
||||
- enhance NFC write operation handling and prevent tag operations during write
|
||||
- update changelog and header for version v1.5.12-beta14
|
||||
- update platformio.ini for beta version v1.5.12-beta14
|
||||
- optimize JSON payload structure and enhance NFC tag validation process
|
||||
- update changelog and header for version v1.5.12-beta13
|
||||
- update platformio.ini for beta version v1.5.12-beta13
|
||||
- reorganize clearUserDataArea function for improved clarity and safety
|
||||
- update changelog and header for version v1.5.12-beta12
|
||||
- update platformio.ini for beta version v1.5.12-beta12
|
||||
- update changelog and header for version v1.5.12-beta11
|
||||
- update platformio.ini for beta version v1.5.12-beta11
|
||||
- update changelog and header for version v1.5.12-beta10
|
||||
- update platformio.ini for beta version v1.5.12-beta10
|
||||
- streamline task creation in checkVendor and checkFilament functions
|
||||
- update changelog and header for version v1.5.12-beta9
|
||||
- update platformio.ini for beta version v1.5.12-beta9
|
||||
- update changelog and header for version v1.5.12-beta8
|
||||
- update platformio.ini for beta version v1.5.12-beta8
|
||||
- update changelog and header for version v1.5.12-beta7
|
||||
- update platformio.ini for beta version v1.5.12-beta7
|
||||
- update changelog and header for version v1.5.12-beta6
|
||||
- update platformio.ini for beta version v1.5.12-beta6
|
||||
- improve task synchronization in vendor, filament, and spool creation functions
|
||||
- update changelog and header for version v1.5.12-beta5
|
||||
- update platformio.ini for beta version v1.5.12-beta5
|
||||
- update changelog and header for version v1.5.12-beta4
|
||||
- update platformio.ini for beta version v1.5.12-beta4
|
||||
- update changelog and header for version v1.5.12-beta3
|
||||
- update platformio.ini for beta version v1.5.12-beta3
|
||||
- update changelog and header for version v1.5.12-beta2
|
||||
- update platformio.ini for beta version v1.5.12-beta2
|
||||
- update changelog and header for version v1.5.12-beta1
|
||||
- update platformio.ini for beta version v1.5.12-beta1
|
||||
- Merge branch 'main' into recyclingfabrik
|
||||
- Merge branch 'main' into recyclingfabrik
|
||||
|
||||
### Fixed
|
||||
- call scale.tare() in setup after starting scale
|
||||
- update createVendor function to use external_id as comment instead of static text
|
||||
- update to_old_version in platformio.ini to reflect correct previous version
|
||||
- increase delay in start_scale function for improved stability
|
||||
- replace progress bar with message display for remaining weight in sendToApi function
|
||||
- update vendor check to use shorthand key in payload
|
||||
- reset NFC state on API send failure to allow retry
|
||||
- update createdFilamentId reset value to 65535 for better task handling
|
||||
- update createdVendorId reset value to 65535 for improved API handling
|
||||
- update spoolman ID reset values to 65535 for better API response detection
|
||||
- correct color_hex key usage and comment out unused date fields in spool creation
|
||||
- improve API state handling and vendor name formatting
|
||||
- enhance filament creation logic to include dynamic comments based on payload
|
||||
|
||||
|
||||
## [2.0.0-beta6] - 2025-08-30
|
||||
### Breaking Changes
|
||||
- enhance commit categorization for breaking changes
|
||||
|
@@ -9,7 +9,7 @@
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[common]
|
||||
version = "2.0.0-beta6"
|
||||
version = "2.0.0-beta9"
|
||||
to_old_version = "1.5.10"
|
||||
|
||||
##
|
||||
|
19
src/main.cpp
19
src/main.cpp
@@ -250,6 +250,25 @@ void loop() {
|
||||
}
|
||||
}
|
||||
|
||||
// Handle successful tag write: Send weight to Spoolman but NEVER auto-send to Bambu
|
||||
if (activeSpoolId != "" && weigthCouterToApi > 3 && weightSend == 0 && nfcReaderState == NFC_WRITE_SUCCESS && tagProcessed == false && spoolmanApiState == API_IDLE)
|
||||
{
|
||||
// set the current tag as processed to prevent it beeing processed again
|
||||
tagProcessed = true;
|
||||
|
||||
if (updateSpoolWeight(activeSpoolId, weight))
|
||||
{
|
||||
weightSend = 1;
|
||||
Serial.println("Tag written: Weight sent to Spoolman, but NO auto-send to Bambu");
|
||||
// INTENTIONALLY do NOT set autoSetToBambuSpoolId here to prevent Bambu auto-send
|
||||
}
|
||||
else
|
||||
{
|
||||
oledShowIcon("failed");
|
||||
vTaskDelay(2000 / portTICK_PERIOD_MS);
|
||||
}
|
||||
}
|
||||
|
||||
if(octoEnabled && sendOctoUpdate && spoolmanApiState == API_IDLE)
|
||||
{
|
||||
updateSpoolOcto(autoSetToBambuSpoolId);
|
||||
|
143
src/nfc.cpp
143
src/nfc.cpp
@@ -108,6 +108,37 @@ bool formatNdefTag() {
|
||||
return buffer[2]*8;
|
||||
}
|
||||
|
||||
// Robust page reading with error recovery
|
||||
bool robustPageRead(uint8_t page, uint8_t* buffer) {
|
||||
const int MAX_READ_ATTEMPTS = 3;
|
||||
|
||||
for (int attempt = 0; attempt < MAX_READ_ATTEMPTS; attempt++) {
|
||||
esp_task_wdt_reset();
|
||||
yield();
|
||||
|
||||
if (nfc.ntag2xx_ReadPage(page, buffer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Serial.printf("Page %d read failed, attempt %d/%d\n", page, attempt + 1, MAX_READ_ATTEMPTS);
|
||||
|
||||
// Try to stabilize connection between attempts
|
||||
if (attempt < MAX_READ_ATTEMPTS - 1) {
|
||||
vTaskDelay(pdMS_TO_TICKS(25));
|
||||
|
||||
// Re-verify tag presence with quick check
|
||||
uint8_t uid[7];
|
||||
uint8_t uidLength;
|
||||
if (!nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 100)) {
|
||||
Serial.println("Tag lost during read operation");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
String detectNtagType()
|
||||
{
|
||||
// Read capability container from page 3 to determine exact NTAG type
|
||||
@@ -1285,10 +1316,11 @@ bool quickSpoolIdCheck(String uidString) {
|
||||
memset(ndefData, 0, 20);
|
||||
|
||||
for (uint8_t page = 4; page < 9; page++) {
|
||||
if (!nfc.ntag2xx_ReadPage(page, ndefData + (page - 4) * 4)) {
|
||||
Serial.print("Failed to read page ");
|
||||
Serial.println(page);
|
||||
return false; // Fall back to full read
|
||||
if (!robustPageRead(page, ndefData + (page - 4) * 4)) {
|
||||
Serial.print("FAST-PATH: Failed to read page ");
|
||||
Serial.print(page);
|
||||
Serial.println(" - falling back to full read");
|
||||
return false; // Fall back to full read if any page read fails
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1358,10 +1390,11 @@ bool quickSpoolIdCheck(String uidString) {
|
||||
memset(extraData, 0, 16);
|
||||
|
||||
for (uint8_t page = 9; page < 13; page++) {
|
||||
if (!nfc.ntag2xx_ReadPage(page, extraData + (page - 9) * 4)) {
|
||||
Serial.print("Failed to read additional page ");
|
||||
Serial.println(page);
|
||||
return false;
|
||||
if (!robustPageRead(page, extraData + (page - 9) * 4)) {
|
||||
Serial.print("FAST-PATH: Failed to read additional page ");
|
||||
Serial.print(page);
|
||||
Serial.println(" - falling back to full read");
|
||||
return false; // Fall back to full read if extended read fails
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1655,10 +1688,60 @@ void writeJsonToTag(void *parameter) {
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
// Ensures sm_id is always the first key in JSON for fast-path detection
|
||||
String optimizeJsonForFastPath(const char* payload) {
|
||||
JsonDocument inputDoc;
|
||||
DeserializationError error = deserializeJson(inputDoc, payload);
|
||||
|
||||
if (error) {
|
||||
Serial.print("JSON optimization failed: ");
|
||||
Serial.println(error.c_str());
|
||||
return String(payload); // Return original if parsing fails
|
||||
}
|
||||
|
||||
// Create optimized JSON with sm_id first
|
||||
JsonDocument optimizedDoc;
|
||||
|
||||
// Always add sm_id first (even if it's "0" for brand filaments)
|
||||
if (inputDoc["sm_id"].is<String>()) {
|
||||
optimizedDoc["sm_id"] = inputDoc["sm_id"].as<String>();
|
||||
Serial.print("Optimizing JSON: sm_id found = ");
|
||||
Serial.println(inputDoc["sm_id"].as<String>());
|
||||
} else {
|
||||
optimizedDoc["sm_id"] = "0"; // Default for brand filaments
|
||||
Serial.println("Optimizing JSON: No sm_id found, setting to '0'");
|
||||
}
|
||||
|
||||
// Add all other keys in original order
|
||||
for (JsonPair kv : inputDoc.as<JsonObject>()) {
|
||||
String key = kv.key().c_str();
|
||||
if (key != "sm_id") { // Skip sm_id as it's already added first
|
||||
optimizedDoc[key] = kv.value();
|
||||
}
|
||||
}
|
||||
|
||||
String optimizedJson;
|
||||
serializeJson(optimizedDoc, optimizedJson);
|
||||
|
||||
Serial.println("JSON optimized for fast-path detection:");
|
||||
Serial.print("Original: ");
|
||||
Serial.println(payload);
|
||||
Serial.print("Optimized: ");
|
||||
Serial.println(optimizedJson);
|
||||
|
||||
inputDoc.clear();
|
||||
optimizedDoc.clear();
|
||||
|
||||
return optimizedJson;
|
||||
}
|
||||
|
||||
void startWriteJsonToTag(const bool isSpoolTag, const char* payload) {
|
||||
// Optimize JSON to ensure sm_id is first key for fast-path detection
|
||||
String optimizedPayload = optimizeJsonForFastPath(payload);
|
||||
|
||||
NfcWriteParameterType* parameters = new NfcWriteParameterType();
|
||||
parameters->tagType = isSpoolTag;
|
||||
parameters->payload = strdup(payload);
|
||||
parameters->payload = strdup(optimizedPayload.c_str()); // Use optimized payload
|
||||
|
||||
// Task nicht mehrfach starten
|
||||
if (nfcReaderState == NFC_IDLE || nfcReaderState == NFC_READ_ERROR || nfcReaderState == NFC_READ_SUCCESS) {
|
||||
@@ -1678,37 +1761,6 @@ void startWriteJsonToTag(const bool isSpoolTag, const char* payload) {
|
||||
}
|
||||
}
|
||||
|
||||
// Robust page reading with error recovery
|
||||
bool robustPageRead(uint8_t page, uint8_t* buffer) {
|
||||
const int MAX_READ_ATTEMPTS = 3;
|
||||
|
||||
for (int attempt = 0; attempt < MAX_READ_ATTEMPTS; attempt++) {
|
||||
esp_task_wdt_reset();
|
||||
yield();
|
||||
|
||||
if (nfc.ntag2xx_ReadPage(page, buffer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Serial.printf("Page %d read failed, attempt %d/%d\n", page, attempt + 1, MAX_READ_ATTEMPTS);
|
||||
|
||||
// Try to stabilize connection between attempts
|
||||
if (attempt < MAX_READ_ATTEMPTS - 1) {
|
||||
vTaskDelay(pdMS_TO_TICKS(25));
|
||||
|
||||
// Re-verify tag presence with quick check
|
||||
uint8_t uid[7];
|
||||
uint8_t uidLength;
|
||||
if (!nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 100)) {
|
||||
Serial.println("Tag lost during read operation");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Safe tag detection with manual retry logic and short timeouts
|
||||
bool safeTagDetection(uint8_t* uid, uint8_t* uidLength) {
|
||||
const int MAX_ATTEMPTS = 3;
|
||||
@@ -1762,6 +1814,11 @@ void scanRfidTask(void * parameter) {
|
||||
|
||||
foundNfcTag(nullptr, success);
|
||||
|
||||
// Reset activeSpoolId immediately when no tag is detected to prevent stale autoSet
|
||||
if (!success) {
|
||||
activeSpoolId = "";
|
||||
}
|
||||
|
||||
// As long as there is still a tag on the reader, do not try to read it again
|
||||
if (success && nfcReaderState == NFC_IDLE)
|
||||
{
|
||||
@@ -1857,6 +1914,9 @@ void scanRfidTask(void * parameter) {
|
||||
{
|
||||
oledShowProgressBar(1, 1, "Failure", "Tag read error");
|
||||
nfcReaderState = NFC_READ_ERROR;
|
||||
// Reset activeSpoolId when tag reading fails to prevent autoSet
|
||||
activeSpoolId = "";
|
||||
Serial.println("Tag read failed - activeSpoolId reset to prevent autoSet");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1864,6 +1924,9 @@ void scanRfidTask(void * parameter) {
|
||||
//TBD: Show error here?!
|
||||
oledShowProgressBar(1, 1, "Failure", "Unkown tag type");
|
||||
Serial.println("This doesn't seem to be an NTAG2xx tag (UUID length != 7 bytes)!");
|
||||
// Reset activeSpoolId when tag type is unknown to prevent autoSet
|
||||
activeSpoolId = "";
|
||||
Serial.println("Unknown tag type - activeSpoolId reset to prevent autoSet");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user