首页 > 其他分享 >从空口分析BLE AUDIO通话TBS和CCP

从空口分析BLE AUDIO通话TBS和CCP

时间:2024-10-31 09:46:06浏览次数:5  
标签:耳机 UUID Characteristic TBS CCP 通话 BLE 手机

BLE AUDIO通话的TBS和CCP就是类似于经典蓝牙HFP电话控制协议,也是作为LE AUDIO电话控制协议,TBS就是Telephoney Bear Service, 这个是服务端位于手机侧,类似于HFP Gateway。CCP是 Call Control Profile,这个是Client位于耳机端,可以理解为HFP Client,下面还是以手机和耳机为例,结合空口来理解TBS和CCP:

TBS发特征值现

耳机和手机在进行了LE Audio连接后,用户通过双击耳机可以起播手机音乐,在播放音乐的过程中,突然接到一个电话,通过双击耳机可以接通电话,然而耳机要控制手机接通电话,必须先知道手机端TBS支持的特征值:
在这里插入图片描述如上图,耳机首先发起ATT查询UUID 0x184C的主要服务,这个0x184C就是GTBS的UUID,手机回复耳机TBS服务的特征值位于97-141之间,接下来我们看看TBS都有哪些特征值:
在这里插入图片描述
图上图所示,我们看到TBS总共有16个特征值,下面分别解释这16个特征值的含义:

特征UUIDvalue Handle详解
Characteristic UUID Bearer Provider Name99手机的名字
Characteristic UUID Bearer Technology102手机支持的通信技术,3G,4G还是5G
Characteristic UUID Call Control Point Optional Opcodes105通话控制点可选操作码
Characteristic UUID Call State107呼叫状态,目前总共支持有Incoming,Dialing,Alerting,Active,Locally Held,Remotely Held,Locally and Remotely Held,7中状态
Characteristic UUID Call Control Point110通话控制点,耳机通过写入此特征值来控制手机接听或者挂断电话等动作
Characteristic UUID Bearer UCI113统一呼叫标志符,不超过5个字符,例如电话表示:“tel:”
Characteristic UUID Bearer URI Schemes115统一资源标志符采用的策略,一般为统一呼叫标识符和呼叫ID的组合,例如来电:tel:139xxxxxxxx组成一个URI
Characteristic UUID Bearer Signal Strength118手机信号强度
Characteristic UUID Bearer Signal Strength Reporting Interval121手机信号强度报告更新周期
Characteristic UUID Bearer List Current Calls123手机当前通话列表
Characteristic UUID Status Flags126手机可以通知此特征值来表示手机的带内铃声,静音模式的使能和去能
Characteristic UUID Incoming Call Target Bearer URI129来电URI
Characteristic UUID Incoming Call132来电呼叫
Characteristic UUID Termination Reason135断开电话理由
Characteristic UUID Call Friendly Name138呼叫友好名称
Characteristic UUID Content Control ID141内容控制ID

通话控制:来电

在这里插入图片描述

  1. 在播放音乐过程中,如果有来电,首先手机会通知左右耳机,媒体播放暂停,如上图红色框,发送ATT Notification Packet(Media State: Paused)
  2. 手机告知左右耳机电话播放器支持的行为和名字,如橙色框。
  3. 手机会通知耳机有来电Incoming call的电话号码,以及当前的通话状态:Incoming,当前电话列表(主要是三方电话),以及来电的URI:tel:xxxxxxxxxxx,如黄色框。
  4. 耳机通过写入媒体控制点特征值来让手机停止播放音乐,这一步感觉耳机的行为有点多余,因为第一步手机就告知耳机媒体播放器已经暂停了,如绿色框。

通话控制:接通电话

  1. 首先,耳机会收到电话的来电通知,以及音乐媒体播放的暂停,如下图:

在这里插入图片描述

  1. 然后耳机会通过写入call control point,操作码是accept来告诉手机接通电话,然后手机返回通话状态为:active,如下图

在这里插入图片描述

  1. 接着手机会通过写入左右耳的ASE Control point去disable 音乐播放的ASE ID 2,然后断开左右耳音乐CIS,如下图:

在这里插入图片描述

  1. 紧接着手机会通过写入ASE control point去enable ASE ID 1和ASE ID 3,这两个是用于通话的端点,同时改变audio context为conversational,然后手机会为左右耳机会建立CIS连接,如下图:

在这里插入图片描述

  1. 最后手机会通过写入ASE Control Point,操作码是receiver start ready,让耳机做好接收通话音频数据的准备,同时手机也会设置绝对音量,接下来手机就会发送通话音频数据了,如下图:

在这里插入图片描述

通话控制:挂断电话

  1. 耳机挂断电话只需要耳机写入call control point特征值,opcode是teminate即可,后面手机会通知左右耳机挂断的结果,以及挂断的原因,如下图:

在这里插入图片描述

  1. 然后同理手机会通过写入ASE Control point来disable ASE 1和ASE3端点,如下图:

在这里插入图片描述

  1. 然后手机会断掉左右耳通话CIS,如下图:

在这里插入图片描述

  1. 最后,手机为左右耳机建立音乐CIS连接,又可以愉快的听歌了,如下图:

在这里插入图片描述

标签:耳机,UUID,Characteristic,TBS,CCP,通话,BLE,手机
From: https://blog.csdn.net/Jzj1234555/article/details/143342443

相关文章

  • CTF-PWN: 虚表(vtable)
    vtablevtable(虚表,virtualtable)是面向对象编程中的一个关键概念,主要用于实现多态性(polymorphism)。它是一种数据结构,通常是一个指针数组,包含了类的虚函数(virtualfunctions)的地址。每个类都有自己的vtable,并且每个对象实例都有一个指向该vtable的指针,称为vptr(虚表指针)。......
  • Codeforces Global Round 27,D. Yet Another Real Number Problem 题解
    单调栈+贪心题意:给定一个序列从左往右对于每个索引iii,求出其前缀的数组可以进行任意次以下操作的条件下:选择......
  • 2024CCPC哈尔滨部分题解
    赛时被评测机卡死了M.奇怪的上取整求\(\sum_{i=1}^{n}f(n,i)\)\(Input\)第一行一个整数\(T(1<=T<=10^3)\),表示数据组数对于每组数据,一行一个整数\(n(1<=n<=10^9)\)\(Output\)对于每组数据,输出一行一个整数,表示答案。\(Sample\)35451114514————————21T10......
  • ObservableCollection<T>获取索引
    如果是普通类型我们直接可以用indexOf()获取,比如:ObservableCollection<string>oc=newObservableCollection<string>();oc.Add("Item1");oc.Add("Item2");oc.Add("Item3");stringitem="Item2";intindex=oc.IndexOf(ite......
  • 论文翻译 | PROMPTING GPT-3 TO BE RELIABLE
    摘要        大型语言模型(LLMs)通过少量提示展现出了令人印象深刻的的能力。商业化的API,如OpenAI的GPT-3,进一步增加了它们在现实世界语言应用中的使用。然而,如何提高GPT-3的可靠性这一关键问题仍然尚未得到充分探索。虽然可靠性是一个广泛且定义模糊的术语,但我们将其......
  • 根据字符串,获取实体属性上的annotation,如:createTime” 找到对应实体属性中的 TableFi
    根据字符串,获取实体属性上的annotation,如:createTime”找到对应实体属性中的TableField(value="create_time",fill=FieldFill.INSERT)Field[]fields=clazz.getFields();//仅能获取类(及其父类)public属性成员Field[]declaredFields=clazz.getDeclaredFields();......
  • Ansible 的主机清单和配置文件
    一.简介在使用Ansible来批量管理主机的时候通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单。该文件默认位于/etc/ansible/hosts。当然我们也可以通过修改ansible配置文件的Inventory配置项来修改默认inven......
  • js文件切片上传组件resumable.js使用
    接到一个媒体文件切片上传的需求,写demo记录下。前端<fieldset><legend>videopreview</legend><div><videoid="video-preview"controlsmutedheight="112px"width="200px"></video><inputtype="......
  • 【Unity】Addressables下的图集(SpriteAtlas)内存优化
    前言:资源管理系统:AddressablesUI:模拟NGUI图集Sprite,在UGUI下继承Image增加UIImage组件,实现将SpriteAtlas组件拖拽到属性面板上,切换选择里面的小图问题:在检查项目内存占用过高问题时,发现直接拖拽上去的资源不受Addressables系统的自动引用管理,导致部分资源虽然没有引用,但是未被释放......
  • Ansible原理和安装
    一.概念简介Ansible是一个IT自动化工具。它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。连接其他主机(管理节点)默认使用ssh协议特性Agentless:不需要在被管理节点上安装客户端,只要有sshd即可Serverless:在服务端不需要启动任何服务,只需要执......