Compare commits
	
		
			3 Commits
		
	
	
		
			v2.0.0-bet
			...
			v2.0.0-bet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b9e488d675 | |||
| 2e3fc19741 | |||
| 4d84169b29 | 
							
								
								
									
										101
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,5 +1,106 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [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-beta7"
 | 
			
		||||
to_old_version = "1.5.10"
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										81
									
								
								src/nfc.cpp
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								src/nfc.cpp
									
									
									
									
									
								
							@@ -1285,10 +1285,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 +1359,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 +1657,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) {
 | 
			
		||||
@@ -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