Это (хорошо прокомментированный) проект с открытым исходным кодом. Просто посмотрите на исходный код, например, если вы используете MIFARE_Read
функцию MFRC522.cpp
MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The first page to return data from.
byte *buffer, ///< The buffer to store the data in
byte *bufferSize ///< Buffer size, at least 18 bytes. Also number of bytes returned if STATUS_OK.
) {
MFRC522::StatusCode result;
// Sanity check
if (buffer == NULL || *bufferSize < 18) {
return STATUS_NO_ROOM;
}
// Build command buffer
buffer[0] = PICC_CMD_MF_READ;
buffer[1] = blockAddr;
// Calculate CRC_A
result = PCD_CalculateCRC(buffer, 2, &buffer[2]);
if (result != STATUS_OK) {
return result;
}
// Transmit the buffer and receive the response, validate CRC_A.
return PCD_TransceiveData(buffer, 4, buffer, bufferSize, NULL, 0, true);
} // End MIFARE_Read()
Вы могли видеть, функция PCD_TransceiveData
называется и проверить источник этой функции:
/**
* Executes the Transceive command.
* CRC validation can only be done if backData and backLen are specified.
*
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO.
byte sendLen, ///< Number of bytes to transfer to the FIFO.
byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command.
byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned.
byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL.
byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0.
bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated.
) {
byte waitIRq = 0x30; // RxIRq and IdleIRq
return PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC);
} // End PCD_TransceiveData()
Вы можете под названием PCD_TransceiveData
или PCD_CommunicateWithPICC
функции.
UPDATE
Вы кладете 0 значения параметров: "ретроспективный", "backLen" и "validBits". Действительные биты могут быть пустыми. backData и backLen должны быть определены как байты.
UPDATE2
Если посмотреть на библиотеку support protocols Он поддерживает ISO/IEC 14443-3 (тип А) и не поддерживает ISO/IEC 14443-4 (тип B).
Если вы посмотрите на Android HCE documentation:
В частности, Android 4.4 поддерживает имитирующие карты, основанные на с NFC-форум ISO-DEP спецификации (на основе стандарта ISO/IEC 14443-4) и (APDU), как определено в спецификации ISO/IEC 7816-4. Android-мандаты, имитирующие ISO-DEP только поверх технологии Nfc-A (ISO/IEC 14443-3 типа A). Поддержка Технология Nfc-B (ISO/IEC 14443-4 типа B) является дополнительной.Наслоение всех этих спецификаций показано на рисунке 3
В этом посте: HCE support for ISO/IEC 14443-3 Type B?
Глядя на устройства в поле, некоторые устройства используют тип А для HCE и некоторые, кажется, используют Тип B. Таким образом, это в основном производитель устройства, который решает, используется ли тип A или тип B. Android API не предоставляет средства , чтобы разработчик приложения мог повлиять на это.
Таким образом, вам необходимо проверить с помощью другого устройства Android NFC, если ваше устройство имитирует ISO/IEC 14443-3 (тип A) или ISO/IEC 14443-4 (тип B). Вы можете использовать NfcTagInfo application на другом устройстве Android, чтобы проверить это.
Пожалуйста, постарайтесь улучшить этот вопрос, продемонстрировав нам вашу лучшую попытку доброй воли и задав гораздо более конкретный вопрос о том, что вас смущает. – abarisone
Мой вопрос не может быть более конкретным: как отправить команду APDU на Arduino с RC522? Thx за помощью! :)) –
Я не знаю языка C++, то же самое, чтобы передать значение 0 или null в значение validBits? Он используется как это: byte txLastBits = validBits? * validBits: 0; – LaurentY