NFC从驱动读取信息到通知应用层的流程

phTmlNfc_StartThread 函数中创建了读线程phTmlNfc_TmlThread,

phTmlNfc_i2c_readphTmlNfc_TmlThread 循环调用阻塞读取数据,然后调用:

  phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &tMsg);

把message发送给上一层的线程 ,
具体是:发送message给queue:nxpncihal_ctrl.gDrvCfg.nClientId ,然后通过semaphore 来唤醒读线程。

sem_post +1
sem_wait -1

接受数据的线程:

在phNxpNciHal_MinOpen函数中创建了一个线程: phNxpNciHal_client_thread,
它会无限循环调用phDal4Nfc_msgrcv 从 p_nxpncihal_ctrl->gDrvCfg.nClientId 这个队列接受数据 。

具体到一种消息类型:

NCI_HAL_OPEN_CPLT_MSG :

在 phNxpNciHal_open_complete 中创建了 一个msg.eMsgType 为 NCI_HAL_OPEN_CPLT_MSG 的 msg ,然后通过 phDal4Nfc_msgsnd 发送给上层 。
而 phNxpNciHal_open 调用 phNxpNciHal_open_complete ,也就是在打开设备文件成功之后会发送NCI_HAL_OPEN_CPLT_MSG 出来。

然后在 phNxpNciHal_client_thread 中会将NCI_HAL_OPEN_CPLT_MSG 转为 HAL_NFC_OPEN_CPLT_EVT ,调用 nxpncihal_ctrl.p_nfc_stack_cback 到

nfc_main_post_hal_evt 然后 到 GKI_send_msg(NFC_TASK, NFC_MBOX_ID, p_msg);
GKI_send_msg(NFC_TASK, NFC_MBOX_ID, p_msg);

然后会最终调用到NfcService代码里面 。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值