1. 简介

刚刚毕业接触到了一个挺有意思的蓝牙TWS (Bluethooth True Wireless Stereo)的项目。由于在建立语音通路(SCO, Synchronous Connection Oriented link)时,对实时性要求很高。TWS Master 将SCO数据转发给TWS Slave,会造成多个 场景下的卡顿或延迟。

因此考虑使用TWS Slave 建立一个虚拟的SCO链路来监听Moble 和 TWS master的通话内容。

  1. 实时监听,不用担心转发不及时所产生的卡顿等问题;
  2. 降低了TWS Master的功耗;
  3. 可以随时进行主副耳的切换和麦克的切换
    2017年8月15日23:18:36

2. 技术路线

  1. 建立一个无连接的ACL(Asynchronous Connection Less)链路;
  2. 建立一个无连接的SCO链路;
  3. TWS 双耳联调。
    2017年8月16日22:51:09

3. 调试

蓝牙构建一个sniffer大多功能是在controller中实现的,所以使用WVT(Waves Validation Tool)向controller下发HCI(Host control interface)command会大大提升调试效率。
我们可以选择一款CSR的Bluetooth Dongle,通过WVT工具与controller进行链接。这样我们就完全脱离了HOST的控制,单纯对controller进行开发与调试。
2017年8月21日23:04:03

1.Register debug handler
本IP的hci_command_handler使用的是一种查表的方式,通过提前注册好的OP Code,来查找相应的debug服务函数;
2. Send HCI command from WVT
利用WVT,将蓝牙适配器和controller进行连接,下发HCI命令
3. Callback the debug function
执行回调函数,并且返回执行状态给WVT

  • HCI调试接口示例代码片
static int
dbg_set_sniffer_env_handler(ke_msg_id_t const msgid,struct dbg_sniffer_env_cmd const *param,ke_task_id_t const dest_id,ke_task_id_t const src_id)
{// structure type for the complete command eventstruct hci_basic_cmd_cmp_evt *event;// allocate the status event messageevent =  KE_MSG_ALLOC(HCI_CMD_CMP_EVENT, src_id, HCI_DBG_SET_SNIFFER_ENV_CMD_OPCODE, hci_basic_cmd_cmp_evt);ld_set_sniffer_env(param->sniffer_active, param->sniffer_role, param->monitored_dev_addr.addr, param->sniffer_dev_addr.addr);event->status = CO_ERROR_NO_ERROR;// sends the messagehci_send_2_host(event);return (KE_MSG_CONSUMED);
}

目前已经成功监听到了TWS Master 和手机的通话,接下来会不定时更新技术路线,大家多交流,刚入门菜鸡一只,期待指教!

用蓝牙构建一个sniffer来监听通话相关推荐

  1. Android 监听通话状态(挂断 监听 来电)实现自动外呼 按顺序拨出电话 间隔5秒

    最近项目也是添加一个小功能 监听通话状态实现一个自动外呼的功能 我在这里简单的实现了一下转了几天的博客可各大网站找出了一个最简单也好理解的一个方法(至今为止) 其实就用到了我们Android源生自带的 ...

  2. android监听通话状态

    samsung提审结果报告里: application sound is audible during the call in pop up window //在弹出窗口中的呼叫期间,<缺陷&g ...

  3. JDK的一个Bug,监听文件变更要小心了

    背景 在某些业务场景下,我们需要自己实现文件内容变更监听的功能,比如:监听某个文件是否发生变更,当变更时重新加载文件的内容. 看似比较简单的一个功能,但如果在某些JDK版本下,可能会出现意想不到的Bu ...

  4. Android 蓝牙(有线)耳机监听的问题

    MediaButtonReceive只是作为一种通俗的命名方式来响应插入耳机后,点击耳机上的按键(MEDIA_BUTTON)接受该广播事件类. 点击MEDIA_BUTTON发送的Intent Acti ...

  5. 写了一个开机启动,监听通话的demo

    最近在看猪八戒的网站,看到有些客户的需求,就做了一个小小的demo. 需求基本上是这样的,主要的就是定位,APP开机启动,电话录音,APP 图标不可见. 定位就不多说了,开发者都应该用过腾讯,高德或者 ...

  6. 打开一个页面,并监听该页面的关闭事件

    页面1 <!--WebForm1.aspx--> <html xmlns="http://www.w3.org/1999/xhtml"> <head ...

  7. 基于BluetoothKit-蓝牙设备不可见,蓝牙方法不可调,蓝牙修改本机名字,蓝牙连接监听的问题

    这两天又在搞蓝牙,蓝牙伤我千百遍,我待蓝牙如初恋. 有位朋友说,做个appdemo,来和他的蓝牙模块进行交互.我发现我对蓝牙真的是连冰山一角都还没了解完.说说我都遇到了什么问题吧. 1.两个手机都打开 ...

  8. 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的...

    学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听.接收和响应请求的 原文:学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一 ...

  9. 架构篇:Tomcat 高层组件构建一个商业帝国

    Tomcat 实现的 2 个核心功能: 处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化. 加载并管理 Servlet ,以及处理具体的 Request 请 ...

最新文章

  1. 零基础入门学习Python(6)-常用操作符
  2. JavaScript基础---语言基础(1)
  3. Java Mail+Thymeleaf模板引擎实现发送HTML格式邮件
  4. 如何看创建媒体日期_每天约4万个网约车投诉,看AI如何接招_媒体_澎湃新闻
  5. jQuery中的几个案例:隔行变色、复选框全选和全不选
  6. 南京信息工程大学百科园c语言答案,南京信息工程大学822C/C++程序设计考研真题及笔记...
  7. 米斯特白帽培训讲义(v2)漏洞篇 第三方风险
  8. 人脸识别门禁系统在2019年会加快应用
  9. [undo]ip address ppp-negotiate
  10. scala属性/成员变量
  11. 学习pythonweb开发_Python学习--20 Web开发
  12. 机器学习基础算法19-决策树实践-决策树回归-决策树用于拟合
  13. 计算机的自动播放功能有什么用,禁用自动播放功能的几种方法
  14. 追寻ARM的起源-Acorn电脑简史及FPGA实现
  15. 南京IT行业企业比较
  16. 机器学习技术在日常生活和商业领域的应用有哪些,主要带来了什么商业收益?
  17. Matlab数字图像的傅里叶变换(FFT)
  18. 【宋红康 MySQL数据库 】【高级篇】【12】性能分析工具的使用
  19. 一步步做一个数字手势识别APP
  20. “有些时候,想要赢得天才的尊重,就只能违抗他” |【经纬低调分享】

热门文章

  1. 薪资待遇#23届#海尔#嵌入式软件
  2. Ventoy:u盘制作,usb启动盘,超级好用的装机神器
  3. 扩展:收藏网上胖友的面试题
  4. php高洛峰_PHP 验证码   高洛峰 细说PHP
  5. css 控制文字换行相关属性
  6. grpc---客户端流式
  7. Unreal Engine 4 —— Smear Frame效果的实现与分析
  8. Tmux常用命令小结(超全够用)
  9. 《数据结构(c++语言版)》 清华大学邓俊辉
  10. jsp+ssm计算机毕业设计智能视频推荐网站【附源码】