Andorid BluetoothSocket的工作原理之五

问题点7:原生BluetoothSocketBlueDroid中,接收java 层通过“app_fd 发送,底层通过“fd”接收的核心

---底层轮询是在API sock_poll_thread中完成,然后交给API process_data_sock处理;

 这里需要注意的是结构体“pollfd”尤其注意events的设置,如果设置不正确,会导致poll 无法捕抓到相关事件触发;

目前Source Code 中通过:

btsock_thread_add_fd-->add_poll-->set_poll 中的flag栏位进行设置;

在方法process_data_sock中需要理解的是remove_poll

如清理SOCK_THREAD_FD_RD,其会在监测数据后先清理pollfd中的写入标志位,使得poll 暂时停止检测fd;

-->此时调用“if (flags) ts[h].callback(pfds[i].fd, type, flags, user_id);”读取当前数据,如callback 方法是:btsock_signaled;

-->把数据通过RFCOMM channel 发送给Remote device;

-->RFCOMM channel 反馈data 写出完成后,触发方法rfcomm_cback(event值为33BTA_JV_RFCOMM_WRITE_EVT);

-->在函数on_rfc_write_done重新添加pollfd中的标志位的写入标志位,使得poll 可以再次从此fd读取数据 

小结:目前推测此方法是为了避开在RFCOMM channel 写出过程中再次从socket中收到从“app_fd”发出的data

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值