[转载]NFC Enable

时间:2024-03-18 20:45:36

https://blog.csdn.net/weixin_44260005/article/details/103092016

NFC Enable

认识NFC系统是如何工作的,最好的方法莫过于熟悉NFC各个流程,本篇就介绍下NFC使能的流程。

NFC的上层服务 com.android.nfc 启动随着使能整个NFC系统,通过JNI层的 NativeNfcManager.nfcManager_doInitialize()初始化底层的相关so库。

整个使能的过程中,需要记住层层向下设置的回调函数,这些回调都是以后底层数据上报的通路。Enable的详细流程图如下:
[转载]NFC Enable
上面红色字体标注的相关函数在整个NFC系统中是很重要的回调。打开NFC模块的相关操作,具体请查看 《NFC Controller》。模块打开完成后通过 HAL_NFC_OPEN_CPLT_EVT 事件上报完成的结果。打开的完成事件上报流程见下图:
[转载]NFC Enable
打开的完成事件(数据)上报最终都会通过NFC_TASK线程的处理函数nfc_task(),接收到NFC_TASK_EVT_TRANSPORT_READY事件,协议栈会默认重置、初始化NFC芯片(同打开NFC模块时重置、初始化芯片流程一样),同时改变nfc_cb.nfc_state的状态:NFC_STATE_W4_HAL_OPEN -> NFC_STATE_CORE_INIT。

数据下发的一般流程为协议栈按照指令的不同封装数据格式,最后调用HAL_WRITE()将数据下发到底层芯片so库中继续处理,最后通过I2C总线将数据写入芯片。硬件芯片收到数据处理完成后会对下发的指令进行回复,芯片so库会将数据读取上来并上报给上层处理。芯片so库的读、写是如何工作的可以查看《NFC Controlle》。
芯片so库的读数据上报的流程见下图:

[转载]NFC Enable

图中蓝色标注的为NFC芯片处理模块,鸡蛋色标注的是上层NFC协议栈、JNI层或NFC服务模块。

经过Reset、Init指令的成功执行后nfc_cb.nfc_state的变化为:NFC_STATE_CORE_INIT -> NFC_STATE_W4_POST_INIT_CPLT。

最后调用nfc_cb.p_hal->core_initialized()内核初始化完成。在core_initialized的完成事件上报中将nfc_cb.nfc_state的状态值置到一个正常值:NFC_STATE_IDLE。

以NFA_DM_ENABLE_EVT事件上报到JNI层代表NFC系统的初始化工作完成,最后设置芯片进入断电休眠模式(LOW_POWER)来降低功耗。最终的 nfc_cb.nfc_state:

NFC_STATE_IDLE -> NFC_STATE_NFCC_POWER_OFF_SLEEP。

更多互联互通技术,欢迎关注微信公众号:Connectivity
[转载]NFC Enable