Ich versuche, einen C++ - Wrapper um libnfc zu bauen, um eine Kommunikation zwischen meinem Android und dem PN532 RFID-Modul herzustellen. Ich kann nicht große APDU-Befehle mit libnfc senden unter Verwendung von nfc_initiator_transceive_bytes()
Das hat mir sehr geholfen: http://nfc-tools.org/index.php/Libnfc:APDU_example
Dieser Code soll einen APDU-Befehl senden, wo der Körper in message
enthalten ist (ich bin keine Header-Bytes usw. Senden) und die Antwort in response
lesen.
Problem: Wenn message
Zeichen überschreitet dann bekomme ich einen Pufferüberlauf Fehler erkannt. Ansonsten klappt es ganz gut. Ich glaube nicht einmal, dass der Fehler von der NFC-Bibliothek ausgelöst wird.
bool send(const std::string &message, std::string &response){
std::vector<uint8_t> apduCmd(message.begin(), message.end());
uint8_t *capdu = &apduCmd[0];
size_t capdulen = apduCmd.size();
uint8_t rapdu[10];
size_t rapdulen = 10;
// BUFFER OVERFLOW HERE
int res = nfc_initiator_transceive_bytes(m_nfcDevice, capdu, capdulen, rapdu, rapdulen, 500);
if (res<0) {
return false;
}
if(res<2 || rapdu[res-2] != 0x90 || rapdu[res-1] != 0x00){
return false;
}
// byteArrayToString omitting the last two bytes
response = byteArrayToString(rapdu, 0, res-2);
return true;
}
Möglicherweise müssen Sie nach Unterstützung für erweiterte APDU suchen - das Problem könnte sein, dass Ihr Android-Gerät keine APDUs mit Datenlänge> 255 Byte 'cla [1] + ins [1] + param [2] + lc unterstützt [1] + data [255] + le [1] = 261 bytes' –