HarmonyOS 鸿蒙Next中怎么调用NFC

HarmonyOS 鸿蒙Next中怎么调用NFC 现在项目需要兼容OpenHarmony系统,调用我的har包,但是是通过OpenHarmony usb ddk/libusb来识别nfc 的,我这边该怎么兼容通过usb来识别nfc呢?
有没有相关的资料借鉴?

3 回复

试了一下使用鸿蒙的USB DDK,也有问题,按照文档CMakeLists.txt中添加了库文件,C文件也加了头文件
#include <usb/usb_ddk_api.h>
#include <usb/usb_ddk_types.h>
但是一直下显示错误API not be supported

更多关于HarmonyOS 鸿蒙Next中怎么调用NFC的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS Next中调用NFC需使用@ohos.nfc.tag@ohos.nfc.controller等系统接口。首先在module.json5中声明ohos.permission.NFC_TAG权限。通过tag.getNfcATag()等API获取标签对象,使用nfcController管理NFC开关状态。读写操作需调用对应标签类型的接口,如NfcATagtransmit()方法。

在HarmonyOS Next中,通过USB调用NFC设备,核心是使用系统提供的硬件抽象接口,而非直接操作libusb。以下是关键步骤和方向:

  1. 使用HDI接口:HarmonyOS Next通过硬件设备接口(HDI)对硬件进行抽象。你需要关注//drivers/peripheral/nfc//drivers/peripheral/usb目录下的HDI接口定义(.idl文件)。对于通过USB连接的NFC读卡器,通常需要同时与NFC和USB的HDI服务交互。

  2. 核心流程

    • 发现设备:通过查询USB HDI服务,获取已连接的USB设备列表,并根据供应商ID(VID)、产品ID(PID)或设备类(Class)过滤出你的NFC读卡器。
    • 获取NFC服务:在识别到特定USB设备后,通过系统能力框架或直接绑定,获取NFC控制器的HDI服务代理。
    • 控制与通信:通过NFC HDI服务代理(如INfcController接口)发送标准NFC指令(如APDU)。底层系统会处理与具体USB设备的通信。
  3. 代码参考

    • 查看OpenHarmony社区中//drivers/peripheral/nfc/hdi_service//drivers/peripheral/usb/hdi_service的实现,了解服务端如何管理硬件。
    • 参考//foundation/communication/nfc/nfc_controller等框架层代码,学习客户端如何调用HDI接口。
    • 重点关注//drivers/hdf_core/adapter/khdf/linux/model/usb中的USB主机控制器驱动模型,理解设备发现机制。
  4. 配置权限:在项目的module.json5配置文件中,声明必要的系统能力,例如ohos.permission.NFC_TAGohos.permission.USB_PERMISSION

重要提示:HarmonyOS Next的应用层和驱动层隔离严格,你的HAR包应基于公开的NFC API(@ohos.nfc.tag@ohos.nfc.controller等)开发。直接操作USB DDK或libusb的模式在Next上不可行。你需要将USB NFC读卡器视为一个整体的NFC硬件设备,通过标准的NFC系统接口来调用。

建议直接分析OpenHarmony主干代码库中NFC和USB的HDI实现,这是最权威的参考资料。

回到顶部