专业开发者
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MTK关于HW WCN 蓝牙知识分享
MT6631芯片的蓝牙功能支持情况:搭配MT6761/62/65平台可完全支持BT5.0特性,但搭配MT6771及更早平台仅支持BT5.0标识。该芯片不再支持蓝牙ANT+功能。蓝牙发射功率可通过修改配置文件参数进行调整:BLE功率每降一级约降低4dB,BR/EDR功率支持8级调节。CE适应性测试需注意:干扰发生后3.2秒内Tx累计时间需≤40ms,70秒内不得传输,测试时需提供准确的Tx功率参数。产品认证信息可通过蓝牙官网查询Mediatek相关条目获取。原创 2025-05-28 11:15:50 · 146 阅读 · 0 评论 -
MTK平台 -- 关于HID协议的讲解
The Human Interface Device (HID) ,即人机交互设备。定义了蓝牙在人机接口设备中的协议、特征和使用规程。典型的应用包括蓝牙鼠标、蓝牙键盘、蓝牙游戏手柄等。该协议改编自US HIDProtocolH OST相当于PC主机,device相当于鼠标、键盘这些USB外设ble hid中,可以看做蓝牙设备就是device,手机就是host。原创 2025-02-19 11:16:31 · 137 阅读 · 0 评论 -
通过HCI log查看配对连接过程
Authentication_Requirements:是否需要 auth(log中为MITM Protection Not Required, No Bonding)这里可以看到slave的Bluetooth Device Address: 0x14-99-3e-5e-19-3b。OOB_Data_Present:是否需要 OOB data(log中为None)IO_Capability:IO能力(log中为DisplayYesNo)手机和手机蓝牙配对连接或者手机与耳机配对连接目前均走以下几个部分。原创 2025-02-13 11:37:25 · 199 阅读 · 0 评论 -
蓝牙平台--Framework层到协议之间如何添加参数
3. 上面的截图可以看到,我在 sBluetoothHidInterface->disconnect((RawAddress*)addr, reconnect_allowed);方法中新增了reconnect_allowed参数。这个目录下HidHostService.java方法中disconnectHidNative()方法中新增boolean reconnectAllowed的参数.那么对应的sBluetoothHidInterface对应的结构是bthh_interface_t,可以看如下的代码。原创 2025-01-03 16:17:38 · 129 阅读 · 0 评论 -
MTK平台--关于CFG_BT_Default.h 文件介绍
1. 存储在NVRAM中。这些设置将通过供应商特定的HCI命令设置。这些设置存储在AP_CFG_RDEB_FILE_BT_ADDR_LID中。▪ TX功率信道偏移补偿。▪ 蓝牙睡眠模式配置。原创 2024-12-23 13:41:24 · 173 阅读 · 0 评论 -
MTK项目蓝牙电流数据
max interval: 0x0130) 给到 BT, 同时 BT 有回 MSG_ID_BT_GATTC_CONN_PARAM_UPDATE_CNF(result 为 0), 但是 conn interval 还是 20mS.(2), 直接将 mmi_pxpapp_set_adv_pattern() 以及 mmi_pxpapp_set_adv_param_req() 两个 API, 搬到 gattcsrv, 修改一下函数名, 及变量名即可.该问题是 Smart Phone huawei P7 端问题.原创 2024-11-01 15:27:59 · 153 阅读 · 0 评论 -
蓝牙HCI的log分析方法
Bluetooth HCI log 的最主要功能是用于分析蓝牙设备之间的交互行为是否符合预期,以及是否符合 蓝牙规范之规定。基本上,在手机应用平台上,除了蓝牙功能无法打开以及蓝牙引起的 system crash 问题之外,蓝牙相 关的问题,均可以通过分析 HCI log 来定位问题。具体主要围绕以下5个方面:1. 搜索不到周围的设备2. 无法和指定设备配对、连接3. 无法连接 profile4. Performance 比较差5. Profile 或者链路异常断开。原创 2024-10-15 15:46:31 · 1066 阅读 · 0 评论 -
MTK平台--蓝牙驱动数据加载的过程
先看这张图可以知道架构LinuxKernel层:bluez协议栈、uart驱动, h4协议, hci,l2cap, sco, rfcommLibrary层:libbluedroid.so 等Framework层:实现了Headset /Handsfree 和 A2DP/AVRCP profile,但其实现方式不同Handset/Handfree是直接 在bluez的RFCOMM Socket上开发的,没有利用bluez的audio plugin,而A2DP/AVRCP是在bluez的audio plugin原创 2024-09-18 17:32:33 · 365 阅读 · 0 评论 -
蓝牙--关于Bta_gattc_main.cc文件的讲解
GATT是低功耗蓝牙属性应用规范,应用于主机和从设备之间的数据传输。原创 2024-09-10 14:54:03 · 538 阅读 · 0 评论 -
蓝牙--关于Bta_gattc_api.cc文件的讲解
GATT是低功耗蓝牙属性应用规范,应用于主机和从设备之间的数据传输。原创 2024-09-10 10:52:31 · 341 阅读 · 0 评论 -
蓝牙--关于Bta_gatts_api.cc文件的讲解
GATT是低功耗蓝牙属性应用规范,应用于主机和从设备之间的数据传输。原创 2024-09-10 10:37:57 · 422 阅读 · 0 评论 -
蓝牙--关于bta_av_ssm.cc文件的讲解
上层在建立A2dp connect连接的时候,先调用到btif层的btif_av.cc中函数src_connect_sink,接着调用bta层bta_av_api.cc中函数BTA_AvOpen,经过内部state machine处理,最终调用Stack层l2c_api.c中的函数L2CA_ErtmConnectReq。这样就在bluedroid中的连接过程就完成了。这里我们重点讲解下bta_av_ssm.cc的代码(BTA AV流状态机的实现)逻辑。BTA:提供各种profile的实现。原创 2024-09-09 10:31:13 · 276 阅读 · 0 评论 -
蓝牙--关于bta_av_main.cc文件的讲解
上层在建立A2dp connect连接的时候,先调用到btif层的btif_av.cc中函数src_connect_sink,接着调用bta层bta_av_api.cc中函数BTA_AvOpen,经过内部state machine处理,最终调用Stack层l2c_api.c中的函数L2CA_ErtmConnectReq。这样就在bluedroid中的连接过程就完成了。这里我们重点讲解下bta_av_main.cc 的代码(BTA AV的主要实施文件)逻辑。BTA:提供各种profile的实现。原创 2024-09-09 10:24:53 · 764 阅读 · 0 评论 -
蓝牙--关于bta_av_api.cc 文件的讲解
上层在建立A2dp connect连接的时候,先调用到btif层的btif_av.cc中函数src_connect_sink,接着调用bta层bta_av_api.cc中函数BTA_AvOpen,经过内部state machine处理,最终调用Stack层l2c_api.c中的函数L2CA_ErtmConnectReq。这样就在bluedroid中的连接过程就完成了。这里我们重点讲解下bta_av_api.cc 的代码逻辑。BTIF:提供bluedroid对外的接口。BTA:提供各种profile的实现。原创 2024-09-06 10:13:01 · 259 阅读 · 0 评论 -
蓝牙--关于btif_av.cc文件的讲解
上层在建立A2dp connect连接的时候,先调用到btif层的btif_av.cc中函数src_connect_sink,接着调用bta层bta_av_api.cc中函数BTA_AvOpen,经过内部state machine处理,最终调用Stack层l2c_api.c中的函数L2CA_ErtmConnectReq。这样就在bluedroid中的连接过程就完成了。这里我们重点讲解下btif_av.cc的代码逻辑。BTIF:提供bluedroid对外的接口。BTA:提供各种profile的实现。原创 2024-09-06 10:09:51 · 659 阅读 · 0 评论 -
蓝牙--关于bta_ag_sco.cc文件的讲解
HF(Hands-Free unit)测:是指作为音频网关的远程音频输入和输出机制的设备。它还提供了一些远程控制手段。在蓝牙通信中,HF通常是支持HFP(Hands-Free Profile)协议的设备,例如蓝牙耳机、汽车蓝牙系统等。AG(Audio Gateway)测:是指作为音频的输入和输出网关的设备。典型的充当音频网关的设备包括手机。我们这边主要是围绕手机端代码讲解,所以讲的是AG端。这个文件主要是包含音频网关的操作函数。讲解代表之前先简单介绍下HF和AG。原创 2024-09-05 15:25:31 · 491 阅读 · 0 评论 -
蓝牙--关于bta_ag_sdp.cc文件的讲解
HF(Hands-Free unit)测:是指作为音频网关的远程音频输入和输出机制的设备。它还提供了一些远程控制手段。在蓝牙通信中,HF通常是支持HFP(Hands-Free Profile)协议的设备,例如蓝牙耳机、汽车蓝牙系统等。AG(Audio Gateway)测:是指作为音频的输入和输出网关的设备。典型的充当音频网关的设备包括手机。我们这边主要是围绕手机端代码讲解,所以讲的是AG端。这个文件主要是包含音频网关的操作函数。讲解代表之前先简单介绍下HF和AG。原创 2024-09-05 10:16:01 · 489 阅读 · 0 评论 -
蓝牙--关于bta_ag_rfc.cc文件的讲解
HF(Hands-Free unit)测:是指作为音频网关的远程音频输入和输出机制的设备。它还提供了一些远程控制手段。在蓝牙通信中,HF通常是支持HFP(Hands-Free Profile)协议的设备,例如蓝牙耳机、汽车蓝牙系统等。AG(Audio Gateway)测:是指作为音频的输入和输出网关的设备。典型的充当音频网关的设备包括手机。我们这边主要是围绕手机端代码讲解,所以讲的是AG端。这个文件主要是包含音频网关的操作函数。讲解代表之前先简单介绍下HF和AG。原创 2024-09-04 17:52:55 · 865 阅读 · 0 评论 -
蓝牙--关于bta_ag_act.cc文件的讲解
HF(Hands-Free unit)测:是指作为音频网关的远程音频输入和输出机制的设备。它还提供了一些远程控制手段。在蓝牙通信中,HF通常是支持HFP(Hands-Free Profile)协议的设备,例如蓝牙耳机、汽车蓝牙系统等。AG(Audio Gateway)测:是指作为音频的输入和输出网关的设备。典型的充当音频网关的设备包括手机。我们这边主要是围绕手机端代码讲解,所以讲的是AG端。这个文件主要是包含音频网关的操作函数。讲解代表之前先简单介绍下HF和AG。原创 2024-09-04 11:00:11 · 393 阅读 · 0 评论 -
蓝牙--关于bta_ag_main.cc文件的讲解
HF(Hands-Free unit)测:是指作为音频网关的远程音频输入和输出机制的设备。它还提供了一些远程控制手段。在蓝牙通信中,HF通常是支持HFP(Hands-Free Profile)协议的设备,例如蓝牙耳机、汽车蓝牙系统等。AG(Audio Gateway)测:是指作为音频的输入和输出网关的设备。典型的充当音频网关的设备包括手机。我们这边主要是围绕手机端代码讲解,所以讲的是AG端。讲解代表之前先简单介绍下HF和AG。代码中主要有以下几个核心的方法。原创 2024-09-03 17:20:46 · 554 阅读 · 0 评论 -
关于蓝牙耳机和有线耳机切换过程中常见的一些问题
3. 所以如果想再把BT A2DP设为active device,需要手动在setting中点击已配对的蓝牙耳机,当显示为active时,表示切换成功。1. 当有线耳机插入后,会把setA2dpActiveDevice(null);2. 当有线耳机拔出后,由于active device为nu了,所以无法自动切换到蓝牙A2DP,而是直接通过平台的speaker出声。问题1 :Android 14 平台,连接蓝牙耳机,在微信语音通话过程中插入耳机,此时蓝牙设备会断开,需要手动恢复.主要干了以下几个事情。原创 2024-07-24 15:27:14 · 306 阅读 · 0 评论 -
【高通平台】关于蓝牙通话过程中常见的一些问题
mAudioManager.setSpeakerphoneOn(false)外放话筒关闭。mAudioManager.setBluetoothScoOn(false)蓝牙关闭。查看log这个时间点,instagram下发setSpeakerphoneOn 最后设置成true了,使用声音外放模式。辅助机给测试机Instagram来视频通话并接通,大概率接通视频通话后声音外放,蓝牙耳机无声音。4、蓝牙芯片把编码后的数据通过SCO(eSCO)物理链路发送给蓝牙耳机。耳机,蓝牙,全都关闭。原创 2024-07-23 10:49:02 · 346 阅读 · 1 评论 -
MTK平台 -- 关于A2DP协议的讲解
目录下编译生成audio.a2dp.default.so,主要实现a2dp做为设备的功能。原创 2024-06-28 14:06:40 · 495 阅读 · 0 评论 -
【MTK平台】连接蓝牙耳机播放音乐>插入有线耳机>再拔掉有线耳机,声音会从设备中播放一秒,再切到蓝牙耳机
把BTA2DP_MUTE_CHECK_DELAY_MS * 4改成 BTA2DP_MUTE_CHECK_DELAY_MS *8。修改如下这个BTA2DP_MUTE_CHECK_DELAY_MS 参数值既可,比如增加delay。一般这类情况优先考虑Audio的问题。原创 2024-06-28 11:16:11 · 289 阅读 · 0 评论 -
Android 蓝牙profile的配置
Android 13以后版本后config.xml 有部分功能依然生效,但是有些profile的配置已经无效了,新的配置方法 在system/libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop。在做BQB认证之前,我们需要确认那些profile之前,我们需要查看profile的配置情况。Android13版本前蓝牙profile的配置。MTK的项目代码如下。MTK的项目代码如下。原创 2024-06-06 10:49:42 · 986 阅读 · 1 评论 -
[高通平台] NVM configuration手册
75 {83 },作用 Tag 2 用于指定BT设备地址。使用Tag 2更改BT设备地址,以将其与高通公司提供的NVM附带的默认地址区分开来。Length6 bytes91 },Tag 95用于BT Local Features ControlLength0x020x00, 0x0B99 },Tag 83 控制 BTS local featuresLength0x030x07 07 07。原创 2024-06-05 10:56:13 · 308 阅读 · 0 评论 -
【高通平台】蓝牙profile 属性配置介绍
pbap_use_profile_for_owner_vcard: 使用PBAP配置文件为所有者vCard。profile_supported_hfp_incallservice: 支持HFP的通话服务。profile_supported_hid_device: 支持作为HID的设备。profile_supported_hid_host: 支持作为HID的主机。profile_supported_hs_hfp: 支持HFP作为免提设备。profile_supported_pbap: 支持PBAP配置文件。原创 2024-05-14 14:34:56 · 387 阅读 · 0 评论 -
【高通平台】如何升级蓝牙的firmware
1. 您可以使用以下命令升级固件。原创 2024-04-16 20:29:03 · 430 阅读 · 1 评论 -
【高通平台】如何配置高通工具写号后,设置界面可以正确读取到
1. 连接写号工具Tinno Qualcomm Write Tool V2.1.0.32. 写入bt地址3.查看手机里显示的BT值与实际写入的一样。原创 2024-03-29 10:13:01 · 516 阅读 · 0 评论 -
Bluetooth Smart HTTP 代理服务(HTTP Proxy Service,HPS)的实现过程
在 Android 开发中,Bluetooth Smart HTTP 代理服务(HTTP Proxy Service,HPS)的实现通常涉及使用 Bluetooth GATT(通用属性)协议来进行通信。这种代理服务的实现可以让 Bluetooth Smart(低功耗蓝牙)设备通过 HTTP 代理与互联网进行通信。在相应的回调方法中处理 HTTP 请求和响应的读取和写入。根据应用的需要,启动和停止 GATT 服务器。原创 2024-02-20 10:33:49 · 430 阅读 · 0 评论 -
【MTK平台】从蓝牙源码分析—Gatt如何写入数据到设备里面
write_characteristic方法是在btgatt_client_interface_t结构体中定义的vendor/mediatek/proprietary/packages/modules/Bluetooth/system/include/hardware/bt_gatt_client.h。5. 接下来继续看看BTA_GATTC_WriteCharValue的具体实现,这里主要看event的事件BTA_GATTC_API_WRITE_EVT通过bta_sys_sendmsg进行了发送。原创 2024-01-22 17:22:14 · 319 阅读 · 0 评论 -
MTK平台 -- 关于GATT协议的讲解
GATT是低功耗蓝牙属性应用规范,应用于主机和从设备之间的数据传输。public api for GATT Profile,作为gatt client所有读写等operation interface都在此文件GATT client借用BluetoothDevice.connectGatt() api连接设备开发时需要实现此类用于gatt client event callbackGATT Characteristic封装类GATT Descriptor封装类GATT Server封装类。原创 2024-01-16 14:51:49 · 391 阅读 · 0 评论 -
蓝牙协议栈分析-- L2CAP
L2CAP 允许更高级别的协议和应用程序传输和接收长达 64 KB 的上层数据包(L2CAP 服务数据单元,SDU)。L2CAP 还允许每个通道的流量控制和重传。LE基于信用的流控制模式用于面向LE L2CAP连接的信道,其中流控制使用L2CAP数据的基于信用的方案。L2CAP 为具有协议复用能力和分段和重组操作的上层协议提供面向连接和无连接的数据服务。L2CAP 层提供逻辑信道,称为 L2CAP 信道,它们在一个或多个逻辑链路上复用。蓝牙规范的这一部分定义了逻辑链路控制和适配层协议,简称 L2CAP。原创 2024-01-15 10:54:14 · 357 阅读 · 0 评论 -
蓝牙协议栈分析-- ACL
是异步无连接的链路,主要用于分组数据传送,蓝牙操作命令通过该链路传输。ACL是面向分组的连接,它支持对称和非对称两种传输流量,也支持广播信息。在ACL方式下,主设备控制链路带宽,负责从设备带宽的分配;从设备依轮询发送数据。原创 2024-01-12 16:53:21 · 1129 阅读 · 0 评论 -
【MTK平台】蓝牙autoConnect过程和相关案例问题
在已经连接蓝牙耳机的过程中,断开手机端蓝牙,在重新打开蓝牙的过程二 Log分析以下log是关键的log连接过程以下代码可以知道,在wifi打开的似乎会判断mostRecentlyActiveA2dpDevice存储的device是否为NULL,如果不为NULL,会进行连接autoConnect headSet和A2dp的过程//判断蓝牙是否打开581 return;590 return;598 }原创 2024-01-05 15:32:09 · 1130 阅读 · 0 评论 -
[MTK] 处理蓝牙质量报告版本不匹配的问题
由于BQR事件是根据旧版本的规范报告的,这可能会导致长度检查失败导致java异常,在新版本version >33的版本中会出现错误。原创 2024-01-03 16:31:15 · 541 阅读 · 0 评论 -
【MTK平台】如何正确测量使用蓝牙OPP传输文件时的电流
这主要是因为,蓝牙OPP传输文件时,需要将文件源做拆分并打包封装。而此时的CPU loading是会受到当时OPP传输的速率影响的。如果传输速率快的话,CPU loading相应就会重一些,电流会高一些;反之,CPU loading会轻一些,电流也会小一些。在做后续对比时,需要确保在传输速率相当的情况下,再来比较平均电流,这样的比较才有意义。-测试机与辅助机建议开启飞航模式后仅开启BT,若不开飞航模式则请关闭Wifi。1.除测试机和辅助机外,关闭其他设备的蓝牙和Wifi。原创 2023-12-27 09:58:39 · 466 阅读 · 0 评论 -
【MTK平台】关于蓝牙扫描设备有时获取不到设备名
对于出现搜不到设备名的情况,是因为inquiry和page是分属两个通道,page通道有可能因为受到干扰,或HW性能不满足导致的无法建立连线(获取设备名)该问题和google design有关,在GB2版本中我们就会增加这个搜到设备地址就上报UI的feature,这样做的目的是为了尽可能的搜到更多的设备。4. 如果项目手机搜不到设备名情况严重,并且配对、连接等功能也概率出现问题,请排查HW performance,以及是否存在频偏问题。1. 靠近无法被搜到设备名的设备时,如果能搜到则正常。原创 2023-12-26 15:51:56 · 636 阅读 · 0 评论 -
【MTK平台】关于蓝牙通话过程中常见的一些问题
正常的现象,这一块的逻辑是MTK follow AOSP,先连接蓝牙,后插入耳机,蓝牙的HFP active device会被切走,因为没有HFP active device,audio不会call到蓝牙来建SCO,所以无法通过微信界面切到蓝牙设备。测试时设置蓝牙耳机只能让蓝牙耳机重新连接上,但是audiopolicy并不会选择蓝牙耳机去播放,有线耳机的优先级要大于蓝牙耳机,AOSP的设计就是这样,不是问题。连接蓝牙耳机,微信语音通话时插入有线耳机后切换到蓝牙耳机,声音从有线耳机输出。原创 2023-12-20 11:15:53 · 1289 阅读 · 0 评论 -
【MTK平台】BLE链接参数和功耗的关系
此值越大,BLE设备就会有更多时间Sleep,数据通信频繁度降低,数据吞吐率变低,功耗下降。如果Slave Latency为0,表示slave必须回复Master的数据包,而如果不为0,slave就可以跳过几个Conenction Event,如果在设定的Latency数目内,Slave不回复Master的包,Slave设备就有更多的时间Sleep,Master不会认为连接异常。BLE即低功耗蓝牙,是专为智能设备设计的一种低功耗、低延迟,小数据传输的蓝牙技术。目前广泛应用到手机,平板,及智能穿戴式设备中。原创 2023-12-19 16:56:19 · 645 阅读 · 0 评论