Hallo,
so, hier steigt weißer Rauch auf (keine Sorge: ich habe nicht gelötet. Ist eine Metapher):
Code:
newPassword: FingerprintHinte[MARKIEREN]␦[/MARKIEREN] (crc: 831306104)
Der CRC32 831306104 ist aber der von
Code:
password_str = "FingerprintHinte␦" password_bytes = password_str.encode("utf-8")[:16] # nur die ersten 16 Bytes crc = zlib.crc32(password_bytes) & 0xFFFFFFFF
Der Microcontroller läuft also mit dem Passwort mit dem umgekehrten Fragezeichen, wohingegen die ETS mit dem Passwort ohne Sonderzeichen kommt.
Ich weiß nicht, woher das Sonderzeichen kommt.
Zwei Theorien.
1) ich habe das Passwort mit STRG+V eingefügt und die ETS hat da Mist gemacht
2) der Microcontroller liest ein byte zu weit und kommt in einen "random" Speicherbereich.
Ich würde das gerne weiter debuggen. Aber wie komme ich jetzt einfach aus diesem Zustand wieder raus?
Der Fingerprint hat jetzt ja ein Passwort, welches ich über die ETS nicht eingeben kann, da es ein Zeichen zu viel hat.
Ich kenne ja das Passwort (831306104). Ich könnte es manuell (serielles Interface) auf 0 setzen.
Es bleibt aber das falsche Passwort im Flash des scanners. Den kann ich durch Code-Änderung auch dazu bringen das zu leeren. Aber gibt es einen einfacheren Weg?
Mir ist nochwas aufgefallen:
Code:
0d 00:21:32: Fingerprint: Function property finger: Set password 0d 00:21:32: Fingerprint: passwordOption: 2 0d 00:21:32: Fingerprint: newPassword: FingerprintSchup (crc: 961173143) 0d 00:21:32: Fingerprint: oldPassword: (crc: 3971697493) 0d 00:21:32: Fingerprint: currentCrc: 831306104 0d 00:21:32: Fingerprint: Invalid old password provided.
Da sollte nicht nur das crc vom "oldPassword" (das ist das aus der ETS, nicht das vom Microcontroller) stehen, sondern auch das Klartext PW:
Code:
if (passwordOption == 2) { char oldPassword[16] = {}; for (uint8_t i = 0; i < 16; i++) { dataOffset++; memcpy(oldPassword + i, data + dataOffset, 1); if (oldPassword[i] == 0) // null termination break; } if (oldPassword[0] != 48 || // = "0": if user inputs only "0", we just use it as is without CRC oldPassword[1] != 0) // null termination oldPasswordCrc = crc32.crc32((uint8_t *)oldPassword, 16); logDebugP("oldPassword: %s (crc: %u)", oldPassword, oldPasswordCrc); }
mumpf, abtools Ich bin nicht sicher, was ich anders mache als ihr.... Aber ich hoffe, das hier hilft.
Gruß,
Hendrik
Kommentar