首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【0x0005】HCI_Create_Connection命令详解

【0x0005】HCI_Create_Connection命令详解

作者头像
byte轻骑兵
发布2026-01-21 14:08:45
发布2026-01-21 14:08:45
940
举报

HCI_Create_Connection 命令的主要功能是指示链路管理器(Link Manager)创建一个与远程设备的连接。这个连接是在BR/EDR控制器层面,通过发起寻呼(Page)过程来建立链路级别的连接。链路管理器会根据本地设备的当前状态、微微网(piconet)状态以及待连接设备的状态,来确定新的ACL连接的建立方式。

一、命令概述

HCI_Create_Connection 命令核心功能在于促使链路管理器依据命令参数中指定的远程设备的 BD_ADDR(蓝牙设备地址),创建与该远程设备的连接。一旦此命令被执行,本地的BR/EDR控制器便会启动寻呼(Page)流程,进而创建链路级别的连接。

关于新的ACL连接具体如何建立,并非固定不变,而是由多方面因素共同决定。链路管理器会综合考量本地设备的当前状态、所在微微网(piconet)的情况以及待连接设备的状态,来最终确定该 ACL 连接的建立方式,以此实现不同蓝牙设备间有效的链路连接搭建,为后续的数据通信等操作奠定基础。

二、命令格式及参数

2.1. HCI_Create_Connection 命令命令格式

HCI_Create_Connection 命令的格式通常遵循HCI(Host Controller Interface)协议的规范,由操作码(OpCode)、参数总长度(Parameter_Total_Length)和各个参数组成。

  • 操作码(OpCode):由操作码组字段(OGF)和操作码命令字段(OCF)组成,用于标识特定的HCI命令。对于HCI_Create_Connection命令,OGF通常为0x01(表示链路控制),OCF为0x0005。
  • 参数总长度(Parameter_Total_Length):表示命令参数的总长度(以字节为单位)。
  • 命令参数:包括 BD_ADDR、Packet_Type、Page_Scan_Repetition_Mode、Reserved、Clock_Offset 和 Allow_Role_Switch,这些参数按照一定的顺序排列,用于向链路管理器提供创建连接所需的详细信息。
  • 示例:以下是一个HCI_Create_Connection命令的示例:
    • 操作码:0x0405(由OGF 0x01和OCF 0x0005组成)
    • 参数总长度:13字节(0x0D)
    • 参数:
      • BD_ADDR:0x34:0x36:0x55:0xce:0x01:0xeb(示例地址)
      • Packet_Type:0xcc18(示例值,表示支持多种数据包类型)
      • Page_Scan_Repetition_Mode:0x01(表示R1模式)
      • Reserved:0x00
      • Clock_Offset:0xf094(示例值,表示有效的时钟偏移)
      • Allow_Role_Switch:0x01(表示支持角色互换)

2.2. BD_ADDR

BD_ADDR是远程设备的蓝牙设备地址(Bluetooth Device Address),用于唯一标识要连接的目标设备。链路管理器将依据这个地址来发起与特定远程设备的连接过程。

2.3. Packet_Type

Packet_Type参数指定了链路管理器在 ACL 连接中应该使用的数据包类型。主机(Host)不能指定本地控制器不支持的数据包类型。在发送 HCI ACL 数据分组时,链路管理器只能使用由 Packet_Type 指定的数据包类型或者始终允许的 DM1 数据包类型。可以通过对不同数据包类型进行按位或(bit - wise OR)操作来为 Packet_Type 参数指定多种数据包类型,然后链路管理器会从可接受的数据包类型列表中选择要使用的数据包类型。不同数据包类型的详细定义可参考蓝牙协议文档 [Vol 2] Part B, Section 6.5。

每一位都对应着一种或多种可能的数据包类型。

  • 位 1(2-DH1):不使用。意味着2-DH1类型的数据包在当前的连接中不应被使用。
  • 位 2(3-DH1):不使用。与位1类似,3-DH1类型的数据包也不应被使用。
  • 位 3:忽略;无论此位是否设置,DM1数据包都可能被使用。意味着DM1数据包是默认可用的,不受此位的影响。
  • 位 4(DH1):可以使用。如果设置了此位,则DH1类型的数据包可能被使用。
  • 位 8(2-DH3):不使用。2-DH3类型的数据包在当前的连接中不应被使用。
  • 位 9(3-DH3):不使用。与位8类似,3-DH3类型的数据包也不应被使用。
  • 位 10(DM3):可以使用。如果设置了此位,则DM3类型的数据包可能被使用。
  • 位 11(DH3):可以使用。如果设置了此位,则DH3类型的数据包可能被使用。
  • 位 12(2-DH5):不使用。2-DH5类型的数据包在当前的连接中不应被使用。
  • 位 13(3-DH5):不应使用。与位12类似,3-DH5类型的数据包也不应被使用。
  • 位 14(DM5):可以使用。如果设置了此位,则DM5类型的数据包可能被使用。
  • 位 15(DH5):可以使用。如果设置了此位,则DH5类型的数据包可能被使用。
  • 所有其他位:保留供将来使用。这些位在当前版本中未定义,应设置为0。

数据包类型解释

  • DMx:表示数据(Data)模式下的x个时隙数据包。DM1、DM3和DM5分别表示1、3和5个时隙的数据包。
  • DHx:表示数据(Data)和握手(Handshake)模式下的x个时隙数据包。DH1、DH3和DH5分别表示1、3和5个时隙的数据包,其中包含握手信息。
  • 2-DHx 和 3-DHx:这些表示特定于蓝牙核心规范版本的数据包类型,通常与不同的调制方式和/或编码方案相关。在蓝牙的经典规范中(如1.x和2.x版本),这些类型可能不被使用或具有特定的含义。

2.4. Page_Scan_Repetition_Mode

Page_Scan_Repetition_Mode参数指定了具有 BD_ADDR 的远程设备所支持的寻呼扫描重复模式(Page Scan Repetition Mode)。在查询(inquiry)过程中或者从 HCI_Page_Scan_Repetition_Mode_Change 事件中获取的最新信息版本。该参数对于正确寻呼远程设备以建立连接非常重要,因为它决定了远程设备何时处于可被寻呼的状态。

  • 0x00 (R0):表示页面扫描重复模式R0。
  • 0x01 (R1):表示页面扫描重复模式R1。
  • 0x02 (R2):表示页面扫描重复模式R2。

2.5. Reserved

Reserved目前是保留(Reserved)状态。

2.6. Clock_Offset

Clock_Offset参数表示本地设备自身时钟与具有 BD_ADDR 的远程设备时钟之间的差值。不过,在这个差值中,只有第 2 位到第 16 位被使用,并且它们分别映射到此参数的第 0 位到第 14 位。位于 Clock_Offset 参数的第 15 位的 Clock_Offset_Valid_Flag 用于指示 Clock_Offset 是否有效。这个时钟偏移信息对于蓝牙设备在连接过程中进行同步等操作是非常关键的,因为蓝牙设备需要在一定程度上同步时钟来确保数据的正确传输。

  • 0-14位(Bits 16-2 of CLKNPeripheral - CLK):这15位用于表示时钟偏移量的具体值。它们表示的是本地时钟与远端设备时钟之间的相对偏移。这个偏移量用于在后续的连接过程中进行时钟同步,以确保数据的正确传输。
  • 15位(Clock_Offset_Valid_Flag):这是时钟偏移量的有效标志位。当该位被设置为1时,表示时钟偏移量是有效的;当该位被设置为0时,表示时钟偏移量是无效的。如果时钟偏移量无效,那么设备可能会忽略该参数或使用默认值进行时钟同步。
  • 使用注意事项:
    • 时钟偏移量的计算:时钟偏移量的具体计算方式可能因蓝牙设备的不同而有所差异。通常,它需要根据设备的时钟频率和已知的时钟漂移率来进行计算。在蓝牙通信中,设备通常会定期更新时钟偏移量,以适应时钟漂移的变化。
    • 时钟同步的重要性:时钟同步是蓝牙通信中的关键步骤之一。它确保了数据在传输过程中的正确性和可靠性。如果时钟不同步,那么数据可能会出现错位或丢失,导致通信失败。
    • 参数的有效性:在设置 Clock_Offset 参数时,应确保该参数是有效的。如果设置了无效的时钟偏移量,那么设备可能会无法进行正确的时钟同步,从而影响通信性能。
    • 兼容性考虑:不同的蓝牙设备可能支持不同的时钟偏移量范围和精度。因此,在进行蓝牙通信时,需要考虑设备的兼容性,以确保双方能够正确地理解和使用时钟偏移量参数。

2.7. Allow_Role_Switch

Allow_Role_Switch 参数指定本地设备在连接建立时(在本地控制器返回 HCI_Connection_Complete 事件之前,在 HCI_Accept_Connection_Request 命令的 Role 参数中)是否接受或拒绝来自远程设备的角色切换请求。涉及到蓝牙通信中的主从角色(Master/Slave)分配问题,不同的角色在通信过程中有不同的职责和权限,例如主设备可以控制链路的时序等。

  • 0x00:本地设备将作为中央设备,并且在连接建立时不会接受远程设备发起的角色切换请求。意味着一旦连接建立,本地设备的角色将是固定的,不会根据远程设备的请求而改变。
  • 0x01:本地设备可以作为中央设备,但在连接建立时,如果远程设备请求角色切换,本地设备可以接受并变成外围设备。提供了更大的灵活性,允许设备根据通信需求动态地改变角色。
  • 使用注意事项:
    • 角色切换的时机:角色切换通常发生在连接建立阶段,但也可以在连接建立后的某个时刻进行。然而,需要注意的是,并不是所有的蓝牙设备和配置都支持角色切换。
    • 功耗考虑:作为中央设备通常意味着需要主动发起连接和维持连接状态,可能会消耗更多的能量。相比之下,作为外围设备则通常处于被动等待状态,功耗相对较低。因此,在允许角色切换时,需要考虑设备的功耗需求。
    • 兼容性考虑:不同的蓝牙设备和配置可能支持不同的角色切换策略和机制。因此,在进行蓝牙通信时,需要确保双方设备都支持所期望的角色切换方式。
    • 安全性考虑:在某些情况下,角色切换可能会引入潜在的安全风险。例如,如果攻击者能够迫使设备切换到不期望的角色,那么可能会破坏通信的完整性和保密性。因此,在实现角色切换功能时,需要仔细考虑安全性问题。

Allow_Role_Switch 参数在蓝牙连接建立过程中起着重要的作用,它允许设备根据需要动态地改变角色,从而提供更大的灵活性和适应性。然而,在使用该参数时,需要考虑功耗、兼容性和安全性等因素。

三、返回事件及参数

3.1. HCI_Command_Status 事件

当蓝牙BR/EDR控制器接收到 HCI_Create_Connection 命令后,它应当向主机(Host)发送 HCI_Command_Status 事件。

这个事件的作用在于告知主机,控制器已经接收到了创建连接的命令,让主机知晓命令传递环节已顺利完成,并且可以通过该事件反馈的相关状态信息(例如命令是否被正确接收、有无执行方面的问题等)来初步判断命令执行的起始情况。

3.2. HCI_Connection_Complete 事件

另外,当链路管理器判定连接已经成功建立时,参与形成该连接的双方 BR/EDR 控制器都需要向各自对应的主机发送一个 HCI_Connection_Complete 事件。

这个事件十分关键,因为它包含了此次连接的连接句柄(Connection_Handle)信息(前提是 HCI_Create_Connection 命令执行成功)。连接句柄可以被主机后续用于对该连接进行各种操作和管理,比如进行数据传输、监控连接状态、执行连接相关的配置调整等。

简而言之,当尝试创建蓝牙连接时,首先会收到一个命令状态事件,表明命令已经被接收;当连接成功建立后,双方都会收到一个连接完成事件,其中包含了用于管理这个连接的句柄。

四、命令执行流程

以下是对HCI_Create_Connection命令执行流程的详细梳理。

4.1. 命令发起

  • 主机(Host)角色:负责构建并发送HCI_Create_Connection命令。
  • 命令内容:包括命令码和一系列关键参数,如前文所述。

4.2. 命令接收与初步反馈

  • 蓝牙控制器(Controller)角色:接收来自主机的HCI_Create_Connection命令。
  • 反馈机制:通过发送HCI_Command_Status事件来告知主机命令已被接收并正在处理。这个事件通常包含命令的状态码,用于指示命令是否被成功接收和开始执行。

4.3. 连接建立过程

  • 链路管理器(Link Manager,LM)角色:负责在蓝牙控制器内部执行连接建立的具体操作。
  • 寻呼过程:根据BD_ADDR参数,开始寻呼远程设备以建立链路级别的连接。
  • 连接建立:经过一系列的认证和加密步骤(如果启用),链路管理器最终确定连接是否成功建立。

4.4. 连接完成反馈

  • 事件生成:当连接成功建立时,双方蓝牙控制器的链路管理器都会向各自的主机发送HCI_Connection_Complete事件。
  • 事件内容:包含连接句柄(Connection_Handle),这是连接建立后用于后续通信的唯一标识符。如果命令成功执行,还可能包含其他相关信息,如连接的状态、角色等。

4.5. 后续操作与管理

  • 数据传输:一旦连接建立成功,双方蓝牙设备就可以开始进行数据传输和通信了。
  • 连接管理:在数据传输过程中,可能需要使用其他HCI命令来管理连接,如更改连接参数(如波特率、数据包大小等)、更新数据包类型、监控连接状态等。
  • 连接断开:当不再需要连接时,可以使用HCI_Disconnect命令来断开连接,并释放相关资源。

通过这一系列精心设计的步骤和事件反馈机制,HCI_Create_Connection命令能够确保蓝牙设备之间能够安全、有效地建立连接,为后续的数据传输和通信提供坚实的基础。

4.6. 示例代码

以下代码示例是一个高度概括的版本,旨在展示如何组织代码来模拟这一流程。请注意,实际实现将依赖于特定的蓝牙协议栈和硬件接口。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h> // 用于sleep函数模拟延迟

// 假设的HCI命令结构体
typedef struct {
    uint16_t opcode;       // 命令码
    uint8_t  bdaddr[6];    // 远端蓝牙设备地址
    uint8_t  packet_type;  // 数据包类型
    uint8_t  page_scan_rep_mode; // 寻呼扫描重复模式
    uint8_t  reserved;     // 保留位
    uint16_t clock_offset; // 时钟偏移量
    uint8_t  allow_role_switch; // 是否允许角色转换
} hci_create_connection_cp;

// 假设的HCI事件结构体
typedef struct {
    uint8_t  event;
    uint8_t  status;
    uint16_t connection_handle; // 连接句柄
    // 其他可能的事件参数...
} hci_event_t;

// 模拟发送HCI命令的函数
void send_hci_command(const hci_create_connection_cp *cp) {
    // 在这里实现与蓝牙硬件驱动的交互来发送HCI命令
    // 例如,通过串口、USB或其他接口发送数据
    printf("Sending HCI_Create_Connection command...\n");
    // 模拟命令发送成功
}

// 模拟接收HCI事件的函数
void receive_hci_event(hci_event_t *event) {
    // 在这里实现从蓝牙硬件驱动接收HCI事件的逻辑
    // 例如,通过串口、USB或其他接口接收数据
    // 这里我们模拟一个成功的连接完成事件
    event->event = 0x03; // 假设0x03是连接完成事件的代码
    event->status = 0x00; // 状态码0x00表示成功
    event->connection_handle = 0x0001; // 假设的连接句柄
    // 设置其他事件参数...
}

// 模拟等待并处理HCI命令状态的函数
void wait_for_command_status(uint16_t opcode) {
    // 在这里实现等待HCI_Command_Status事件的逻辑
    // 可以设置一个超时机制来防止无限等待
    // 这里我们简单模拟一个成功的命令状态反馈
    printf("Received HCI_Command_Status event (command accepted).\n");
}

// 主函数,模拟HCI_Create_Connection命令的执行流程
int main() {
    // 准备HCI_Create_Connection命令参数
    hci_create_connection_cp cp;
    memset(&cp, 0, sizeof(cp));
    cp.opcode = 0x0005; // HCI_Create_Connection命令码
    // 设置远端蓝牙设备地址(示例地址)
    cp.bdaddr[0] = 0x00; cp.bdaddr[1] = 0x11; cp.bdaddr[2] = 0x22;
    cp.bdaddr[3] = 0x33; cp.bdaddr[4] = 0x44; cp.bdaddr[5] = 0x55;
    cp.packet_type = 0x03; // 示例数据包类型
    cp.page_scan_rep_mode = 0x02; // 示例寻呼扫描重复模式
    cp.reserved = 0x00;
    cp.clock_offset = 0x0000; // 示例时钟偏移量
    cp.allow_role_switch = 0x01; // 允许角色转换

    // 发送HCI_Create_Connection命令
    send_hci_command(&cp);

    // 等待并处理HCI_Command_Status事件
    wait_for_command_status(cp.opcode);

    // 准备接收HCI_Connection_Complete事件
    hci_event_t event;
    receive_hci_event(&event);

    // 检查连接完成事件的状态
    if (event.status == 0x00) {
        printf("Connection established successfully with handle 0x%04X\n", event.connection_handle);
        // 在这里实现连接建立后的后续操作,如数据传输等
    } else {
        printf("Failed to establish connection, status 0x%02X\n", event.status);
    }

    // 在实际应用中,这里应该还有更多的错误处理和资源管理代码

    return 0;
}

请注意,上述代码仅用于演示目的,并没有实际与蓝牙硬件进行交互。在实际应用中,需要根据所使用的蓝牙协议栈和硬件接口来实现send_hci_commandreceive_hci_event函数的具体逻辑。此外,还需要处理各种可能的错误情况和超时情况,以确保系统的健壮性和稳定性。

五、应用场景

HCI_Create_Connection命令在蓝牙通信中扮演着至关重要的角色,其应用场景主要涉及到与指定蓝牙设备建立ACL连接的过程。以下是该命令的具体应用场景梳理。

5.1. 智能手机与蓝牙耳机连接

  • 场景描述:用户希望通过智能手机连接蓝牙耳机,享受无线音频体验。
  • 连接过程:智能手机作为主机发送HCI_Create_Connection命令,包含耳机的BD_ADDR、Packet_Type等参数。连接成功后,手机通过连接句柄将音频数据传输到耳机。

5.2. 智能手表与手机的数据同步

  • 场景描述:智能手表需要定期与智能手机同步数据,如运动信息、通知等。
  • 连接过程:智能手表作为发起方发送HCI_Create_Connection命令,指定手机的BD_ADDR和适合小数据量传输的Packet_Type。连接建立后,手表与手机进行数据同步。

5.3. 蓝牙音箱多设备连接

  • 场景描述:蓝牙音箱支持同时连接多个音频源设备,如手机、平板电脑等。
  • 连接过程:新设备发送HCI_Create_Connection命令连接音箱,根据音频播放需求确定Packet_Type。音箱可能允许角色切换,以优化音频播放。连接成功后,设备通过音箱播放音频。

5.4. 工业蓝牙传感器与数据采集器连接

  • 场景描述:在工业环境中,蓝牙传感器需要将采集的数据传输给数据采集器。
  • 连接过程:传感器发送HCI_Create_Connection命令连接数据采集器,选择适合传输传感器数据的数据包类型。连接建立后,传感器将数据传输给采集器进行进一步处理。

5.5. 蓝牙键盘与电脑连接

  • 场景描述:用户希望通过蓝牙键盘与电脑进行无线输入。
  • 连接过程:蓝牙键盘发送HCI_Create_Connection命令连接电脑,指定电脑的BD_ADDR和适合的Packet_Type。连接成功后,键盘通过蓝牙将输入数据发送给电脑。

5.6. 蓝牙健康监测设备与手机连接

  • 场景描述:用户佩戴蓝牙健康监测设备(如心率监测器、血压计等),希望将数据同步到手机。
  • 连接过程:健康监测设备发送HCI_Create_Connection命令连接手机,选择适合传输健康数据的数据包类型。连接成功后,设备将健康数据发送给手机进行记录和分析。

5.7. 蓝牙打印机与移动设备连接

  • 场景描述:用户希望通过蓝牙打印机从移动设备打印文件或照片。
  • 连接过程:移动设备发送HCI_Create_Connection命令连接打印机,指定打印机的BD_ADDR和适合的Packet_Type。连接成功后,移动设备将打印任务发送给打印机进行打印。

HCI_Create_Connection命令在蓝牙通信中具有广泛的应用场景,涵盖了从个人娱乐设备到工业监控系统的各个领域。通过该命令,蓝牙设备能够建立稳定的连接,实现数据传输和通信功能,为用户的日常生活和工作提供了极大的便利。

六、注意事项和使用建议

6.1. 注意事项

  • 参数设置:在使用HCI_Create_Connection命令时,需要正确设置参数。参数的设置将直接影响到连接的建立和质量。
  • 时钟偏移:在连接建立过程中,需要注意时钟偏移(Clock Offset)的同步问题。时钟偏移是本地蓝牙时钟和远端蓝牙设备时钟的差值,其数值是2个字节的低15位,最高位是该差值有效标志。只有当该位为1时,时钟差值才有效。
  • 角色转换:Allow_Role_Switch参数用于设定本地蓝牙设备是否允许主从角色转换。根据实际需求,可以选择本地设备为主设备或从设备,或者接受来自远端设备的角色转换请求。
  • 连接状态:在发送HCI_Create_Connection命令后,需要关注主机控制器返回的HCI_Command_Status事件和HCI_Connection_Complete事件。这些事件将提供连接建立的状态和结果信息。
  • 错误处理:如果连接建立失败,需要仔细分析失败原因,并根据错误代码进行相应的处理。例如,如果错误代码为“Unknown Connection Identifier”,则可能是因为BD_ADDR设置错误或连接已被取消。

6.2. 使用建议

  • 了解设备特性:在使用HCI_Create_Connection命令之前,需要充分了解要连接的蓝牙设备的特性和要求,包括支持的蓝牙版本、分组类型、扫描模式等。有助于正确设置命令参数,提高连接成功率。
  • 优化参数设置:根据实际应用场景和需求,优化Packet_Type、Page_Scan_Repetition_Mode等参数的设置。例如,在需要快速建立连接的情况下,可以选择较短的扫描间隔和较高的扫描频率。
  • 处理角色转换:在需要支持主从角色转换的应用场景中,合理设置Allow_Role_Switch参数,并根据实际需求处理角色转换请求。这将有助于保持连接的稳定性和灵活性。
  • 监控连接状态:在连接建立后,需要持续监控连接状态,包括连接质量、数据传输速率等。如果发现连接异常或数据传输错误,需要及时采取措施进行处理,以避免数据丢失或连接中断。
  • 遵循蓝牙规范:在使用HCI_Create_Connection命令时,需要严格遵循蓝牙核心规范和相关标准。有助于确保连接的兼容性和稳定性,提高蓝牙设备的互操作性。

综上所述,HCI_Create_Connection命令是蓝牙技术中建立ACL连接的重要命令。它涉及多个关键参数的设置和执行流程的监控,需要在使用时特别注意准确性和安全性。同时,该命令也广泛应用于各种蓝牙设备之间的通信连接场景。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、命令概述
  • 二、命令格式及参数
    • 2.1. HCI_Create_Connection 命令命令格式
    • 2.2. BD_ADDR
    • 2.3. Packet_Type
    • 2.4. Page_Scan_Repetition_Mode
    • 2.5. Reserved
    • 2.6. Clock_Offset
    • 2.7. Allow_Role_Switch
    • 三、返回事件及参数
    • 3.1. HCI_Command_Status 事件
    • 3.2. HCI_Connection_Complete 事件
  • 四、命令执行流程
    • 4.1. 命令发起
    • 4.2. 命令接收与初步反馈
    • 4.3. 连接建立过程
    • 4.4. 连接完成反馈
    • 4.5. 后续操作与管理
    • 4.6. 示例代码
  • 五、应用场景
    • 5.1. 智能手机与蓝牙耳机连接
    • 5.2. 智能手表与手机的数据同步
    • 5.3. 蓝牙音箱多设备连接
    • 5.4. 工业蓝牙传感器与数据采集器连接
    • 5.5. 蓝牙键盘与电脑连接
    • 5.6. 蓝牙健康监测设备与手机连接
    • 5.7. 蓝牙打印机与移动设备连接
  • 六、注意事项和使用建议
    • 6.1. 注意事项
    • 6.2. 使用建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档