- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试围绕 libnfc 构建一个 C++ 包装器在我的 Android 和 PN532 之间进行通信RFID模块。
这对我帮助很大:http://nfc-tools.org/index.php/Libnfc:APDU_example
此代码旨在发送一个 APDU 命令,其中正文包含在 message
中(我没有发送任何 header 字节等)并将响应读入 response
.
问题:如果message
超过262 个字符,那么我会得到一个检测到缓冲区溢出 错误。否则它工作得很好。我什至不认为错误是由 NFC 库引发的。
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;
}
最佳答案
262 字节的限制是 PN532 NFC 芯片的硬性限制。这是可以在一个 InDataExchange 命令中发送(和接收)的原始数据的最大大小。 libnfc 对方法 nfc_initiator_transceive_bytes()
显式强制执行此限制(请参阅 the definition of abtCmd
in pn53x_initiator_transceive_bytes()
和 definition of PN53x_EXTENDED_FRAME__DATA_MAX_LEN)。
要克服这个限制,您可以做的是编写自己的 ISO/IEC 14443-4 block (使用 InCommunicateThru,即 nfc_initiator_transceive_bytes()
和 m_nfcDevice->bEasyFraming
关闭。虽然每个帧仍将限制为 263 字节(PN532 实际上允许 InCommunicateThru 为 264 字节,但 libnfc 似乎将其限制为 263 字节),然后您可以将扩展长度的 APDU 打包到多个 ISO/IEC 14443-4 中I-blocks。但是,您需要自己处理整个 ISO/IEC 14443-4 框架(这意味着您还必须处理接收确认等)
最后,由于另一个通信端点是 Android 设备:许多 Android 设备不支持扩展长度的 APDU。因此,即使您发送更长的 APDU,您也可能无法在 Android 端接收和处理它们。此外,请注意,您应该发送符合 ISO/IEC 7816-4 中定义的结构的正确 APDU(即具有有效 header 和长度字段的 APDU),否则在与某些设备通信时可能会遇到问题。
关于android - 无法使用 nfc_initiator_transceive_bytes() 通过 libnfc 发送大型 APDU 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47820902/
我正在尝试使用 ACR122 读卡器简单地读取 ISO 14443-2B ST SRx 卡内容。 我已经使用 Libnfc 和适当的阅读器驱动程序设置了我的环境。 现在我已经设法编写了一个代码,可以简
我正在使用 C 语言的 libnfc 库进行 NFC 编程。我正在使用 TDM-GCC MinGW 编译器和 CMAKE 开源构建系统,我按照 this tutorial 安装了它用于构建/编译代码。
我有 2 个关于 emulate 和 libnfc 的问题。 我在 PN53x 上看到我无法使用 pn53x 模拟 iso14443b ,这是为什么?我如何以另一种方式模拟它? 当我尝试使用现场使用
有人有 libnfc 的 Android 可加载内核模块的源代码吗? 如果没有,有人可以告诉我如何做到吗? 作为最后一个选项,如果您已经构建了它,您可以分享它的下载 URL 吗? 顺便问一下,我读到
我刚给自己买了一个新的 ACR122U-A9 nfc 阅读器,我需要在 ubuntu 18.10 上使用 libnfc 进行设置。它需要与 libnfc 一起使用,因为 mfoc 接口(interfa
有人可以解释两者之间的区别/关系吗? 现在我正在使用 GPSShell + globalplatform + pcsclite 来操作支持 NFC 的卡。从我的角度来看(我对 libnfc 了解不多)
我在 Raspberry Pi 3B 上尝试从 PN532 读卡器读取数据时遇到 libnfc 问题。我按照官方网站的建议安装了 libnfc,事实上今天早上一切正常。我能够使用 nfc-list 和
我想在智能手机上使用 libnfc(我可以使用 Android 或 Windows 手机)。我需要对 NFC 设备进行低级别访问,因为标准 API 不允许我执行我需要的所有操作。 这可能吗?有没有办法
我已经尝试了很长时间从我的 NFC 卡中写入和读取数据。这些卡是 NTAG216。我可以使用 libnfc 示例来读取制造商 ID,它工作正常。但我需要向每个标签写入一些自定义数据,例如字符串“abc
我正在尝试围绕 libnfc 构建一个 C++ 包装器在我的 Android 和 PN532 之间进行通信RFID模块。 这对我帮助很大:http://nfc-tools.org/index.php/
最终,我需要在 Android 设备和具有使用 libfc 的 NFC 适配器的 Linux 主机之间实现加密协议(protocol)。 我以前从未在 Android 上使用过 NFC。目前我的想法是
我在我的 ArchLinux 上安装了 libnfc,我会通过我的 Adafruit PN532 arduino SHIELD 使用它。 nfc-list 返回消息“未找到 NFC 设备”。 我在/e
我在 Ubuntu-14-LTS 中安装了使用我的 ACR122U 非接触式智能卡读卡器所需的软件包。幸运的是它工作正常: ebrahim@ubuntu:~$ pcsc_scan PC/SC devi
我是一名优秀的程序员,十分优秀!