零. 概述

本小节主要介绍下用PC上位机测试蓝牙协议栈功能HFP Profile,包括

拨打电话,挂断电话,接听电话,Audio Transfer,获取通话电话号码,获取本地电话号码,激活语音识别,获取本地号码,获取运营商名字,3GPP指令.

注意:此上位机我已经集成了串口助手功能,所以不需要额外的开串口工具,集串口助手以及协议栈测试一体的工具

使用视频如下:

超级酷炫!!上位机跟蓝牙电话协议栈搭配,实现PC控制手机

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. 上位机-蓝牙电话功能介绍

整个通信架构如下:

上位机主要通过UART跟蓝牙开发板通信,用于发送指令给蓝牙开发板,并且用于接收蓝牙开发板的回传状态

上位机-蓝牙电话功能图篇如下:

整个蓝牙电话一共分几个功能区:

① 串口配置区,此部分包括自动侦测热插拔,串口打开,关闭功能,注意波特率是115200,其他数据格式没有开放出来(数据位是8,停止位为1,无奇偶校验)

② 蓝牙功能开启/关闭按钮,后续所有的功能要在蓝牙开启的条件下测试

③ HFP状态信息,包括HFP连接状态,对端的BT mac地址,信号强度显示以及电量显示

④ 部分HFP测试区,包括获取运营商名字,获取本地号码,开启/关闭语音信箱,扩展HFP的3GPP指令获取手机制造商名字,扩展HFP的3GPP指令获取手机组件名称

⑤ 通话信息区测试,包括通话状态显示,通话时间显示,通话号码显示,接听电话,挂断电话,切换音源(Audio Transfer),设置MIC/SPK的印象,通话中键盘号码发送(DTMF)

⑥ 拨打电话号码区

⑦ 串口助手区,包括接收区以及发送区

注意:上位机跟MCU是通过串口指令交互json指令来实现控制以及状态回传的,所以在运行APP的时候需要把Newtonsoft.Json.dll放在跟exe一个路径下,交互指令如下

① 上位机控制MCU的指令如下:

蓝牙测试例程上位机发送给开发板JSON格式
说明FUNCOPERATEPARAM1PARAM2PARAM3PARAM4PARAM5PARAM6
HFP获取运营商名字BTHFP_NET_N      
HFP Audio TransferBTBT_AUDIO_TRANSFER      
HFP接听来电BTHFP_ANSWER      
HFP挂断电话BTHFP_CALLEND      
HFP通过手机号拨打电话BTHFP_CALLOUT_PN电话号码     
HFP获取本机电话号码BTHFP_LPN      
HFP获取通话电话号码BTHFP_CLCC      
HFP设置MIC音量BTHFP_VGMMIC音量值     
HFP设置SPK音量BTHFP_VGSSPK音量值     
HFP发送通话键盘号BTHFP_DTMF键盘号     
HFP开启语音识别功能BTHFP_VGE      
HFP关闭语音识别功能BTHFP_VGD      
HFP获取厂商名称BTHFP_CGMI      
HFP获取手机名称BTHFP_CGMM      

② MCU回传给上位机的指令如下:

蓝牙测试例程开饭发送给上位机JSON格式
说明FUNCOPERATESTATUSPARAM1PARAM2PARAM3PARAM4PARAM5
HFP连接成功BTBT_CON_RESULTSUCCESS/FAILHFP蓝牙地址   
HFP断开成功BTBT_DISCON_RESULTSUCCESS/FAILHFP    
HFP SCO连接成功BTBT_SCO_CON_RESULTSUCCESS/FAILHFP蓝牙地址   
HFP SCO断开成功BTBT_SCO_DISCON_RESULTSUCCESS/FAILHFP    
HFP信号强度更新BTBT_HFP_SIGNAL_STRENGTHSUCCESS信号强度    
HFP漫游状态更新BTBT_HFP_ROAM_STATUSSUCCESS漫游状态    
HFP电量状态更新BTBT_HFP_BATT_LEVELSUCCESS电量状态    
HFP运营商名称更新BTBT_HFP_OPERATORSUCCESS运营商名称    
HFP电话状态更新BTBT_HFP_CALL_STATUSSUCCESS电话状态    
HFP电话Setup状态更新BTBT_HFP_CALL_SETUPSUCCESS电话Setup状态    
HFP本地号码更新BTBT_HFP_LOCAL_PNSUCCESS本地号码    
HFP电话号码更新BTBT_HFP_CALL_PNSUCCESS电话号码    
HFP厂商名称更新BTBT_HFP_MANU_IDSUCCESS厂商名称    
HFP设备名称更新BTBT_HFP_MODULE_IDSUCCESS设备名称    
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐