我在Arduino Uno上的PN532与运行Kitkat 4.4.2的Nexus 7进行通信
我从这里得到的HCE计划:
https://github.com/grundid/host-card-emulation-sample
我在Nexus 7上运行示例程序,在Arduino上我尝试发送APDU命令:
uint8_t PN532::APDU ()
{
uint8_t message[] = {
0x00, /* CLA */
0xA4, /* INS */
0x04, /* P1 */
0x00, /* P2 */
0x07, /* Lc */
0xF0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x00 /* Le */ };
/* Prepare the first command */
/* Send the command */
if (HAL(writeCommand)(message, 13)) {
Serial.println(F("Go here 1"));
return 0;
}
Serial.println(F("Go here 2"));
/* Read the response packet */
return (0 < HAL(readResponse)(message, sizeof(message)));}
这是我的APDU服务文件:apduservice.html
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false" >
<aid-group
android:category="other"
android:description="@string/aiddescription" >
<aid-filter android:name="F0010203040506" />
</aid-group>
但我无法得到Nexus 7的任何回复,而且从Nexus 7我也没有记录任何信号?有谁知道我在这里缺少什么?感谢
答案 0 :(得分:1)
使用Seeed-Studio PN532 library,您不需要在库中创建自己的命令(即您使用uint8_t PN532::APDU () {...}
所做的事情。
相反,您可以使用已经存在的方法。要建立与标签/非接触式智能卡的连接(或者更确切地说是枚举可用的标签/卡),您将从inListPassiveTarget()
开始。如果标签/智能卡支持APDU,则稍后将自动激活它以进行基于APDU的通信。然后,您可以使用inDataExchange()
发送和接收APDU。
所以,如果你像这样包含PN532库:
PN532_xxx pn532hal(...);
PN532 nfc(pn532hal);
然后您可以像这样使用库:
bool success = nfc.inListPassiveTarget();
if (success) {
uint8_t apdu = {
0x00, /* CLA */
0xA4, /* INS */
0x04, /* P1 */
0x00, /* P2 */
0x07, /* Lc */
0xF0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x00 /* Le */
};
uint8_t response[255];
uint8_t responseLength = 255;
success = nfc.inDataExchange(apdu, sizeof(apdu), response, &responseLength);
if (success) {
// response should now contain the R-APDU you received in response to the above C-APDU (responseLength data bytes)
}
}