![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android Bluetooth
文章平均质量分 70
Android蓝牙架构,协议,驱动
优惠券已抵扣
余额抵扣
还需支付
¥99.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
打个工而已
这个作者很懒,什么都没留下…
展开
-
Android 蓝牙
从事Connectivity模块几年时间了,Team负责集成包括WiFi/Bluetooth(A2DP Source/Sink,HID[key/Audio],OPP,SPP)投屏类[Miracast,DLNA(DMR/DMP/DMS)],网络传输加密类协议(HDCP,DTCP)等功能;最近写了WiFi专栏30篇左右,想总结的东西很多,比如Miracast Sink,DLNA。。。。写一篇文章少则几小时,多则几天(断断续续),有时候还有画图。。。,毕竟每天还得搬砖嘛。原创 2021-10-26 16:58:36 · 4333 阅读 · 3 评论 -
Android13 Bluetooth更新
Android 13 版本说明原创 2023-02-21 19:36:00 · 2844 阅读 · 1 评论 -
Android12 A2DP连接[4]
1. avdt_ad_tc_data_ind1.1avdt_msg_ind2.avdt_ccb_hdl_discover_rsp2.1bta_av_disc_results3.bta_av_next_getcap4.AVDT_GetCapReq4.1avdt_get_cap_req5.avdt_ccb_hdl_getcap_rsp6.bta_av_getcap_results7.AVDT_OpenReq7.1avdt_scb_snd_setconfig_req8.a原创 2022-10-27 20:07:45 · 1003 阅读 · 0 评论 -
Android12 A2DP连接[3]
1.bta_av_connect_req处理2.AVDT_ConnectReq2.1avdt_ccb_event2.2avdt_ccb_action3.avdt_ad_open_req4.L2CA_ConnectReq24.1L2CA_ConnectReq5.avdt_ad_tc_open_ind5.1avdt_ccb_snd_cmd5.2avdt_ccb_ll_opened7.bta_av_proc_stream_evt8.bta_av_原创 2022-10-23 17:46:35 · 599 阅读 · 0 评论 -
A2DP连接总结
1. Log信息2. HCI流程分析2.1 SDP2.2 AVDTP 连接2.2.1 AVDTP_Discovery编辑2.2.2 AVDTP_Get_Capbilities2.2.3 AVDTP_Set_Configuration2.2.4 AVDTP_Open2.3 音频数据传输2.3.1 AVDTP_Start2.3.2 AVDTP_Data原创 2022-10-19 09:30:30 · 2872 阅读 · 0 评论 -
Android12 A2DP连接[2]
1.connectA2dpNative1.1 sBluetoothA2dpInterface 定义1.2get_profile_interface1.3btif_av_get_src_interface1.4bt_av_src_interface2. btav_source_interface_t->connect3.src_connect_sink3.1btif_queue_connect3.2connect_int4. 处理BTIF_AV_CONNECT_REQ_EVT4原创 2022-10-17 20:33:43 · 689 阅读 · 0 评论 -
Android12 A2DP连接[1]
1. BluetoothA2dp2. 发起连接2.1 接收BluetoothDevice.BOND_BONDED广播2.2onBonded2.3btConnector.openConnection2.4getProfileProxy3. 连接流程3.1BluetoothA2dp: connect3.2 IBluetoothA2dp.connect3.3connectWithAttribution3.4A2dpService.connect3.5A2dpStateMachi原创 2022-10-17 16:46:25 · 640 阅读 · 0 评论 -
HCI @Bluetooth Init
1. Init->scan1.1 HCI_Reset1.2HCI_Read_Buffer_Size1.3HCI_Host_Buffer_Size1.4HCI_Read_Local_Version_Information1.5HCI_Read_BD_ADDR1.6HCI_Write_Class_Of_Device1.7HCI_Write_Current_IAC_LAP1.8HCI_Write_Scan_Enable1.9HCI_Inquiry原创 2022-10-08 10:44:07 · 410 阅读 · 0 评论 -
AVRCP协议介绍
1. AVRCP协议介绍1.2 概念1.2.11.2.2 role用途2.AVRCP框架原创 2022-10-08 09:07:15 · 1570 阅读 · 0 评论 -
Android A2DP 初始化
1. A2DP Profile配置2. A2DP初始化2.1startProfileServices2.2setAllProfileServiceStates2.3startService->A2dpService2.4 A2dpService.start原创 2022-10-03 15:35:47 · 785 阅读 · 0 评论 -
A2DP协议连接&数据传输
A2DP协议连接&数据传输1. A2DP协议连接1.1 AVDTP1.2 AVDTP 交互流程2. A2DP 音频格式原创 2022-10-03 14:47:43 · 1753 阅读 · 0 评论 -
AVDTP协议
1. AVDTP协议介绍2. AVDTP连接&传输2.1 signaling交互2.1.1 signaling 命令2.1.2 A/V Stream 建立流程AVDTP连接&传输原创 2022-10-03 13:58:56 · 1043 阅读 · 0 评论 -
A2DP协议介绍
A2DP协议1. Introduction1.1 Scope1.2 Profile Dependency2. Profile Overview2.1 Profile Stacks原创 2022-10-03 12:13:31 · 1256 阅读 · 0 评论 -
Android Bluetooth 集成
代码模块功能集成1. 硬件2. 软件2.1 AOSP 源码2.2 平台集成原创 2022-09-27 16:54:31 · 891 阅读 · 1 评论 -
Android 12 Bluetooth Open[3]
讲到了JNI获取了Bluedroid协议栈的操作接口结构体bt_interface_t,调用了sBluetoothInterface->enable() 打开蓝牙。继续看sBluetoothInterface。原创 2022-09-26 21:40:17 · 674 阅读 · 0 评论 -
工具分析HCI Log[FrontLine&Wireshark]
主要操作就是切换这些标签,查看不同层或者协议的交互,具体看什么问题,后续会针对BT Open,Scan,Pair、Connect进行针对的流程分析哈,操作很简单,下载个玩玩即可!Ellisys 和上面两款的区别是上面只是分析HCI Log,至于蓝牙芯片有没有把数据包发送、接收成功是不知道,wireshark通常用于分析网络抓包,当然也可以解析HCI Log,不是主流作法哈,这里提示下!,价格也很贵,几十个W吧,我们公司不给我买,抱歉,无法展示!上图就是Frontline打开HCI log文件界面。原创 2022-09-26 20:59:25 · 2576 阅读 · 2 评论 -
Android 12 Bluetooth Open[2]
Android 12 Bluetooth Open[2]1.Java 调用1.1 处理BLE_TURN_ON消息1.2 AdapterService.bringUpBle1.2.1 Config.init1.2.2 mRemoteDevices.reset1.2.3 mAdapterProperties.init1.2.4 BondStateMachine.make1.2.5 mJniCallbacks.init1.2.6 setProfileServiceState1.3 GattSe原创 2022-09-26 19:31:59 · 939 阅读 · 0 评论 -
Android 12 Bluetooth Open[1]
定义位于:system/bt/service/common/android/bluetooth/IBluetooth.aidl。IBluetoothManager.aidl 位于system/bt/binder/android/bluetooth/上面的log显示启动了Bluetooth HIDL service,提供了上次应用调用HAL的接口。蓝牙有的产品是没有开关的,比如TV,用了蓝牙遥控器的情况下,关闭了蓝牙后果。手机的蓝牙是可以开关的,所以开机启动蓝牙与否取决于您的产品需求定位!原创 2022-09-26 09:48:23 · 674 阅读 · 0 评论 -
Android HCI log
(Host controller Interface)就定义了这样的一个标准,如果想知道软件让蓝牙芯片做了什么,蓝牙芯片的响应结果,通过分析HCI log是很不错的一个选择!任何平台,蓝牙和主CPU都不是一体的,硬件上大多通过USB/Uart等硬件通信;软件上不同的CPU和不同的蓝牙芯片之间通信就需要一个标准,这里的HCI。原创 2022-09-25 15:14:18 · 908 阅读 · 0 评论 -
Android Bluetooth 架构
中)被打包为 Android 应用,并在 Android 框架层实现蓝牙服务和配置文件。API 和蓝牙进程会调用的标准接口,并且您必须实现该接口才能使蓝牙硬件正常工作。蓝牙 HAL 的头文件是。当发生特定蓝牙操作时(例如发现设备时),JNI 代码会调用 HAL 层并从 HAL 接收回调。该堆栈会实现常规蓝牙 HAL,并通过扩展程序和更改配置对其进行自定义。5. Driver 包括蓝牙驱动,硬件接口(蓝牙和主CPU硬件连接)驱动。4.3 Vendor HAL为蓝牙芯片厂商提供的操作驱动的接口。原创 2022-05-16 16:27:51 · 2389 阅读 · 0 评论 -
AVRCP协议
CT(controller)设备:通过发送命令帧到目标发起传输。如PC,PDA,电话, 车载系统,耳机,播放/录音设备。TG(target)设备:接收命令并按命令响应的设备,如播放/录音设备,电视,耳机等。针对蓝牙联盟官方文档,选取一些章节学习。专门传送IMG的BIP协议。原创 2021-05-22 15:27:02 · 319 阅读 · 0 评论 -
AVRCP触发连接
AVRCP触发连接原创 2021-03-04 17:56:20 · 334 阅读 · 1 评论 -
AVRCP @ 音量反向控制流程
的确是avct_lcb_msg_ind处理接收到的AVCTP消息,AVRCP协议就是基于AVCTP协议的连接!上面看起来有点绕,最终执行(*avct_lcb_action[action])(p_lcb, p_data);avct_lcb_event中action 为 值不等于AVCT_LCB_IGNORE的函数指针;在avct_lcb_action 找到AVCT_LCB_MSG_IND!找到AVCT_LCB_MSG_IND,事情还没完!LCB_OPEN_ST状态下LL_MSG_EVT。原创 2021-05-17 19:01:08 · 940 阅读 · 0 评论 -
AVRCP 协议
AVRCP 协议/* command type codes */#define AVRC_CMD_CTRL 0 /* Instruct a target to perform an operation */#define AVRC_CMD_STATUS 1 /* Check a device's current status */#define AVRC_CMD_SPEC_INQ ...原创 2021-05-11 20:38:49 · 852 阅读 · 2 评论 -
Avrcp连接流程
Android 11 Avrcp连接流程本篇整理下 Android 11 Avrcp的连接流程,故事得从A2DP连接说起。。。。android-11.0.0_r3/packages/apps/Bluetooth/src/com/android/bluetooth/a2dp/A2dpService.java----------------------------------------------------------------------------------------.原创 2021-05-17 11:15:41 · 1782 阅读 · 0 评论 -
Android 蓝牙绝对音量
绝对音量:Absolute volume,使CT和TG两端的音量等级相同,允许CT端展示音量等级,该功能主要提供了如下两个命令来处理音量。RegisterNotification:注册音量变化的通知事件,来观察音量变化,对方音量等级改变后通过监听来改变本端的音量等级。SetAbsoluteVolume:设置绝对音量,音量变化的一方主动将音量等级设置到对方。此功能提供了音量处理功能,以允许CT显示音量级滑块或类似功能。命令用于CT端监测TG的音量变化,或者实际音量大小。原创 2021-05-18 15:02:52 · 2655 阅读 · 0 评论 -
AVRCP@[1] AvrcpTargetService启动
配置profile_supported_avrcp_target。原创 2021-02-20 14:20:01 · 738 阅读 · 1 评论 -
Bluetooth HID 键值Kernel态转换
在include/linux/hid.h定义了 HID Usage Page,上面蓝牙遥控器的Usage Page[0x0C]对应的HID_UP_CONSUMER。在蓝牙配对连接后Android系统如何把蓝牙遥控器厂商的键值接入linux Kernel Input系统?000C0042理解为物理键值,即为 Usage Page + Usage ID。最终UP键转换对应在drivers/hid/hid-input.c。这里以蓝牙遥控器为例,一般遥控器厂商会给出上图的键值对应表!原创 2021-05-10 14:11:23 · 1126 阅读 · 0 评论 -
HFP&HSP协议
目录HFP&HSP协议HFP&HSP协议HFP(Hands-free Profile)和HSP(Headset Profile)都是为了实现蓝牙通话而制定,所实现的功能都和蓝牙通话相关。基本所有的蓝牙耳机、车载蓝牙都会支持这两个协议。 HSP仅实现了最基本的通话操作:接听电话、挂断电话、调节音量、声音在手机/蓝牙耳机之间切换。 HFP在功能上是对HSP的扩展,除了上述功能以外,还包括控制三方通话、来电拒接、耳机端来电显示等高级功能,不过实现的方式,如用于控制的AT..原创 2021-05-13 13:44:47 · 2285 阅读 · 0 评论 -
蓝牙Authentication介绍
如上图,Legacy Authentication过程中Verifier[校验者]没有要求必须是Master role,有两次交互过程。Secure Authentication中,Master和Slave都扮演Verifier和Claimant ,有四次交互校验过程。如果至少有一个设备同时不支持安全连接(控制器支持)和安全连接(主机支持)功能,并且本地设备允许使用旧身份验证,则应使用旧身份验证。当两个设备都支持安全连接(控制器支持)和安全连接(主机支持)功能时,应执行安全身份验证。原创 2021-11-13 17:33:00 · 1131 阅读 · 0 评论 -
蓝牙配对HCI交互流程
参考资料:在HCI层看蓝牙的连接过程_启程-CSDN博客前言从蓝牙设备状态转换可以知道,蓝牙设备连接需经过Inquiry,page过程,本文主要从HCI角度分析连接过程。解析抓包文件用到的工具为Frontline 的Capture File Viewer。HCI简介HCI(Host Controller Interface):Core_v4.1规定了四种类型的接口,分别为普通串口(不带流控制),usb接口,SD接口,三线https://blog.csdn.net/u010657219/article/d原创 2021-11-13 13:06:10 · 2598 阅读 · 0 评论 -
Android 11 BT配对流程[4] - 配对状态上报流程
蓝牙配对从BOND_NONE->BOND_BONDING->BOND_BONDED。上面完成了JNI-> Java层的调用。继续看看JNI的实现。原创 2021-11-08 17:33:05 · 2380 阅读 · 0 评论 -
Android 11 BT配对流程[5] 配对交互
前面整理了3章从APK-JNI->Stack的配对流程调用这里开始学习配对结果处理以及上报。。。。原创 2021-10-26 16:51:16 · 984 阅读 · 0 评论 -
Android 11 Bluedroid初始化系列
目录init_layer_interfaceinit_layer_interface每次发送HCI命令的hci_layer_get_interface()->transmit_command()const hci_t* hci_layer_get_interface() { if (bluetooth::shim::is_gd_shim_enabled()) { return bluetooth::shim::hci_layer_get_interface()原创 2021-10-26 16:43:33 · 466 阅读 · 0 评论 -
ACL&SCO链路介绍
目录ACLSCOACLSCOACL(AsynchronousConnectionless),和另一种链路是SCO(Synchronous Connection Oriented)。SCO主要用于同步话音传送,ACL主要用于分组数据传送原创 2021-10-26 15:24:20 · 1347 阅读 · 0 评论 -
Android 11 BT配对流程[3]
前面讲到btm_sec_bond_by_transport 这个接口,继续---->/******************************************************************************* * * Function btm_sec_bond_by_transport * * Description this is the bond function that will start eithe...原创 2021-10-26 16:22:02 · 1257 阅读 · 0 评论 -
蓝牙SSP&SMP协议介绍
目录SSP目的SSPSSP(Secure Simple Pairing)安全简单配对1. 目的1.为用户简化配对过程2.维护或提高蓝牙无线技术的安全性通过提供一些关联模型来简化配对过程。这些模型具有适应不同设备输入/输出能力的灵活性。SSP也通过增加ECDH公钥加密来改进安全性,以防止配对过程中的被动窃听和中间人(MITM)攻击。2. 关联模型2.1 NumericComparison(数值比较)Numeric Comparison associ...原创 2021-10-25 18:35:38 · 3521 阅读 · 0 评论 -
Android 11 BT配对流程[2]
上面讲到Android JAVA层的调用,这里开始学习Bluedroid协议栈处理create_bond 的流程system/bt/btif/src/bluetooth.ccstatic int create_bond(const RawAddress* bd_addr, int transport) { /* sanity check */ if (!interface_ready()) return BT_STATUS_NOT_READY; return btif_dm_cre原创 2021-10-23 16:45:50 · 736 阅读 · 0 评论 -
Android 12 BT 配对流程[1]
IBluetooth 是system/bt/service/common/android/bluetooth/IBluetooth.aidl一个AIDL接口,这里是跨进程调用,看哪里实现了这个AIDL接口即可!这里走 createBondNative还是createBondOutOfBandNative取决于上层的调用没有数据,这里我们分析createBondNative。这里调用到JNI了,不懂的可以学习下JNI的动态注册,具体怎么看出来的呢?这里记录上层应用的调用流程!后面继续,回去洗洗睡!原创 2021-10-23 16:36:35 · 1343 阅读 · 0 评论 -
SDP 服务
SDP 服务介绍以下文档来自于bt core_V5.2.pdf蓝牙服务介绍1.1 GENERAL DESCRIPTION The Service Discovery protocol (SDP) provides a means for applications to discover which services are available and to determine the characteristics of those available servi...原创 2021-10-22 14:56:57 · 522 阅读 · 0 评论