这一节主要不是讲 BLE而是讲经典蓝牙 BR/EDR 场景下GAP 在描述两个设备之间的发现、连接、链路建立等流程时如何称呼流程的发起方和接受方。也就是在 BR/EDR GAP 里不直接一上来就说 Central / Peripheral而是用更通用的说法A-party发起方 B-party接受方我现在的重点是 蓝牙 LE所以不详细展开。在 LE 物理传输上GAP 定义了 4 个角色Broadcaster、Observer、Peripheral、Central。不同角色需要具备不同的物理层能力、Link Layer 状态能力、广播能力、扫描能力、连接控制能力。一、这一节整体想表达什么在 LE也就是 BLE 场景下GAP 定义了 4 个角色Broadcaster广播者 Observer观察者 / 监听者 Peripheral外设 Central中心设备这四个角色可以先这样粗略理解Broadcaster只负责发广播不建立连接 Observer只负责扫描广播不建立连接 Peripheral发可连接广播接受连接 Central扫描设备发起连接更贴近 BLE App 开发的话蓝牙 Beacon通常是 Broadcaster 只扫描附近设备的 AppObserver BLE 模块、手环、传感器通常是 Peripheral 手机 App 主动连接 BLE 设备通常是 Central但要注意一个设备不是永远只能有一个 GAP 角色。同一个设备在不同时间、不同功能下可以同时或切换扮演多个角色前提是 Controller 支持。二、最关键的一句话GAP 角色和 Link Layer 角色相关但不是完全一样原文里有一句很重要GAP roles “Central” and “Peripheral” are related to, but not the same as, the Link Layer roles with the same names.意思是GAP 里的 Central / Peripheral 和 Link Layer 里的 Central / Peripheral 有关系但不是完全相同的概念。这句话一定要理解。1. GAP 角色更偏“Profile 层 / 行为模式”GAP 的 Central / Peripheral 描述的是设备在 GAP 规范里的行为Central支持发起 LE 连接建立流程Peripheral支持接受 LE 连接建立流程。它更关心谁扫描谁广播谁发起连接谁接受连接设备应该支持哪些 GAP 流程。2. Link Layer 角色更偏“连接建立后的链路角色”Link Layer 的 Central / Peripheral 是连接建立成功后的链路角色。比如Central 负责连接事件调度Central 决定连接参数Peripheral 跟随 Central 的连接事件时序双方在连接态按照 Link Layer 规则收发数据。所以GAP Central表示设备具备发起连接的 GAP 能力 LL Central表示连接建立后在链路层处于 Central 角色GAP Peripheral表示设备具备接受连接的 GAP 能力 LL Peripheral表示连接建立后在链路层处于 Peripheral 角色3. 建立连接成功后两者会对应起来原文说如果连接成功建立那么具有这些 GAP 角色之一的设备也会拥有对应的 Link Layer 角色。也就是说GAP Central 发起连接成功后 → 在 Link Layer Connection State 中成为 LL Central GAP Peripheral 接受连接成功后 → 在 Link Layer Connection State 中成为 LL Peripheral但在连接建立之前一个设备可以处于 GAP Central 或 GAP Peripheral 角色却还没有 Link Layer 连接角色。这就是原文说的设备可以处于 GAP 角色中即使连接还没有建立。例如手机 App 正在扫描准备连接某个 BLE 模块手机此时可以说在执行 GAP Central 相关流程 但连接还没建立所以还不是 LL Central Connection StateBLE 模块正在发可连接广播模块此时可以说是 GAP Peripheral 但还没被连接所以还不是 LL Peripheral Connection State三、四个 LE GAP 角色具体说明1. Broadcaster role广播者角色原文意思是处于 Broadcaster 角色的设备会发送 advertising events 或 periodic advertising events也可能发送 BIS 事件。Broadcaster 必须有发送器可能有接收器。简单说Broadcaster 是只负责把信息广播出去的设备。典型特点主要行为发送广播 是否需要接收能力不一定 是否建立连接通常不建立连接 典型场景Beacon、广播传感器、只广播数据的设备表格里也能看到Transmitter characteristicsM Receiver characteristicsO意思是Broadcaster 必须具备发送能力因为它要发广播接收能力是可选的因为它不一定需要接收别人发来的东西。常见例子iBeacon Eddystone Beacon 只广播温度数据的传感器 只广播设备状态的 BLE 标签这类设备只要把广播包发出去不关心有没有中心设备连接它。2. Observer role观察者角色原文意思是处于 Observer 角色的设备会接收 advertising events 或 periodic advertising events也可能接收 BIS 事件。Observer 必须有接收器可能有发送器。简单说Observer 是只负责扫描、监听广播的设备。典型特点主要行为扫描广播 是否需要接收能力必须 是否需要发送能力可选 是否建立连接通常不建立连接 典型场景只扫描设备列表、不连接设备的 App 或扫描器表格里对应Transmitter characteristicsO Receiver characteristicsM意思是Observer 必须能接收因为它要扫描广播发送能力可选因为如果只是 passive scanning它可以只收不发。这里要特别注意如果 Observer 做的是Passive Scanning 被动扫描它只接收广播不发送 Scan Request。如果 Observer 做的是Active Scanning 主动扫描它会在收到可扫描广播后发送 Scan Request然后接收 Scan Response。所以 Observer 如果支持 Active Scanning就需要发送能力。3. Peripheral role外设角色原文意思是任何接受建立 LE active physical link 的设备都被称为处于 Peripheral 角色。处于 Peripheral 角色的设备在 Link Layer Connection State 中也会处于 Peripheral role。Peripheral 必须同时有发送器和接收器。简单说Peripheral 是等待别人来连接自己的设备。典型特点主要行为发可连接广播 连接方式接受 Central 发起的连接 连接建立后成为 LL Peripheral 是否需要收发能力必须同时具备 典型场景BLE 模块、手环、传感器、蓝牙外设为什么 Peripheral 必须同时有发送器和接收器因为它不仅要发广播还要接收 Central 发来的连接请求连接建立后还要和 Central 双向收发数据。例如你的 BLE 透传模块模块先发广播 手机扫描到模块 手机发起连接 模块接受连接 连接成功后模块成为 Peripheral这就是典型 Peripheral 场景。4. Central role中心角色原文意思是支持 Central 角色的设备会发起建立 LE active physical link。处于 Central 角色的设备在 Link Layer Connection State 中也会处于 Central role。Central 必须同时有发送器和接收器。简单说Central 是主动扫描并发起连接的设备。典型特点主要行为扫描、选择目标、发起连接 连接方式主动建立 LE 连接 连接建立后成为 LL Central 是否需要收发能力必须同时具备 典型场景手机 App、网关、电脑、主机设备为什么 Central 也必须同时有发送器和接收器因为它要接收 Peripheral 的广播必要时发送 Scan Request发起连接请求连接后双向收发数据。iOS/Android BLE App 大多数时候就是 GAP Central。四、表 2.1 里的 M / O / E / C.1 / C.2 是什么意思表格里大量出现M O E C.1 C.2可以这样理解M Mandatory强制支持 O Optional可选支持 E Excluded不适用 / 排除 C.x Conditional有条件要求这张表是在说不同 GAP 角色必须支持哪些物理层能力、Link Layer 状态、广播类型、扫描类型、链路控制流程。不用一开始把整张表背下来但要知道它的阅读方式。五、表 2.1 里最重要的内容怎么理解1. Physical layer functionality物理层功能这里主要看两个能力Transmitter characteristics发送能力 Receiver characteristics接收能力对应表格Broadcaster发送 M接收 O Observer发送 O接收 M Peripheral发送 M接收 M Central发送 M接收 M这非常符合直觉Broadcaster 主要发广播所以必须能发 Observer 主要扫描广播所以必须能收 Peripheral 既要广播又要连接所以必须能发也能收 Central 既要扫描又要连接所以必须能发也能收这是一张很值得记住的小表角色 发送能力 接收能力 Broadcaster 必须 可选 Observer 可选 必须 Peripheral 必须 必须 Central 必须 必须2. Link Layer States链路层状态表格列出了多个 Link Layer 状态Standby state Advertising state Scanning state Initiating state Synchronization State Isochronous Broadcasting State Connection state - Peripheral role Connection state - Central role对于现在理解 BLE 基础最关键的是前五个Standby待机状态 Advertising广播状态 Scanning扫描状态 Initiating发起连接状态 Connection连接状态Broadcaster 需要什么状态BroadcasterStandbyM AdvertisingM ScanningE InitiatingE ConnectionE意思是Broadcaster 必须支持待机和广播不要求扫描不发起连接不进入连接态。所以 Broadcaster 就是“广播型设备”。Observer 需要什么状态ObserverStandbyM ScanningM AdvertisingE InitiatingE ConnectionE意思是Observer 必须支持待机和扫描不要求广播不发起连接不进入连接态。所以 Observer 就是“扫描型设备”。Peripheral 需要什么状态PeripheralStandbyM AdvertisingM Connection state - Peripheral roleM ScanningE InitiatingE意思是Peripheral 必须支持待机、广播、以 Peripheral 角色进入连接态不要求扫描不主动发起连接。这就是Peripheral 广播 接受连接 连接后作为 PeripheralCentral 需要什么状态CentralStandbyM ScanningM InitiatingM Connection state - Central roleM AdvertisingE意思是Central 必须支持待机、扫描、发起连接、以 Central 角色进入连接态不要求广播。这就是Central 扫描 发起连接 连接后作为 Central六、广播事件类型怎么理解表格里列了很多 advertising event typesConnectable and scannable undirected event Connectable undirected event Connectable directed event Non-connectable and non-scannable undirected event Non-connectable and non-scannable directed event Scannable undirected event Scannable directed event这些是不同的广播事件类型。这里先抓主线不要一开始陷入每一种细节。对 Broadcaster 来说Broadcaster 最典型、最强制的是Non-connectable and non-scannable undirected eventM也就是不可连接、不可扫描、非定向广播事件是 Broadcaster 必须支持的。这符合 Broadcaster 的定位它只是把数据广播出去不让别人连接也不一定响应扫描请求。其他一些广播类型在 Broadcaster 下是 O 或 E说明可以支持但不是 Broadcaster 的核心必选项。对 Peripheral 来说Peripheral 最核心的是Connectable and scannable undirected eventM也就是可连接、可扫描、非定向广播事件是 Peripheral 必须支持的。这也符合 Peripheral 的定位它要能发广播让 Central 发现它它要能被连接它也可以提供 Scan Response。注意Peripheral 还可以支持其他广播类型例如 directed advertising、non-connectable advertising、scannable advertising但很多是 Optional。对 Central / Observer 来说Central 和 Observer 通常不是广播发送方所以这些 advertising event types 多数是 E。它们的重点不是“发什么广播”而是“怎么扫描、怎么连接”。七、扫描类型怎么理解表格里有两种扫描Passive scanning被动扫描 Active scanning主动扫描Passive scanning被动扫描被动扫描就是只接收广播包不发送 Scan Request表格里ObserverM CentralO意思是Observer 必须支持被动扫描Central 可选支持被动扫描。为什么 Central 的 Passive scanning 是 O因为 Central 的核心任务是建立连接不是单纯观察广播。它必须支持扫描状态但具体扫描类型的强制要求要看表里的条件和实现能力。Active scanning主动扫描主动扫描就是接收到可扫描广播后可以发送 Scan Request 然后接收对方的 Scan Response表格里ObserverO CentralC.1C.1 的脚注是Optional if passive scanning is supported, otherwise mandatory.意思是如果 Central 支持被动扫描那么主动扫描是可选的如果 Central 不支持被动扫描那么主动扫描就是必须的。换句话说Central 至少要有一种扫描能力否则它没办法发现目标设备并发起连接。八、Link Layer control procedures 怎么理解表格下半部分列了很多 Link Layer 控制流程比如Connection Update procedure Channel Map Update procedure Encryption procedure Feature Exchange procedure Version Exchange procedure ACL Termination procedure Data Length Update procedure PHY Update procedure这些流程是连接建立之后Link Layer 用来管理连接的控制过程。对你当前最重要的是理解Peripheral 和 Central 在连接态中需要支持一些连接管理流程。比如1. Connection Update procedure连接参数更新流程。用于更新连接间隔 connection interval 从设备延迟 slave latency / peripheral latency 监督超时 supervision timeout表格里 Peripheral 和 Central 都是 M说明连接参数更新是连接管理中的基础能力。2. Channel Map Update procedure信道映射更新流程。BLE 连接会在多个数据信道之间跳频。如果某些信道质量不好可以更新 channel map。Peripheral 和 Central 都是 M。3. Feature Exchange procedure特性交换流程。用于双方确认彼此支持哪些 Link Layer 功能。例如是否支持Data Length Extension LE 2M PHY LE Coded PHY Extended Advertising Periodic Advertising Isochronous 相关能力表格中 Central-initiated Feature Exchange 对 Peripheral 和 Central 都是 M。Peripheral-initiated Feature Exchange 是 C.2。C.2 的脚注是如果支持 Connection Parameters Request procedure则 mandatory否则 optional。4. Version Exchange procedure版本交换流程。用于交换 Controller 支持的蓝牙版本等信息。Peripheral 和 Central 都是 M。5. ACL Termination procedureACL 连接终止流程。也就是断开连接相关能力。Peripheral 和 Central 都是 M。这很好理解既然能连接就必须能断开。6. Encryption / Data Length / PHY Update 等这些在表里很多是 O表示可选。比如Encryption procedureO Data Length Update procedureO PHY Update procedureO LE Ping procedureO这说明不是所有最小化 BLE 设备都必须支持这些高级能力。但是在实际手机和主流 BLE 芯片中很多都会支持。后面可以按需要深入。九、2.2.2.5 多 GAP 角色并发运行原文说一个设备可以同时运行多个 GAP 角色只要 Controller 支持。Host 在使用任何流程或模式之前应该先从 Controller 读取支持的 Link Layer states 和 state combinations。这句话非常重要。意思是设备不是只能固定为一个角色。比如一个手机可以同时作为 Central 扫描并连接 BLE 外设 作为 Peripheral 被另一个设备连接 作为 Broadcaster 发 BLE 广播 作为 Observer 扫描周围广播但能不能同时做取决于 Controller 是否支持对应的状态组合。例如一边扫描一边广播 一边连接一边扫描 一边连接多个外设 一边作为 Peripheral 被连接一边作为 Central 连接别人这些并发能力不是 GAP 凭空保证的而是要看 Controller 支持情况。对应到 HCI 层Host 应该读取 Controller 支持的 Link Layer states 和 state combinations。这和你做 App 开发也有关iOS / Android 暴露给 App 的能力是系统蓝牙栈和硬件 Controller 能力共同决定的。不是规范允许就代表你的手机、系统 API、模块固件一定支持。十、当前 BLE 学习最应该掌握哪些内容现在最应该把这四个角色理解成一张图只发广播不连接 Broadcaster 只扫描不连接 Observer 发可连接广播等待别人连接 Peripheral 扫描目标设备主动发起连接 Central再进一步对应到 BLE 空口行为Broadcaster → Advertising Observer → Scanning Peripheral → Connectable Advertising 被连接 Central → Scanning Initiating 建立连接再对应到 HCI CommandBroadcaster / Peripheral LE Set Advertising Parameters LE Set Advertising Data LE Set Scan Response Data LE Set Advertising Enable Observer / Central LE Set Scan Parameters LE Set Scan Enable Central LE Create Connection / Extended Create Connection 连接后 Central / Peripheral Connection Update Feature Exchange Version Exchange Channel Map Update Data Length Update PHY Update Disconnect十一、最容易误解的地方误解 1Peripheral 就是一直发广播不完全对。Peripheral 在未连接前通常通过可连接广播等待连接。连接成功后它进入 Link Layer Connection State 的 Peripheral role此时它不再是普通意义上的“正在广播设备”而是在连接事件中和 Central 通信。当然有些设备支持连接后继续广播但那属于并发状态组合支持问题。误解 2Central 只是扫描设备不完全对。Observer 也扫描。Central 的关键不是“扫描”而是扫描 发起连接只扫描不连接更像 Observer。误解 3Broadcaster 和 Peripheral 都会广播所以一样不一样。Broadcaster 的核心是广播但不建立连接Peripheral 的核心是广播并接受连接建立所以二者的广播类型不同。Broadcaster 必须支持的是不可连接、不可扫描广播Peripheral 必须支持的是可连接、可扫描非定向广播。误解 4Observer 和 Central 都扫描所以一样不一样。Observer 的核心是只观察广播不建立连接Central 的核心是扫描后可以发起连接所以 Central 必须支持 Initiating state而 Observer 不需要。误解 5GAP Central 等于 LL Central不完全对。连接前GAP Central 可以存在 但还没有 LL Central connection state连接成功后GAP Central → LL Central GAP Peripheral → LL Peripheral所以它们有关联但不是同一个层级的概念。十二、一句话总结这部分的核心意思是LE GAP 定义了 Broadcaster、Observer、Peripheral、Central 四个角色。Broadcaster 负责广播但不连接Observer 负责扫描但不连接Peripheral 通过可连接广播接受连接Central 通过扫描并发起连接建立链路。GAP 角色描述的是设备在 Profile 层的行为要求而 Link Layer 角色描述的是连接建立后的链路层角色连接成功后GAP Central/Peripheral 会对应成为 Link Layer Central/Peripheral。一个设备也可以并发运行多个 GAP 角色但前提是 Controller 支持对应的 Link Layer 状态组合。这部分是GAP 第 2 章后半部分的总纲性说明它不是在讲某个具体 HCI Command也不是在讲某个具体广播包格式而是在说明GAP 为什么要存在以及 GAP 这份 Profile 要解决哪些通用问题。可以把这几节理解为2.3从用户角度说明蓝牙设备应该具备怎样的基本互通体验 2.4从规范角度说明GAP 定义了哪些通用基础能力 2.5已废弃不用看一、2.3 User requirements and scenarios 想表达什么这一节标题是User requirements and scenarios 用户需求和使用场景它主要想表达的是用户在合理预期下应该能够把一个 Bluetooth 设备连接到另一个 Bluetooth 设备即使两个设备没有共同应用也应该能通过基本蓝牙能力让用户知道这一点。换成人话就是蓝牙设备不能让用户“糊里糊涂地失败”。比如两个设备能不能连接、能不能配对、有没有共同服务、是否支持同一个应用场景用户至少应该能通过基本蓝牙能力发现一些信息而不是完全没有反馈。二、2.3 的关键信息关键点 1蓝牙设备应该尽量具备基本互操作性原文说The Bluetooth user should, where expected, be able to connect a Bluetooth device to any other Bluetooth device.意思是在合理预期下用户应该能够把一个蓝牙设备连接到另一个蓝牙设备。这里的重点不是说“任何蓝牙设备都一定能完成业务通信”而是说只要场景合理设备之间至少应该能按照蓝牙的通用流程进行发现、连接、识别能力。例如手机应该能发现附近的 BLE 外设BLE 外设应该能按照规范广播自己如果设备支持可连接模式中心设备应该可以尝试建立连接如果不支持某个应用功能也应该有办法让用户知道而不是表现得像设备坏了。关键点 2没有共同应用也应该能让用户知道原文说Even if the two connected devices don’t share any common application, it should be possible for the user to find this out using basic Bluetooth capabilities.意思是即使两个已经连接的设备没有共同应用也应该能通过基本蓝牙能力让用户知道这一点。这个点很重要。比如一个手机连接到一个 BLE 设备但这个 BLE 设备没有你 App 需要的 Service一个设备支持某种 Profile另一个设备不支持两个设备都叫“Bluetooth device”但业务层能力不匹配。这种情况下不应该让用户完全不知道原因。在 BLE 中这通常可以通过以下方式体现广播数据中暴露部分基本能力 连接后通过 GATT Service Discovery 发现服务 通过 Device Information Service 获取设备信息 通过 GAP Device Name / Appearance 显示基本信息 通过配对/安全流程提示用户也就是说GAP 关心的不只是“能不能连”还关心用户能不能识别设备、理解设备、知道设备是否匹配当前用途。关键点 3不同厂商不能因为名字不同、流程顺序不同就阻碍连接原文说When the two devices do share the same application but are from different manufacturers, the ability to connect them should not be blocked just because manufacturers choose to call basic Bluetooth capabilities by different names on the user interface level or implement basic procedures to be executed in different orders.意思是如果两个设备支持同一个应用场景但来自不同厂商那么它们不应该因为厂商在用户界面上给基础蓝牙能力起了不同名字或者基础流程执行顺序不同就导致无法连接。这是 GAP 非常核心的价值统一基本概念、基本名称、基本流程减少厂商差异导致的互通问题。例如A 厂商 App 里叫“配对”B 厂商 App 里叫“绑定”C 厂商 App 里叫“连接设备”D 厂商 App 里叫“添加设备”。如果底层都是蓝牙通用流程那么不应该因为 UI 名称不同就影响互通。再比如某个厂商先扫描再过滤另一个厂商先按地址过滤再连接某个厂商先读设备名另一个厂商先发现服务。只要它们遵循蓝牙规范的通用流程就不应该因为这些实现差异导致基本连接能力不可用。三、2.4 Profile fundamentals 想表达什么这一节标题是Profile fundamentals Profile 基础原则 / 基础内容它是在总结GAP 这个 Profile 到底定义了哪些基础能力。它主要说了 5 类内容。四、2.4 的关键信息关键点 1GAP 定义用户界面层面的名称、值和编码方案原文说This profile states the requirements on names, values and coding schemes used for names of parameters and procedures experienced on the user interface level.意思是GAP 会规定用户界面层面能感知到的参数名、流程名、取值和编码方式。简单说GAP 规范会影响用户看到的一些蓝牙信息应该怎么表达。比如Device Name设备名称 Appearance设备外观类型 Class of Device设备类别经典蓝牙中更常见 Discoverable是否可发现 Connectable是否可连接 Bonding绑定 Pairing配对对于你做 App 来说这点很现实。比如 App 扫描到一个 BLE 设备后显示设备名称 设备地址 设备类型 广播数据 是否可连接 RSSI Appearance Service UUID Manufacturer Data其中有些信息就和 GAP/GATT 的通用定义有关。关键点 2GAP 定义非具体业务 Profile 的通用操作模式原文说This profile defines modes of operation that are not service- or profile-specific, but that are generic and can be used by profiles referring to this profile, and by devices implementing multiple profiles.意思是GAP 定义的是一些不属于某个具体 Service 或具体 Profile 的通用操作模式。也就是说GAP 是通用基础层不是某个业务 Profile。比如GAP 不是专门服务于心率设备GAP 不是专门服务于 HID 键盘GAP 不是专门服务于蓝牙音频GAP 不是专门服务于你公司的 BLE 透传模块。它定义的是所有这些场景都可能用到的通用行为发现 广播 扫描 连接 安全 绑定 设备名称 设备身份 基本能力暴露所以很多其他 Profile 会引用 GAP。关键点 3GAP 定义发现其他设备身份、名称和基础能力的通用流程原文说This profile defines the general procedures that can be used for discovering identities, names and basic capabilities of other Bluetooth devices that are in a mode where they can be discovered.意思是GAP 定义了通用流程用于发现处于可发现模式下的其他蓝牙设备的身份 identities 名称 names 基础能力 basic capabilities这句话和 BLE 广播、扫描关系很大。在 BLE 中可以对应理解为Peripheral / Broadcaster 通过广播暴露自己Observer / Central 通过扫描发现设备广播包或扫描响应包中可能携带设备名称、Service UUID、Manufacturer Data 等信息连接后还可以进一步读取 GAP Service、GATT Service 获取更多信息。但原文后面还补了一句Only procedures where no channel or connection establishment is used are specified.意思是这里说的发现流程只规定那些不需要建立 channel 或 connection的流程。对 BLE 来说你可以理解为GAP 的发现流程重点是连接前的发现也就是广播和扫描这一类流程。例如扫描广播包 获取设备名称 获取设备地址 识别是否可连接 识别部分服务 UUID 获取广播中的基本能力这些都可以在未连接的情况下完成。关键点 4GAP 定义创建 Bond 的通用流程原文说This profile defines the general procedure for how to create bonds (i.e., dedicated exchange of link keys) between Bluetooth devices.意思是GAP 定义了蓝牙设备之间如何创建 Bond 的通用流程也就是专门交换链路密钥。这里要区分几个词Pairing配对 Bonding绑定 Link Key / Long Term Key后续重连或加密使用的密钥材料在 BLE 中更常见的是Pairing双方完成配对协商安全参数生成密钥 Bonding把密钥保存下来以后重连可以复用你可以先这样理解Pairing 更像是一次安全协商过程Bonding 更强调把配对结果保存下来形成长期关系。比如手机第一次连接 BLE 设备时弹出配对配对成功后保存密钥下次连接时不再弹窗直接加密通信这就是 bonding 的实际价值。不过 GAP 这里只是说它会定义 general procedure。具体加密、密钥分发、配对方法还要结合 SMP 去看。关键点 5GAP 定义建立连接的通用流程原文说This profile describes the general procedures that can be used for establishing connections to other Bluetooth devices that are in a mode that allows them to accept connections and service requests.意思是GAP 描述了通用流程用于和那些处于“允许接受连接和服务请求”模式下的设备建立连接。在 BLE 中就是Peripheral 进入可连接广播模式 Central 扫描到目标设备 Central 发起连接建立 Peripheral 接受连接 连接成功后双方进入连接态这里对应之前看的很多 HCI CommandPeripheral 侧 LE Set Advertising Parameters LE Set Advertising Data LE Set Scan Response Data LE Set Advertising Enable Central 侧 LE Set Scan Parameters LE Set Scan Enable LE Create Connection / LE Extended Create Connection也对应 Link Layer 空口上的过程ADV_IND / 可连接广播 SCAN_REQ / SCAN_RSP如果是可扫描广播 CONNECT_IND / AUX_CONNECT_REQ取决于 legacy / extended advertising 连接建立后进入 connection events所以 GAP 的连接流程是“规则层”HCI 和 Link Layer 是“实现层”。五、2.5 This section is no longer used这一节写的是This section is no longer used意思是这一节已经不再使用。可以直接跳过。它通常是规范版本历史演进留下来的空章节不需要学习。六、这一部分最关键的信息总结你可以重点记住下面 5 点。1. GAP 的目标之一是保证用户层面的基本互通体验不同厂商设备不能因为名称不同、流程顺序略有差异就导致原本应该能互通的蓝牙功能无法使用。2. GAP 不是业务 Profile而是通用基础 Profile它不专属于某个业务场景而是给其他 Profile 提供基础能力。例如发现设备 识别设备 建立连接 创建绑定 处理安全 统一用户可见参数3. GAP 发现流程重点是连接前发现尤其对 BLE 来说重点就是广播 Advertising 扫描 Scanning 扫描响应 Scan Response 可发现模式 Discoverable Mode 观察流程 Observation Procedure 发现流程 Discovery Procedure这部分一般不依赖连接建立。4. GAP 也关心 Bonding也就是设备之间建立长期信任关系。但你刚开始学时不需要马上深入安全算法和密钥细节。先知道GAP 会定义绑定流程的通用规则 SMP 负责更底层的配对、密钥分发、安全机制5. GAP 也定义连接建立的通用流程这对 BLE 很关键Peripheral进入可连接模式等待连接 Central发现目标设备发起连接这就是后面学习 LE connection establishment procedures 的基础。七、结合 BLE 学习路线这里应该怎么学现在读到这里可以把 GAP 的学习主线整理成下面这样第一层用户体验目标 不同厂商设备应该能被发现、识别、连接不能因为名称和流程差异造成互通障碍。 第二层GAP 通用能力 发现设备、识别设备、建立连接、创建绑定、安全流程、用户可见参数。 第三层LE 角色 Broadcaster、Observer、Peripheral、Central。 第四层LE 行为流程 广播、扫描、发现、连接建立、连接后的安全和服务请求。 第五层落地到 HCI / Link Layer HCI Command 控制 Controller Link Layer PDU 在空口上传输 GAP 定义上层规则和流程。八、你现在最应该关注的内容当前目标是理解 LE所以这部分中最有价值的是发现 identities / names / basic capabilities 创建 bonds 建立 connections对应到 BLE 学习就是广播包里能暴露什么信息 扫描响应有什么作用 设备名称从哪里来 什么时候算可发现 什么时候算可连接 Central 如何发现并连接 Peripheral Pairing 和 Bonding 有什么区别 连接后服务请求和安全要求有什么关系这些问题会贯穿后面的 LE GAP 章节。九、一句话总结这部分的核心意思是GAP 的目标是保证不同厂商蓝牙设备在用户层面具备基本互通体验它定义的不是某个具体业务功能而是蓝牙设备发现、身份/名称/基础能力识别、绑定、安全和连接建立等通用流程。对 BLE 来说这部分是在为后面的广播、扫描、发现流程、连接建立流程和绑定流程打基础。