苹果产品的蓝牙配件的设计指导

news/2024/11/8 0:35:48/

1. 简介

这个设计指导文档面向的是使用蓝牙技术与苹果产品通信的硬件配件,包括Mac,iPhone,iPad和iPod。

为了与当前和未来的苹果产品兼容,蓝牙配件应遵循这个文档中的规范。一个苹果产品需要蓝牙配件上的特性可用性遵循这个文档内的规范。

这个文档使用名词“苹果产品”涉及Mac(运行OS X的苹果电脑)和iPod,iPhone和iPad。在后一类产品中,那些运行iOS(苹果的手机操作系统)的产品也被称为“iOS设备”。这个文档内的规范专门为iOS设备设计,因此只能应用于这些产品。

1.1 文档组织

这个文档内的规范如下:

  • “蓝牙”:与硬件配件设计相关的通用蓝牙规范。
  • “蓝牙低功耗”:与硬件配件设计相关的通用蓝牙低功耗规范。
  • “蓝牙配件识别”:描述了使能苹果专属蓝牙命令。
  • “蓝牙耳机电池电量识别”:描述了提供给苹果设备的耳机电池电量信息。
  • “Siri”:展示了蓝牙配件使用iOS设备的Siri功能的设计指导。
  • “iPod配件协议”:参考一个苹果的能扩展配件能力的协议以超越标准蓝牙profiles。

1.2 苹果蓝牙开发邮件清单

苹果蓝牙开发组的工程师会监控邮件清单并尝试回答你的问题。请先搜索档案,看一看你的问题是否已经被解决。lists.apple.com/mailman/listinfo/bluetooth-dev.

2. 蓝牙

集成蓝牙技术的配件需要服从这个章节规定的需求。

2.1 与蓝牙规范一致

每个与苹果产品兼容的配件应支持蓝牙核心规范2.1+EDR或更高版本。这个规范引入了重要的加密特性——加密简单配对,以及扩展呼叫应答。

2.1.1 增强数据速率

增加数据速率特性在蓝牙2.0规范内引入,允许配件的通信更有效。每个配件可以在下列情况下使用EDR:

  • 它提供比标准数据速率更高的数据速率
  • 它连接更有效,每个时间单元内传输更多数据比特
  • 它减小了每个比特在传输时的能耗
  • 它提升了与WIFI和其他已连接的蓝牙设备的共存性,原因是它释放了更多空中的时间
  • 它提升了多点配置的性能

2.1.2 低功耗的嗅探模式

对所有手持设备来说,降低功耗都是至关重要的。因此,每个与苹果产品相关的配件:

  • 应支持请求蓝牙嗅探模式
  • 应接受嗅探模式的请求,且支持所有蓝牙规范内列出的有效特性

与苹果产品兼容的配件总是尽可能使用嗅探模式,特别是在只有很少或没有数据需要通过蓝牙链接传输时。除了功耗的增强,嗅探模式优化了与WIFI之间的天线共享。

嗅探模式参数由用户模式和蓝牙profile指定。苹果产品期望配件在一个特定情况下以合适的参数请求嗅探模式。如果配件不能发送请求,苹果产品会发送一个嗅探模式请求。当苹果产品发送一个嗅探模式请求时,远程设备应无条件地接受这个请求以及参数。

2.1.3 规则和拓扑管理

每个与苹果产品兼容的配件应该:

  • 接受一个苹果产品的规则切换请求
  • 当苹果产品拒绝一个规则切换请求时,继续保持连接

在一个蓝牙连接内,一个设备是主,另一个设备是从。主设备可以有多个从设备,因而被称之为微微网。主设备也能作为别的主设备的从设备,创建一个分布网。

有一种复杂的场景是由于设备不得不在两个微微网之间切换,因而浪费了可用的带宽。因而管理网络拓扑对最大化性能来说很重要。苹果产品可能请求一个规则切换,取决于它当前的拓扑,远程设备应接收这个请求。苹果产品也可以拒绝一个与拓扑相关的规则切换。最不理想的拓扑可能降低音频质量和用户体验。

只有当需要维持多个连接,例如蓝牙或WIFI,苹果产品将请求或否决规则切换。因此,如果苹果产品不需要做主设备,它将同意一个规则切换。配件的行为也一样,只在有合理原因时尝试成为主设备。

如果系统拓扑没有要求,配件不应总是默认请求成为主设备。如果之后配件需要成为主设备以维持多个连接,它应请求成为主设备。

2.1.4 扩展呼叫请求

每个与苹果产品兼容的配件应在它的扩展呼叫请求包内提供如下信息:

  • 产品的本地名称(完整和缩写)
  • TX功率等级
  • 产品支持的iAP协议的服务类型UUID。与iAP相关的信息,参见“7. iPod配件协议”

在蓝牙发现过程期间,苹果产品会显示被发现配件的易记名称。在蓝牙规范2.1版本之前,苹果产品不得不与配件建立连接且发起一个远程名称请求,这样会消耗能量,占用天线和用户的时间。蓝牙版本2.1引入了扩展请求应答特性,使得一个配件将它自身的名称和其它信息作为呼叫应答的一部分,这样增加了发现过程的速度和效率。

2.1.5 加密简单配对

每个与苹果产品兼容的配件应该:

  • 使用加密简单配对
  • 如果它有一个显示屏且支持输入设备,它应使用数值比较法

加密简单配对极大增强了加密且它是一个在蓝牙规范2.1引入的强制加密特性。为了保护设备不受中间攻击,数值加密辅助模式无论何时都应该可用。见蓝牙核心规范版本2.1+EDR的卷1,章5.4。

2.2 Profiles

苹果知识库support.apple.com/kb/ht3647提供了一个iOS设备支持的所有蓝牙profiles。蓝牙规范是设计与iOS产品兼容的配件的第一步。下列章节增加了许多profile的说明和需求,帮助配件开发者获取卓越成果。

2.2.1 设备ID Profile(DID)

每个与苹果产品兼容的配件应该:

  • 支持蓝牙设备ID描述文件,版本1.3或更高。
  • 使用蓝牙SIG组织发布的分配编号文件中指定的公司标识符作为供应商ID值(VID)。见www.bluetooth.org/Technical/AssignedNumbers/identifiers.htm。如果制造者没有蓝牙SIG公司标识符,蓝牙HID描述文件配件可以使用一个由USB实施者论坛分配的VID(www.usb.org的USB-IF)。
  • 终端产品制造商使用这个VID值。
  • 使用供应商ID源域来标识哪个组织被分配了在供应商VID域内被使用的值
  • 使用产品ID值以唯一化地标识产品。
  • 使用版本值以唯一化地标识软件版本。

设备ID profile使苹果产品识别远程配件的实施。这是有价值的信息,且能在与远程配件通信时被用来桥接替代蓝牙规范的解释。因此在设备ID记录区内的信息是很重要的,用来唯一地标识安装启用。

例如与汽车套件适配的蓝牙设备,相同的汽车套件可能进入两种不同的汽车型号。理想状态下,两个汽车套件应拥有不同的产品ID。然而,只要他们有可标识的硬件、软件和特性,有相同的产品ID则是可接受的。如果他们的实现都不同,他们应拥有不同的产品ID。配件也可使用第二设备ID以唯一化地标识产品ID或模块编号。

2.2.2 免提Profile

如果配件支持蓝牙免提Profile规范,这个规范应不低于版本1.5。

远程配件能使用蓝牙免提Profile作为电话连接。为了获取最好的用户体验,远程配件应支持规范中的如下可选特性。

2.2.2.1 远程音频音量控制

每个与苹果产品兼容且支持HFP的配件应该:

  • 支持远程音频音量控制,因此免提配件上的扬声器音量能被苹果产品控制,详细内容描述于蓝牙免提Profile规范版本1.5的4.28章节。
  • 由AT+BRSF=command发送的受支持的特性位图内的远程音量控制位必须被置位。在一些情况下,对用户来说,通过苹果产品控制输出音量的方式比较容易,而不是直接在远程配件上操作。例如,一个乘客(或假如汽车在停靠状态)在汽车内能使用手机上的音量滑块以控制音频音量。音量控制同步在蓝牙免提Profile规范版本1.5的章4.48.2中被指出。

2.2.2.2 指示器事件记录

与苹果产品兼容且支持HFP的配件应使用指示器事件记录且不要执行重复的状态轮询。

苹果产品支持HFP版本1.5上所有强制和可选的指示器(服务、呼叫、呼叫启动、呼叫保持、信号、漫游、充电)。为了使AT+CIND?命令的非重要的状态轮询最小化,远程配件应发送AT+CMER命令,以使能指示器事件记录。当一个指示器的状态改变时,苹果产品将发送一个+CIEV事件。远程配件应根据HFP规范,使用AT+CIND?和AT+CIND?命令以请求初始化状态。

2.2.2.3 语音识别激活

每个与苹果产品兼容且支持HFP的配件应该:

  • 支持语音识别激活,AG和HF的初始化描述于蓝牙免提Profile规范版本1.5的4.25章节。
  • 由AT+BRSF=command发送的支持特性位图上的语音识别激活位需要置位。

苹果产品支持远程配件和iOS(音频网关)配件发起的语音识别。

2.2.2.4 回声消除和降噪

当回声消除和降噪被实施在免提配件的本地时,它应通过发送一个AT+NREC命令给苹果设备的方式以关闭回声消除和降噪,描述于蓝牙免提Profile规范版本1.5的章节4.24。

苹果产品支持回声消除和降噪;这些特性默认是激活的。如果免提配件也有回声消除和降噪,它需要关闭在苹果产品上的这些特性(音频网关)。这避免了由于两次音频处理产生的音频质量的非必要性损伤。

2.2.2.5 同带铃声

每个与苹果产品兼容且支持HFP的配件应支持描述于蓝牙免提Profile规范版本1.5的同带铃声。如果用户在苹果产品上设置了铃声,相同的铃声应当也能在免提配件上被听到。

2.2.2.6 同步连接

每个与苹果产品兼容且支持HFP的设备应:

  • 支持eSCO参数设置S2和S3且接受这些设置的请求。见蓝牙电梯Profile规范版本1.5的5.6章。
  • 当设置一个同步连接时请求设置eSCO参数的S2和S3。注意eSCO参数设置S1可以不请求。
  • 在SCO/eSCO连接建立成功后的40ms之内渲染音频。

eSCO包类型提供了重传包;传统的SCO包不能重传。这提升了音频质量和用户体验。eSCO包类型2-EV3和3-EV3在包之间提供了巨大的时间间隔,其提升了WIFI性能且允许其他同期的蓝牙连接发送数据。苹果强烈建议为SCO连接使用2-EV3和3-EV3包。使用HV3包是强烈不推荐的。HV3包需要更多链接时间且不允许音频包的重传,其影响了有RF干扰时的音频性能。

2.2.2.7 宽频语音

每个与苹果产品兼容且支持HFP的配件应支持宽频语音连接,其描述于蓝牙免提Profile规范的章1.6。如果宽频语音连接被支持,它应支持T2链接参数设置。

所有运行在iOS5或更高版本上的iOS设备支持宽频语音。如果iOS设备和配件都支持宽频语音,那么宽频语音链接奖杯用在eSCO连接上,例如蜂窝电话、FaceTime和Siri。

2.2.3 消息访问Profile(MAP)

每个与苹果产品兼容且支持MAP的配件应该:

  • 支持蓝牙消息访问Profile规范版本1.0的4.1章描述的消息通知。
  • 在连接成功后立即注册消息,描述于消息访问Profile规范版本1.0的4.5章。
  • 在发起者VCARD内存在的TEL特性是不被期待的(包括特性N和FN),见消息访问Profile规范版本1.0的章3.1.3。
  • 不要提供发送消息的用户接口。iOS设备不支持使用MAP发送消息。

所有运行iOS6.0以及更高版本的iOS设备都支持MAP。

2.2.4 音频/视频远程控制Profile(AVRCP)

为了支持音频/视频远程控制Profile,与苹果产品兼容的配件应支持这个章节中列出的按键和操作。

2.2.4.1 支持的按键

每个与苹果产品兼容且支持音频/视频远程控制Profile的配件应使用分离的按键命令以播放和暂停,而不是翻转播放或暂停状态。

2.2.4.2 支持的操作

苹果产品支持Pass Through命令中的如下operation_IDs:

  • Play
  • Stop
  • Pause
  • Fast Forward
  • Rewind
  • Forward
  • Backward

2.2.4.3 重复和随机播放模式

每个iOS设备支持AVRCP target的重复和随机播放模式。一个AVRCP控制器可使用SetPlayerApplicationSettingValue以设置iOS设备的值以及GetPlayerApplicationSettingValue以读取一个值,描述于蓝牙音频/视频远程控制Profile规范版本1.4的章6.5.4和6.4.3。

2.2.4.4 通知

每个与苹果产品兼容且支持AVRCP profile的配件应注册通知且不应重复轮询以决定苹果产品的状态。

每个iOS设备支持在AVRCP target的设备上注册通知,描述于章6.7。命令RegisterNotification和GetPlayStatus支持这些通知:

  • EVENT_PLAYBACK_STATUS_CHANGED
  • EVENT_TRACK_CHANGED
  • EVENT_NOW_PLAYING_CONTENT_CHANGED
  • EVENT_AVAILABLE_PLAYERS_CHANGED
  • EVENT_ADDRESSED_PLAYER_CHANGED
  • EVENT_VOLUME_CHANGED

2.2.4.5 音量处理

每个与苹果产品兼容且支持AVRCP profile的配件应支持绝对音量,描述于章6.13。

每个处于AVRCP controller规则的iOS设备支持音量处理。

2.2.4.6 浏览

每个与苹果产品兼容且支持浏览(在控制规则内)的配件应该:

  • 连接时不去尝试索引或缓存整个库。iOS设备可以包括数千个媒体项,在层次结构中存在多次。
  • 当浏览一个特定的文件夹,不要抓取它所有的项。只抓取那些显示给用户的项。也可预抓取一些项以提升用户界面的响应。
  • 不要重新排序项(例如字母顺序)
  • 不要假设UID是静态定义的,特别是在root文件夹。文件夹的次序和UID以及项可能在未来的release时被改变。
  • 收到EVENT_UIDS_CHANGED通知后发送SetBrowsedPlayer命令。
  • 不要假设传递给PlayItem命令的UID将导致媒体播放器播放UID。

当前只有内置音乐app支持浏览。当在播放器之间切换时,一个EVENT_AVAILABLE_PLAYERS_CHANGED通知和一个EVENT_ADDRESSED_PLAYER_CHANGED通知将被生成。然后UI需要看着被列出的播放器的特性位掩码以决定当前的浏览是否可用。

所有不低于iOS6.0的iOS设备都支持AVRCP浏览。

2.2.4.7 IOS应用程序提供的元数据

一个运行在iOS设备上的音频应用程序可以使用iOS媒体播放器架构APIs以提供与当前音频流有关的元数据。iOS设备使用AVRCP提供这些元数据给配件。更多信息,参考苹果媒体播放器框架文件的MPNowPlayingInfoCenter。

2.2.5 增强音频分配Profile(A2DP)

每个与苹果产品兼容且支持A2DP的配件应满足蓝牙增强音频分配Profile版本1.2的需求,苹果的额外需求在这个章节中给出。

2.2.5.1 子带编码(SBC)

定义在A2DP规范的章4.3.2的SBC编解码的专用信息元素中,可用于苹果产品的如下表:
这里写图片描述

2.2.5.2 MPEG 2/4 AAC编解码

iOS设备支持非强制编解码MPEG-2/4 AAC,定义于A2DP规范版本1.2的章4.5。除了SBC,配件应使用AAC编解码,因为它在给定比特率时提供了更高的音质。

注意,如下规范提供了苹果实施MPEG-2/4 AAC编解码的详细信息。如有冲突,以A2DP规范为准。

iOS设备使用的AAC编解码专门说明元数据定义于表2.2。
这里写图片描述

AAC音频流包在iOS设备内有如下结构:
这里写图片描述

AAC媒体净荷格式,定义于A2DP规范的章4.5.4,使用LATM格式化,其定义于RFC 3016的章节4。应用在包的域的注意点如表2-3。

  • 每个iOS设备的AAC流通道的推荐的L2CAP MTU值是885字节。
  • AVDTP头在RFC 3016的图4上作为RTP头展示,头部被定义于AVDTP版本1.2的章节7.2.1。
  • AudioMuxElement与RFC 3016的RTP净荷相同。他被定义与ISO/IEC 13818-3:2005的章1.7.3的表1.32。muxConfigPresent参数被设成1(带内模式),由RFC 3016的章节4.1建议。如RFC 3016的章4.3建议,只有一个AudioMuxElement放在各个AVDTP包内。
  • 音频净荷使用MPEG-4编码,如A2DP规范的章4.5.4推荐的一样。
  • 由于AAC-LC的支持,配件应支持VBR能力。iOS设备将根据内容改变AAC比特率,且配件应有能力处理改变而不导致音频的缺失。

2.3 音频通路

这个章节描述了配件如何区分从一个iOS设备来的多种音频内容且使用这个信息以决定重放行为。

一个配件能接收从iOS设备来的音频数据,通过两种蓝牙profile中的任意一种:

  • HFP使用eSCO通道
  • A2DP使用ACL通道

iOS设备在挑选所使用的通道时,依据的是音频内容的用途。一个音频路径被创建以用在双向通信(例如FaceTime的手机呼叫),其总是使用HFP(eSCO)通路以发送音频数据。音乐和类似的内容使用A2DP通路。如果被定义的通路缺席了,音频重放将默认选择iOS设备。

2.3.1 音频数据通过HFP Profile接收

大多数通过HFP(eSCO)通路发送的音频内容需要双路连接。例如HFP被用在(且不限于)蜂窝电话,FaceTime和语音邮件。

对任何正在通过HFP通路接收的音频内容而言,建议配件的扬声器和麦克风专门用于蓝牙链接且不应处理任何其他音频内容。

2.3.2 音频数据通过A2DP Profile接收

通过A2DP profile传输的音频内容广义上分为如下两类:

  • 从音乐、视频、游戏应用来的音频内容
  • 系统生成的警告和通知音效

2.3.2.1 区分系统音效的音频内容

通过添加对AVRCP Profile版本1.3及以上的支持,近似音乐的内容能与系统音效区分开。AVRCP允许配件使用通知以关注iOS设备的音频重放状态。

当一个iOS设备初始化一个在A2DP通道上的音频重放以播放音乐内容,AVRCP通知EVENT_PLAYBACK_STATUS_CHANGED被发送,用来指示重放状态已经改变为播放状态。见AVRCP规范版本1.4的6.72章。这指出了通过A2DP profile的音频数据包含音乐。当一个iOS设备初始化一个在A2DP通道上的音频重放以播放系统音效,不会发送AVRCP通知。

图2-1和2-2展示了音乐重放和系统音效之间的通知的不同。
这里写图片描述

这里写图片描述

2.3.2.2 A2DP期望的音频通路行为

配件应基于A2DP通道上的音频内容调整它的音频通路行为。

如果音频数据包括音乐,期望的是配件的扬声器被专用于从蓝牙链接来的音频数据且任何其他音频重放被暂停。如果音频数据包括系统音效,期望的是配件能按需渲染音频。如果配件从不同的源播放音频,系统音效数据能与当前重放的内容混合;暂停设备当前正在播放的音频重放不是必须的。

3. 低功耗蓝牙

蓝牙4.0规范引入了蓝牙低功耗,一个新的无线技术,目标是电池资源受限的配件。如果支持蓝牙低功耗,配件应遵循这个章节的指导。

3.1 规则

配件应实施在蓝牙4.0规范的volume 3 Part C 章2.2.2.3的外设规则,或章2.2.2.1的广播规则。

3.2 广告通道

配件应在所有三个广告通道内(37,38,39)的每个广告事件上广播,见蓝牙4.0规范的volume 6 Part B 章4.4.2.1。

3.3 广告PDU

配件应使用如下广告PDU中的一种:

  • ADV_IND
  • ADV_NOCONN_IND
  • ADV_SCAN_IND

ADV_DIRECT_IND不应被使用。见蓝牙4.0规范 volume 6 Part B 章2.3.1。

3.4 广告数据

由配件发送的广告数据应包括如下说明,其描述于蓝牙核心规范补充 Part A:

  • Flags
  • TX功率等级
  • 本地名称
  • 服务

在例如配件需要减小功耗,或并不需要把所有广告数据填入广播PDU的情况下,配件应将本地名称和TX功率等级数据放在SCAN_RSP PDU中。注意,苹果产品可能不是总是完成主动搜索,这取决于它的状态。

首要服务应总是在广播PDU中被广播。次要服务不应被广播。如果广播PDU内的空间受限,配件的非意义重大的首要用例也可省略。

SCAN_RSP PDU内的广播数据和扫描应答数据应符合蓝牙4.0规范 volume 3 Part C 章18的格式:以长度域开头,随后是AT类型和AD数据。

3.5 广告间隔

配件的广告间隔应认真考虑,因为它影响了发现时间和连接性能。对一个电池供电的配件来说,电池资源也应被考虑。

为了被苹果产品发现,配件应首先使用推荐的20ms广告间隔并持续至少30秒。如果在初始的30秒内未被发现,苹果建议使用如下的一个更长的间隔以增加被苹果产品发现机会:

  • 152.5ms
  • 211.25ms
  • 318.75ms
  • 417.5ms
  • 546.25ms
  • 760ms
  • 852.5ms
  • 1022.5ms
  • 1285ms

注意:更长的广告间隔通常意味着更长的发现和连接时间。

3.6 连接参数

配件有责任使用用于低功耗连接的连接参数。配件应在合适的时间发送一个L2CAP连接参数更新请求,用以请求与其适配的连接参数。见蓝牙4.0 Volume 3 Part A 章4.20获取更多信息。如果连接参数不遵循如下所有规则,连接参数请求会被拒绝:

  • interval max * (slave latency + 1) ≤ 2 seconds
  • interval min ≥ 20 ms
  • interval min + 20 ms ≤ interval max slave latency ≤ 4
  • connSupervision Timeout ≤ 6 seconds
  • inverval max * (slave latency + 1) * 3 < connSupervision Timeout

如果蓝牙低功耗HID是一个配件的已连接的服务之一,苹果产品可以接受连接间隔降低到11.25ms。

苹果产品在外设提出连接参数特征时不会读取或使用这些参数,见蓝牙4.0规范 Volume 3 Part C 章12.5.

3.7 隐私

配件应有能力解决所有状态下的可解决私有地址。由于隐私原因,苹果产品将使用一个随机的设备地址,参考蓝牙4.0规范 Volume 3 Part C 章10.8.

3.8 许可

配件不需要特别的许可,例如配对、认证或加密以发现服务和特征。它只在访问一个特征值或一个描述值时需要特别的许可。见蓝牙4.0规范 Volume 3 Part G 章8.1 15段。

3.9 配对

配件不应请求配对,直到一个ATT请求被使用非有效认证错误代码拒绝。见蓝牙4.0规范 Volume 3 Part F 章4获取详细信息。

如果为了加密原因,配件需要与中心设备有绑定关系,外设应使用非有效认证错误代码拒绝ATT请求。结果是,苹果产品启用重要加密过程来处理。

类似地,如果iOS设备作为中心设备和一个GATT服务器,它可以使用非有效认证错误码拒绝一个ATT请求。配件应初始化配对的加密过程作为应答。

配对可能需要由苹果产品决定是否使用用户认证。一旦一个配件与苹果产品配对了,它应保留中心设备和外设的分配钥匙已备未来使用。如果配对不被需要了,配件应删除这两个钥匙。

为了在设计配件时包含认证,配件应支持MFi程序规定的认证。为了获取更多有关MFi的信息,见developer.apple.com/programs/mfi.

3.10 MTU大小

在交换MTU请求握手时,iOS设备支持和请求的MTU大小要比默认的MTU大。见蓝牙4.0 Volume 3 Part F 章3.2.8. 配件可以使用这个机制以协商更大的MTU大小。

3.11 服务

3.11.1 一版访问Profile服务

配件应实施设备名称特征,参考蓝牙4.0规范 Volume 3 Part C 章节12.1。设备名称特征应该是可写的。

3.11.2 一版品质Profile服务

如果配件有能力在它的生存期间内更改它的服务,它应实施服务更改特征。

苹果产品可以使用服务更改特征以决定它释放能依赖之前从设备读取的信息。见蓝牙4.0 Volume 3 Part G 章7.1。

3.11.3 设备信息服务

配件应实施设备信息服务。这个服务的服务UUID不应在广告数据内被广告。应保护如下特征:

  • 制造商名称字符串
  • 模块编号字符串
  • 固件版本字符串
  • 软件版本字符串

3.11.4 可用服务

对iOS 7 来说,任何iOS产品使电池服务、时间服务和苹果通知中心服务(ANCS)对配件来说都是可用的。时间服务支持当前时间和本地时间信息特征。如果当前时间改变了,服务不提供一个“可调原因”。ANCS使用7905F431-B5CE-4E99-A40F-4B1E122D00D0作为他的UUID。

这些服务不能再连接后被立即视为可用,且当服务变得可用时,配件应支持特征值指示服务更改参数(见蓝牙4.0规范 Volume 3 Part G 章7.1)以接受通知。iOS设备一旦与一个配件连接,它将维持这个连接且使用一个可用的服务。

3.12 GATT服务器

对iOS 6.0来说,应用可以产生GATT服务器的服务和特征,这样iOS设备使配件成为可能。本节的建议适用于此种情况下的配件。

如下服务由iOS内部支持且不应被第三方iOS应用产生:

  • 一版品质Profile服务
  • 一版访问Profile服务
  • 蓝牙低功耗HID服务
  • 电池服务
  • 时间服务
  • 苹果通知中心服务

iOS设备实施了GAP服务更改特性,因为数据库内容能在任何时候改变。因此配件应支持这个特征的特征值指示,且一旦受到指示,将相应的缓存无效化。见蓝牙4.0规范 Volume 3 Part G 章7.1。

配件应最小化ATT/GATT请求和命令的使用且在必要的时候发送。例如,当配件正在寻找特定的服务时,不要使用GATT发现所有服务。取而代之的是使用服务UUID来发现首要服务。更少的空中时间等价于更少的功率消耗,还有配件和苹果设备间更好的性能。

当第三方iOS应用发现配件上的服务时,如下服务在iOS内部被调用且从下列被发现服务中筛选出:

  • 一般品质Profile服务
  • 一版访问Profile服务
  • 蓝牙低功耗HID服务
  • 苹果通知中心服务

配件应具有足够鲁棒性以温和地处理任何错误。如果应用自己的服务不在前台且没有权利在后台运行,配对和特征值的读写可能失败。

如果ATT预写请求被使用,所有队列中的特征被包含在相同的GATT服务中。

4. 蓝牙配件通知

本章描述了苹果专属的蓝牙命令,用以扩展超出标准蓝牙Profile的配件能力。

为了使能苹果专属特性,配件必须支持“4.1 HFP Command AT+XAPL”,他能提供配件所支持的特性的精确信息。苹果设备将使用由此命令发送的信息以使能或禁止定制命令。

配件在成功建立HFP服务级连接后必须发送AT+XAPL命令给苹果设备。配件在发送下列任何额外的苹果专属命令之前,应首先发送一个AT+XAPL命令。

4.1 HFP Command AT+XAPL

描述:由一个配件使能定制AT命令。
发起者:蓝牙配件
格式:AT+XAPL=vendorID-productID-version, features
参数:

  • vendorID: 一个字符串以16进制表示制造商的供应商ID,不需要0x前缀。
  • productID: 一个字符串以16进制表示制造商的产品ID,不需要0x前缀。
  • 版本:软件版本。
  • 特性:10进制的单比特域。可用特性有:
    • Bit 0 = 保留
    • Bit 1 = 配件支持电量记录(只为电池运行配件保留)
    • Bit 2 = 配件是电源供电或Dock供电(只为电池运行配件保留)
    • Bit 3 = 配件支持Siri状态记录
    • Bit 4 = 配件支持降噪状态记录
    • 所有其他位是保留位

例如:AT+XAPL=ABCD-1234-0100,10(支持电池记录和Siri状态)
应答:+XAPL=iPhone, feature

5. 蓝牙耳机电量指示

任何免提式蓝牙耳机配件都能在iOS设备状态条上以通知图标的形式向用户展示它的电量。这个特征在所有支持免提Profile的iOS设备上都支持,包括iPhone,iPod touch和iPad。

耳机电量指示由两个苹果专用蓝牙HFP AT命令实施,“4.1 HFP Command AT+XAPL”和“5.1 HFP Command AT+IPHONEACCEV”。

5.1 HFP Command AT+IPHONEACCEV

描述:记录一个耳机状态变化
发起者:耳机配件
功能:AT+IPHONEACCEV=Number of key/value pairs, key1, val1, key2, val2, …
参数:

  • Number of key/value pairs:后续的参数的数量
  • key:正在被记录的变化的类型
    • 1=电池电量
    • 2=Dock状态
  • val:变化的值
    • 电池电量:字符值’0’-‘9’
    • Dock状态:0=未停泊,1=停泊

例子:AT+IPHONEACCEV=1,1,3

6. Siri

6.1 使能定制Siri命令

每个配件想要使用Siri必须支持“4.1 HFP Command AT_XAPL”。iOS设备将使用由这个命令发出的信息以使能或禁止与Siri相关的定制命令。

为了接收Siri状态事件,配件必须在与iOS设备成功建立HFP服务级连接(SLC)后发送AT+XAPL命令。配件在发送任何如下描述的额外的Siri定制命令之前手机发送一个AT+XAPL命令。

6.2 获取Siri可用信息

在建立一个HFP Profile连接之后,配件能决定Siri是否可用且使能一个iOS设备的Siri。它也能接收Siri状态的更改。如果Siri是关闭的,取而代之的是激活语音控制。

6.2.1 连接时获取状态信息

配件应在成功建立HFP Profile连接后切发送了一个AT+XAPL命令后发送如下命令:

6.2.1.1 HFP Command AT+APLSIRI?

描述:AT命令以获取Siri状态信息
发起者:配件
格式:AT+APLSIRI?
应答:+APLSIRI: value
value的定义:

  • 0= Siri在这个平台上不可用
  • 1= Siri可用且已使能
  • 2= Siri可用但未使能

例如:+APLSIRI: 1(Siri可用且使能)

6.2.2 从iOS设备接收Siri可用更新

在初始化已经完成后,iOS设备会在Siri状态改变后发送如下通知给配件。这个信息只在下列情况下被提供,那就是配件与iOS设备连接后至少发送了1此请求Siri状态(发送AT+APLSIRI?),也可以是iOS设备已经记录过Siri是可用的且以使能。

6.2.2.1 HFP Command+APLSIRI

描述:Siri状态改变时的未被请求事件通知
发起者:iOS设备
格式:+APLSIRI: value
value的定义:

  • 1=Siri可用且已使能
  • 2=Siri可用但未使能

例子:+APLSIRI:2 (Siri是可用的但未使能)
这里写图片描述

6.3 初始化一个Siri会话

一旦在配件和iOS设备之间建立了对Siri的支持,Siri会话能从任意一方启动。

6.3.1 从配件初始化一个会话

为了初始化一个Siri会话,配件必须使用语音识别命令AT+BVRA(定义于蓝牙免提Profile规范 v1.6 章4.25)。HFP Profile必须连接且SLC必须存在。

配件应使用如下命令序列:

  • 配件发送一个AT+BVRA=1命令给iOS设备
  • iOS设备发送一个OK应答
  • iOS设备展示一个Siri会话且创建一个音频同步连接(SCO)
  • 如果Siri会话未完成,配件必须发送AT+BVRA=1以维持交谈。这个需要多次发生。
  • 如果Siri会话完成了,iOS设备发送一个+BVRA:0结束码给配件。
  • iOS设备断开SCO连接。

在Siri会话激活时,配件必须使用户持续交谈且以当前上下文提出问题。为了这么做,配件必须能够发送一个AT+BVRA=1命令给iOS设备,甚至在Siri已经被激活且在+BVRA:0被收到之前。图6-2展示了Siri从配件上触发时的交互概览,运行中的会话被延续了2次,且一旦Siri完成了,设备丢弃了会话。
这里写图片描述

6.3.2 从iOS设备发起会话

如果配件支持语音识别命令,iOS设备发送一个+BVRA事件以指示Siri会话的开始。配件必须使能语音识别的支持且在特性应答时指出,详细描述见蓝牙免提Profile v1.6 章4.34.1。特别地,HFP Profile必须被连接,SLC必须存在,且语音识别激活(Bit 3)必须在AT+BRSF命令中被使能。如果配件支持语音识别激活,iOS设备将不为Siri会话使用虚拟呼叫功能。

配件应期待如下命令序列:

  • iOS设备发送一个+VBRA:1事件给配件。
  • iOS设备展示一个Siri会话且创建一个音频的SCO连接。
  • 当Siri会话完成时,iOS设备发送一个+BVRA:0结束码给配件
  • iOS设备断开SCO连接。
    这里写图片描述

6.3.3 由配件结束一个会话

一旦Siri会话在运行了,配件必须有能力通过发送一个AT+BVRA=0命令给iOS设备以结束会话。图6-4展示了一个由配件结束正在运行的Siri会话的例子。配件应只结束一个活跃会话,作为用户动作导致的直接结果。
这里写图片描述

6.4 Siri眼睛自由模式

Siri眼睛自由模式是一个特性以控制Siri应答,包括显示信息,且能按需开启或关闭。Siri眼睛自由模式只支持蓝牙功能的车载娱乐系统且不能用在任何其他配件。

iOS设备将监听HFP AT命令AT+APLEFM以使能或关闭眼睛自由模式。

这个命令被iOS设备用来修改Siri应答,包括可视信息或所需的用户交互。合适的音频反馈和语音命令将开放给客户,其基于Siri初始化的用户事件。

眼睛自由模式默认是关闭的。一旦配件已经使能眼睛自由模式,它在由配件初始化的所有后续的Siri会话中被使能,直到配件关闭它或蓝牙连接被断开。

6.4.1 HFP Command AT+APLEFM

描述:一个配件发送这个命令以通知一个iOS设备选择眼睛自由模式的状态。
发起者:配件
格式:AT+APLEFM=value
应答:OK
value的定义:

  • 0x00: 关闭眼睛自由模式
  • 0x01: 使能眼睛自由模式
  • 0x02-0xFF: 保留

例子:AT+APLEFM=1

6.5 提升语音识别

配件通过Siri会话发送给iOS设备的音频应当为了语音识别优化,而不是为了人类知觉(例如蜂窝电话通话)。

需要采用音频喜好滤波器以移除回声或反馈噪声

为了给Siri输入提供最好的音频质量,配件必须明确如下建议:

  • 回声消除和噪声抑制(EC/NR):配件必须完成回声消除和用于语音识别的线性噪声处理,而不是过度的噪声抑制从而减小了擦音声母。
  • 信号增益:当调节信号强度时,配件必须避免任何环境下的伪像、跌落、削减。配件不能使用非线性噪声抑制算法,因为这样会频谱衰减和形状摩擦。
  • 信噪比:建议平均信噪比大于20dB。在20dB以下,识别率会受影响。
  • 回响:建议保持RT60时间少于200ms。

6.5.1 宽频语音支持

配件在使用Siri时必须支持16KHz宽频语音音频,为的是更好的音频质量和语音识别性能。见蓝牙免提Profile v1.6 获取更多有关宽频语音的内容。窄带音频信号(8KHz)是支持的但不推荐。

6.6 Siri会话的优化

为了在使用Siri时获取最好的性能,配件设计应参照这些指导:

  • Siri会话的启动不应伴有配件的本地蜂鸣或口头指示(例如一个语音通话的通告)。当Siri会话被激活时,iOS设备发送两个蜂鸣指示用来表示Siri准备接收指令。增加额外的可闻通知只会在系统内插入延迟。
  • 配件应当代iOS设备以结束Siri会话。配件不应发送一个AT+BVRA=0命令,除非用户交互提示它这么做。
  • iOS设备期望配件能够在SCO连接建立后立刻开始渲染音频。这很重要,为的是让用户总是以最小的延迟听到Siri的蜂鸣声。这个延迟应在200ms以内。

7. iPod配件协议

第三方配件能使用iPod配件协议(iAP)以访问iOS设备的增强特性。其中一个特性允许第三方iOS应用通过iOS扩展配件框架进行加密通信。更多有关扩展配件框架的信息见http://developer.apple.%20com/library/ios/#featuredarticles/ExternalAccessoryPT/Introduction/Introduction.html。

为了将iAP组合进配件的设计,配件开发者必须是苹果MFi许可程序的成员之一且集成专门的MFi芯片到配件中。为了获取更多有关MFi的信息,见developer.apple.com/programs/mfi。


http://www.ppmy.cn/news/665163.html

相关文章

苹果电池测试软件i-t,Apple Watch出行绝佳伴侣,CHOETECH磁力充电座评测T313

在户外没有电源插座的情况下我们都习惯于使用移动电源为自己的手机充电&#xff0c;随着科技的不断发展&#xff0c;智能穿戴的产品也出现在了我们的视野当中&#xff0c;以Apple Watch为代表的智能手表也加入到了我们的生活并逐渐融入到了生活的方方面面。但是手表的充电必须要…

苹果MFI bluetooth认证开发过程:iDevice和accessory

研究材料&#xff1a; Accessory Interface Specification for Apple Devices.pdf iPodAuthenticationCoprocessorSpec2.0CR1 如果需要更详细的协议说明&#xff0c;可以下载MFI Accessory Firmware Specification PDF &#xff08;文档来自苹果授权方&#xff0c;如有侵权…

MYSQL-UNION

语法: UNION 操作符用来合并两个 SELECT 语句的结果 SELECT statement UNION [DISTINCT | ALL] SELECT statement UNION 中的 SELECT 语句中的列数、列顺序必须相同 UNION是双目操作符,需要两个SELECT语句作为操作数,UNION后面可以接DISTINCT或者ALL 如果不写DISTINCT或者…

PostgreSQL 索引管理

文章目录 前言1. 主键1.1 MySQL innodb 中的主键1.2 PostgreSQL 中的主键 2. PG 索引类型2.1 B-tree 索引2.2 HASH 索引2.2 GiST 索引2.3 SP-GiST 索引2.4 GIN 索引2.5 BRIN 索引 3. 索引管理语法3.1 创建唯一索引3.2 多列索引3.3 函数索引3.4 部分索引3.5 覆盖索引3.6 查看索引…

Matlab 图片保存不带白边的方法

Matlab在用imshow或者plot显示图片的时候&#xff0c;经常有白边或是其他的东西。 如果使用saveas的化&#xff0c;这个白边会被存起来。 我们可以这样&#xff1a; imshow(strain_image,border,tight,initialmagnification,fit);set (gcf,Position,[0,0,500,500]);这样再使…

origin 去掉白边

当图片复制的过程中有白边时 一&#xff1a; 1、“Tools”菜单—“Options”选项&#xff0c;或者直接按ctrlU快捷键。 2、在弹出的面板中选择“Page”标签&#xff0c;在“Copy Page settings”下面有个“Margin”&#xff0c;默认是Page。我们从后面的下拉菜单中选择“Border…

html实现字体加边框及填充

text-stroke字体描边 text-fill-color字体填充 <head><meta charset"utf-8" /><title>字体显示</title><style type"text/css">.fontShow{font-size: 26px;text-stroke: 1px #2c9cf0; text-fill-color:#fff;font-weight: b…

css给文字加白边

html: <div class"three">GO</div> css: .three {font-size: 240px;font-weight: 1000;color: #ffcc54;text-shadow: -1px 0 rgba(255, 255, 255, 1), 0 1px rgba(255, 255, 255, 1), 1px 0 rgba(255, 255, 255, 1), 0 -1px rgba(255, 255, 255, 1);}