Hallo,
ich bin gerade dabei die Adafruit Fingerprint Sensor Library als component für die ESP32 idf zu portieren.
Empfangen und Senden klappt soweit schon.
Allerdings begreife ich die Funktion: uint8_t Adafruit_Fingerprint::getReply(uint8_t packet[], uint16_t timeout) nicht so ganz.
Wenn ich mir zum Beispiel den Aufruf aus dieser Funktion anschaue:
boolean Adafruit_Fingerprint::verifyPassword(void) {
uint8_t packet[] = {FINGERPRINT_VERIFYPASSWORD,
(thePassword >> 24), (thePassword >> 16),
(thePassword >> 8), thePassword};
writePacket(theAddress, FINGERPRINT_COMMANDPACKET, 7, packet);
uint8_t len = getReply(recvPacket); //Aufruf mit Übergabe recvPacket - globale Variable!
if ((len == 1) && (recvPacket[0] == FINGERPRINT_ACKPACKET) && (recvPacket[1] == FINGERPRINT_OK)) //woher kommt hier der Wert in recvPacket[0] bzw. recvPacket[1]?
return true;
/*
Serial.print("\nGot packet type "); Serial.print(packet[0]);
for (uint8_t i=1; i<len+1;i++) {
Serial.print(" 0x");
Serial.print(packet[i], HEX);
}
*/
return false;
}
Ich versteh den Aufruf der Funktion nicht...
Die Variable Packet[] wird in der getReply-Funktion zwar beschrieben:
packet[0] = packettype;
for (uint8_t i=0; i<len; i++) {
packet[1+i] = reply[9+i];
}
- wird aber nicht returned und ist von außen daher doch nie zugänglich? Der Wert ist nach verlassen der Funktion doch gleich wieder dahin...?
Ich versteh den Sinn dahinter einfach nicht :o
Genauso wie die Abfrage innerhalb der verifyPassword-Funktion:
if ((len == 1) && (recvPacket[0] == FINGERPRINT_ACKPACKET) && (recvPacket[1] == FINGERPRINT_OK))
return true;
Woher zum Teufel bekommt recvPacket[] seinen Inhalt her? Dieses Array ist in der header Datei global definiert, kann daher auch innerhalb der verifyPassword-Funktion genutzt werden.
Aber: Wo wird diese Variable denn beschrieben? Ich denke mal, dass sollte in der getReply-Funktion passieren...hier wird die Variable aber nicht einmal verwendet?!
Zu guter Letzt erschließt sich mir der Rückgabewert "len" in der getReply-Funktion nicht ganz.
Wenn das "Grundpaket" mit Adresse usw. angekommen ist, kann "len" doch immer nur 1 sein?
Außerdem fehlt das Berechnen und Prüfen der Checksumme?
Danke und Gruß
Danie