我想在智能手机上使用 libnfc(我可以同时使用 Android 或 Windows 手机)。我需要对 NFC 设备进行低级别访问,因为标准 API 不允许我执行我需要的所有操作。
那可能吗?除了 libnfc 之外,还有其他方法吗?有人能帮我吗?
我想在智能手机上使用 libnfc(我可以同时使用 Android 或 Windows 手机)。我需要对 NFC 设备进行低级别访问,因为标准 API 不允许我执行我需要的所有操作。
那可能吗?除了 libnfc 之外,还有其他方法吗?有人能帮我吗?
视窗电话
在 Windows Phone 上,我认为绕过 Windows API 并使用自己的软件堆栈直接访问 NFC 控制器的驱动程序层并不容易。
安卓
在 Android 上,这取决于您所谈论的libnfc以及您想要进入设备的 Android 系统的深度。
此 libnfc仅支持 NXP 的 PN532 NFC 控制器,因此不适用于当前集成到 Android 设备中的 NFC 控制器(NXP 的 PN544/PN547、Broadcom 的 BCM2079x)。但是,如果您谈论的是libnfc-nxp(适用于 NXP 的 PN54x)或libnfc-nci(适用于 Broadcom 的 BCM2079x 和可能其他符合 NCI 的芯片),那就另当别论了。您也许可以使用它们或使它们适应您的需要。
所以现在的问题是如何绕过标准的 Android API 并直接使用现有的 NFC 堆栈(libnfc-nci/nxp 或 Android NFC 服务)。
我建议您首先查看现有 Android NFC 服务提供的功能,而不是通过 Android API 提供的功能。如果该功能已经足够,您可以尝试直接与 NFC 服务交互并简单地使用该功能。
如果您需要更多功能,它会变得复杂:NFC 控制器通过内核驱动程序集成到 Android 系统中,并且可以作为 Linux 设备文件访问(在 下/dev/
)。Android NFC 服务使用 libnfc-nxp/nci 来访问该设备文件。因此,在正常情况下,设备文件已被 Android NFC 服务使用,因此其他 libnfc-* 实例无法访问/无法使用。此外,只有 NFC 服务(或者更确切地说是它的 Linux 用户)可以访问设备文件。
所以有两种选择:
您可以修改整个Android 系统(即您创建一个定制的Android 系统固件)。在这种情况下,最简单的选择是使用现有的 libnfc-* 和 Android NFC 服务源代码,并使用您的功能对其进行扩展。您甚至可以根据需要调整自定义固件的 Android API。
您想要更改实时系统(即您不想将自定义固件刷写到设备上)。在这种情况下,您需要将现有的 Android NFC 服务替换为您自己的包含您需要的扩展功能的 NFC 服务。您当然需要 root 访问权限来实现任何这些(因为您将不得不强制关闭现有的 NFC 服务,并且您的替换 NFC 服务将需要访问 NFC 控制器的设备文件)。