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


) kennt. Wenn es also - warum auch immer - zu einem nicht synchronen Zustand zwischen Controller und ETS kommt (z.B. wenn man einen älteren Zustand der ETS via Backup oder Restorepoint) wiederherstellt, kommt man in eine Falle - selbst wenn der o.g. Bug behoben ist.
Kommentar