Compare commits

..

12 Commits

Author SHA1 Message Date
63fafa2463 docs: update changelog and header for version v2.0.0-beta8
All checks were successful
Release Workflow / detect-provider (push) Successful in 5s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 3m4s
2025-08-30 10:17:37 +02:00
f664e85933 docs: update platformio.ini for beta version v2.0.0-beta8 2025-08-30 10:17:37 +02:00
7bf9868d79 feat: implement robust page reading with error recovery for NFC tags 2025-08-30 10:17:30 +02:00
b9e488d675 docs: update changelog and header for version v2.0.0-beta7
Some checks failed
Release Workflow / detect-provider (push) Successful in 3s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Failing after 2m13s
2025-08-30 10:09:28 +02:00
2e3fc19741 docs: update platformio.ini for beta version v2.0.0-beta7 2025-08-30 10:09:28 +02:00
4d84169b29 feat: enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection 2025-08-30 10:09:22 +02:00
10aeb9bc52 docs: update changelog and header for version v2.0.0-beta6
All checks were successful
Release Workflow / detect-provider (push) Successful in 3s
Release Workflow / github-release (push) Has been skipped
Release Workflow / gitea-release (push) Successful in 2m52s
2025-08-30 09:28:33 +02:00
00b9bc08af docs: update changelog and header for version v2.0.0-beta6 2025-08-30 09:28:10 +02:00
dfe9e4dbe9 docs: update platformio.ini for beta version v2.0.0-beta6 2025-08-30 09:28:09 +02:00
79eacae225 feat: implement robust page reading and safe tag detection with error recovery 2025-08-30 09:27:57 +02:00
d5d7358f58 fix: enhance commit categorization for breaking changes 2025-08-30 08:54:40 +02:00
9b362b3c73 BREAKING CHANGE: Handling of Spools with Tags from Vendors.
fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag
2025-08-30 08:52:45 +02:00
4 changed files with 486 additions and 25 deletions

View File

@@ -1,5 +1,307 @@
# Changelog
## [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
- 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 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 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-beta5] - 2025-08-30
### Changed
- update platformio.ini for beta version v2.0.0-beta5

View File

@@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html
[common]
version = "2.0.0-beta5"
version = "2.0.0-beta8"
to_old_version = "1.5.10"
##

View File

@@ -14,17 +14,39 @@ def get_version():
return version_match.group(1) if version_match else None
def get_last_tag():
"""Get the last non-beta tag for changelog generation"""
try:
result = subprocess.run(['git', 'describe', '--tags', '--abbrev=0'],
# Get all tags sorted by version
result = subprocess.run(['git', 'tag', '-l', '--sort=-version:refname'],
capture_output=True, text=True)
return result.stdout.strip()
if result.returncode != 0:
return None
tags = result.stdout.strip().split('\n')
# Find the first (newest) non-beta tag
for tag in tags:
if tag and not '-beta' in tag.lower():
print(f"Using last stable tag for changelog: {tag}")
return tag
# Fallback: if no non-beta tags found, use the newest tag
print("No stable tags found, using newest tag")
if tags and tags[0]:
return tags[0]
return None
except subprocess.CalledProcessError:
return None
def categorize_commit(commit_msg):
"""Categorize commit messages based on conventional commits"""
lower_msg = commit_msg.lower()
if any(x in lower_msg for x in ['feat', 'add', 'new']):
# Check for breaking changes first
if ('!' in commit_msg and any(x in lower_msg for x in ['feat!', 'fix!', 'chore!', 'refactor!'])) or \
'breaking change' in lower_msg or 'breaking:' in lower_msg:
return 'Breaking Changes'
elif any(x in lower_msg for x in ['feat', 'add', 'new']):
return 'Added'
elif any(x in lower_msg for x in ['fix', 'bug']):
return 'Fixed'
@@ -34,6 +56,7 @@ def categorize_commit(commit_msg):
def get_changes_from_git():
"""Get changes from git commits since last tag"""
changes = {
'Breaking Changes': [],
'Added': [],
'Changed': [],
'Fixed': []
@@ -55,7 +78,9 @@ def get_changes_from_git():
if commit:
category = categorize_commit(commit)
# Clean up commit message
clean_msg = re.sub(r'^(feat|fix|chore|docs|style|refactor|perf|test)(\(.*\))?:', '', commit).strip()
clean_msg = re.sub(r'^(feat|fix|chore|docs|style|refactor|perf|test)(\(.*\))?!?:', '', commit).strip()
# Remove BREAKING CHANGE prefix if present
clean_msg = re.sub(r'^breaking change:\s*', '', clean_msg, flags=re.IGNORECASE).strip()
changes[category].append(clean_msg)
except subprocess.CalledProcessError:

View File

@@ -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,9 +1761,44 @@ void startWriteJsonToTag(const bool isSpoolTag, const char* payload) {
}
}
// Safe tag detection with manual retry logic and short timeouts
bool safeTagDetection(uint8_t* uid, uint8_t* uidLength) {
const int MAX_ATTEMPTS = 3;
const int SHORT_TIMEOUT = 100; // Very short timeout to prevent hanging
for (int attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
// Watchdog reset on each attempt
esp_task_wdt_reset();
yield();
// Use short timeout to avoid blocking
bool success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, uidLength, SHORT_TIMEOUT);
if (success) {
Serial.printf("✓ Tag detected on attempt %d with %dms timeout\n", attempt + 1, SHORT_TIMEOUT);
return true;
}
// Short pause between attempts
vTaskDelay(pdMS_TO_TICKS(25));
// Refresh RF field after failed attempt (but not on last attempt)
if (attempt < MAX_ATTEMPTS - 1) {
nfc.SAMConfig();
vTaskDelay(pdMS_TO_TICKS(10));
}
}
return false;
}
void scanRfidTask(void * parameter) {
Serial.println("RFID Task gestartet");
for(;;) {
// Regular watchdog reset
esp_task_wdt_reset();
yield();
// Skip scanning during write operations, but keep NFC interface active
if (nfcReaderState != NFC_WRITING && !nfcWriteInProgress && !nfcReadingTaskSuspendRequest && !booting)
{
@@ -1691,10 +1809,16 @@ void scanRfidTask(void * parameter) {
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength;
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500);
// Use safe tag detection instead of blocking readPassiveTargetID
success = safeTagDetection(uid, &uidLength);
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)
{
@@ -1708,9 +1832,9 @@ void scanRfidTask(void * parameter) {
oledShowProgressBar(0, octoEnabled?5:4, "Reading", "Detecting tag");
// Wait 1 second after tag detection to stabilize connection
Serial.println("Tag detected, waiting 1 second for stabilization...");
vTaskDelay(1000 / portTICK_PERIOD_MS);
// Reduced stabilization time for better responsiveness
Serial.println("Tag detected, minimal stabilization...");
vTaskDelay(200 / portTICK_PERIOD_MS); // Reduced from 1000ms to 200ms
// create Tag UID string
String uidString = "";
@@ -1753,9 +1877,10 @@ void scanRfidTask(void * parameter) {
for (uint8_t i = 4; i < 4+numPages; i++) {
if (!nfc.ntag2xx_ReadPage(i, data+(i-4) * 4))
if (!robustPageRead(i, data+(i-4) * 4))
{
break; // Stop if reading fails
Serial.printf("Failed to read page %d after retries, stopping\n", i);
break; // Stop if reading fails after retries
}
// Check for NDEF message end
@@ -1767,8 +1892,8 @@ void scanRfidTask(void * parameter) {
yield();
esp_task_wdt_reset();
// Increased delay to ensure stable reading
vTaskDelay(pdMS_TO_TICKS(5)); // Increased from 1ms to 5ms
// Reduced delay for faster reading
vTaskDelay(pdMS_TO_TICKS(2)); // Reduced from 5ms to 2ms
}
Serial.println("Tag reading completed, starting NDEF decode...");
@@ -1789,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
@@ -1796,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");
}
}
@@ -1815,10 +1946,13 @@ void scanRfidTask(void * parameter) {
Serial.println("Tag nach erfolgreichem Lesen entfernt - bereit für nächsten Tag");
}
// Add a longer pause after successful reading to prevent immediate re-reading
// Add a pause after successful reading to prevent immediate re-reading
if (nfcReaderState == NFC_READ_SUCCESS) {
Serial.println("Tag erfolgreich gelesen - warte 5 Sekunden vor nächstem Scan");
vTaskDelay(5000 / portTICK_PERIOD_MS); // 5 second pause
Serial.println("Tag erfolgreich gelesen - warte 3 Sekunden vor nächstem Scan");
vTaskDelay(3000 / portTICK_PERIOD_MS); // Reduced from 5 seconds to 3 seconds
} else {
// Faster scanning when no tag or idle state
vTaskDelay(150 / portTICK_PERIOD_MS); // Faster scan interval
}
// aktualisieren der Website wenn sich der Status ändert