调用 NFA_Enable 启用 nfc ,
stat = NFA_Enable(nfaDeviceManagementCallback, nfaConnectionCallback);
nfaConnectionCallback 是一个事件回调函数。
nfaConnectionCallback 收到 NFA_DISC_RESULT_EVT: ------->
handleRfDiscoveryEvent();
NFA_DISC_RESULT_EVT 是哪里发出来的?
NFC_DiscoveryStart 传入callback ------>
nfa_dm_disc_discovery_cback ------>
nfa_dm_disc_sm_execute ------>
如果 state 是 NFA_DM_RFST_DISCOVERY ------>
nfa_dm_disc_sm_discovery 收到 NFA_DM_RF_DISCOVER_NTF ------>
nfa_dm_notify_discovery ------>
给上层发送NFA_DISC_RESULT_EVT事件。
最终都是在nfc_task中循环调用 GKI_wait 得到事件,如果事件掩码是 BT_EVT_TO_NFC_NCI ------->
nfc_ncif_process_event ------->
nci_proc_rf_management_ntf ------->
nfc_ncif_proc_discover_ntf 。
函数 nfc_ncif_proc_discover_ntf 用来处理 discover notification ,
它调用 nfc_cb.p_discv_cback :
(*nfc_cb.p_discv_cback)(NFC_RESULT_DEVT, &evt_data);
实际调用的是: nfa_dm_disc_discovery_cback
。
所以,最终我们要看的是谁往GKI 发送BT_EVT_TO_NFC_NCI 事件呢?
nfc_main_hal_data_cback 调用 GKI_send_msg
PN54X device
phTmlNfc_i2c_open_and_configure 在这里打开设备,打开句柄保存在 phTmlNfc_i2c_open_and_configure. pDevHandle 中 。
phTmlNfc_TmlThread 用于从驱动读取数据。
phTmlNfc_TmlWriterThread 用于往驱动写入数据。