简析开源鸿蒙蓝牙能力

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简析开源鸿蒙蓝牙能力相关的知识,希望对你有一定的参考价值。

作者:王石

蓝牙功能是无线短距的重要能力,在工作、生活中有很多蓝牙设备,比如车载蓝牙设备,蓝牙耳机,蓝牙键盘。1994年由电信商爱立信发展出这个技术,最初蓝牙的设计是系统创建出一个RS-232数据线的无线通信技术替代版,能够链接多个设备并克服同步问题。目前蓝牙技术由蓝牙技术联盟(SIG Special Interest Group)来负责维护其技术标准,IEEE曾经将蓝牙技术标准化为IEEE 802.15.1,但是这个标准已经不再继续使用。接下来我们就深入分析下开源鸿蒙的蓝牙结构和各层作用及工作内容。

概述

在开源鸿蒙的源码里和系统功能相关的部分大多都放在foundation这个文件夹里,而通讯相关的部分则是在communication这个文件夹内。我们本篇要分析的蓝牙功能就是在foundation/communication/bluetooth路径下,具体目录结构如下:

.
├── bundle.json
├── frameworks				//框架层
│   ├── inner
│   └── js
├── hisysevent.yaml
├── interfaces				//接口层
│   ├── inner_api
│   └── kits
├── LICENSE
├── README.md
├── README_zh.md
├── sa_profile				//系统能力配置
│   ├── 1130.xml
│   └── BUILD.gn
├── services				//服务层
│   ├── bluetooth
│   └── bluetooth_lite
└── test					测试代码
    ├── example
    ├── fuzztest
    ├── moduletest
    └── unittest

架构简析

  • 根据目录结构和内部文件及编译框架总结架构如下:

    • 接口层:对外提供js接口,采用d.ts定义,蓝牙文件夹内位置interfaces/kits/js具体存放路径在interface/sdk-js/api/@ohos.bluetooth.d.ts;对内提供c接口,可以供softbus,netmanager,audioframework三个子系统调用,蓝牙文件夹内位置interfaces/inner_api/include;
    • 框架层:分两个子层,NAPI框架实现层,蓝牙文件夹内位置foundation/communication/bluetooth/frameworks/js/napi,实现所有js层代码接口适配并调用innerapi的实现;蓝牙接口实现层,使用IPC架构同蓝牙服务层通信,将从NAPI收到的命令,或者别的子系统收到的命令经由IPC架构发送给服务层,并注册服务层observer,收听由服务层上报的事件;
    • 服务层:分三个子层,系统能力层,蓝牙文件夹内位置foundation/communication/bluetooth/services/bluetooth/server,实现蓝牙系统能力服务,接收从框架层经由IPC发送下来的命令,并收听蓝牙service传上来的消息并回传给蓝牙框架层;蓝牙服务层,蓝牙文件夹内位置foundation/communication/bluetooth/services/bluetooth/service,实现不同蓝牙能力的adapter(包括classic_adapter和ble_adapter),通过调用蓝牙协议栈实现蓝牙业务的逻辑能力;蓝牙协议栈,蓝牙文件夹内位置foundation/communication/bluetooth/services/bluetooth/stack,实现蓝牙协议包解析,打包以及蓝牙协议流程的处理,实现蓝牙host,蓝牙profile以及蓝牙链路和hci接口,最后通过使用蓝牙硬件驱动收发蓝牙原始数据;
    • 硬件驱动:预编译包,通过dlopen提供hci的底层接口,注册回调以及发送数据;

功能简析

  1. NAPI功能

    • HAP应用层通过@ohos.bluetooth.d.ts引用调用蓝牙接口,蓝牙接口包括bluetooth接口,BLE接口,profile接口。bluetooth接口包括经典蓝牙接口,BLE接口接口,和profile接口;目前支持的profile有A2dpSourceProfile,HandsFreeAudioGatewayProfile,HidHostProfile和PanProfile;
    • NAPI框架接口均通过DECLARE_NAPI_FUNCTION,js的回调也通过此接口经由传入回调函数指针实现;
    • NAPI层通过调用蓝牙框架层的BluetoothHost实现功能,通过将g_bluetoothHostObserver注册到框架层内部实现来获得消息回调;同时NAPI层提供g_Observer存储js层的回调函数,在收到框架层的回调后在g_Observer里查找对应的回调函数来实现应用通知;此对象因为是map结构体,所以一个应用只能注册一个并在应用内部自己处理;
  2. 蓝牙框架功能

    • 蓝牙框架提供cadapter接口和蓝牙框架具体实现(蓝牙NAPI层调用的BluetoothHost即在具体实现层);
    • cadapter实现c接口,通过BluetoothHost实现功能,其他外部模块均通过cadapter提供的c接口调用蓝牙能力;
    • 蓝牙框架内部实现层提供接口一一对应cadapter和NAPI接口。BluettoothHost内部通过SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager()接口得到samgr,然后通过BLUETOOTH_HOST_SYS_ABILITY_ID标识获取蓝牙服务对象,然后通过蓝牙服务对象通过IPC接口调用蓝牙服务功能;
    • 蓝牙框架内部提供RegisterObserver方式,允许其他层应用(比如软总线层通过调用cadapter接口GapRegisterCallbacks收听蓝牙的回调事件)收听蓝牙回调事件;
    • 蓝牙框架因为是动态库实现,所以如果有多处依赖则会生成多份实例,如NAPI和软总线都依赖蓝牙框架库,所以在系统里会有两份实例同时若产生蓝牙通知也会有两个进程同时收到消息;
  3. 蓝牙系统能力

    • 蓝牙系统能力通过继承SystemAbility,BluetoothHostStub两个类实现蓝牙服务能力并实现IPC进行通信;IPC通信部分的代码在蓝牙文件夹foundation/communication/bluetooth/services/bluetooth/ipc内,提供proxy和stub实现,即btipc_static.a静态库;
    • 蓝牙系统能力可视作蓝牙服务进程,提供包括蓝牙状态机,蓝牙adapter(classic,ble),蓝牙profile服务实例;
    • 蓝牙系统配置在foundation/communication/bluetooth/services/bluetooth/etc/init目录内,此部分内容会在制作镜像包时打包到系统文件内去;在蓝牙服务启动的时候会读取蓝牙配置(AdapterConfig::GetInstance()->Load(),ProfileConfig::GetInstance()->Load())并确定蓝牙的snooplog(协议栈输出文件)
    • 蓝牙系统能力内部使用Dispatcher模型执行任务事务,在Dispatcher对象内部它通过线程加任务队列的方式处理多条任务命令,目前实现方法为但线程依次处理队列内的事务
    • 蓝牙系统能力层通过permission_utils提供应用权限保护能力,服务调用功能时首先调用PermissionUtils::VerifyXXXBluetoothPermission(XXX包括,Use,Discover,Manage,Location),然后调用AuthCenter对应功能,最后调用PermissionHelper对应接口确认权限;在AuthCenter里内部定义了g_permissionAlwaysGrant全局变量,可以方便调试时拥有所有权限;
  4. 蓝牙协议栈

    • 蓝牙协议栈通过c接口对蓝牙服务层提供接口;
    • 蓝牙协议栈内部他提供任务队列方式处理蓝牙命令(GapRunTaskBlockProcess, GapRunTaskUnBlockProcess),分别对于蓝牙协议栈同步接口和异步接口;
    • 蓝牙协议栈内部也有层级,对上的是gap,中间是btm,对下的是hci,中间部分和其他蓝牙协议站定义的内容一致,如:att,avctp,avdtp,l2cap,rfcomm,sdp,smp
    • HCI层它通过g_hdiLib加载蓝牙驱动库libbluetooth_hdi_adapter.so,并通过加载蓝牙驱动接口(HdiInit,HdiSendHciPacket,HdiClose)实现蓝牙数据发送,蓝牙数据接收(g_hdiCallacks)

总结

  1. 蓝牙服务的结构也是所有开源鸿蒙的结构能力,大致流程均为:NAPI框架,系统服务框架,IPC框架,Observer框架,原生driver框架(其实可以采用HDF框架);
  2. 目前开源鸿蒙用的蓝牙协议站不是android,bluez,btstack这三种主流蓝牙协议栈,根据注释可得其参考《BLUETOOTH SPECIFICATION Version 5.0》实现;目前官方最新的协议栈是v5.3,参考链接如下:https://www.bluetooth.com/specifications/specs/core-specification-5-3/

更多原创内容请关注:深开鸿技术团队

入门到精通、技巧到案例,系统化分享OpenHarmony开发技术,欢迎投稿和订阅,让我们一起携手前行共建生态。

想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com/#bkwz​

#冲刺创作新星# #跟着小白一起学鸿蒙# [八] 蓝牙应用

蓝牙简介

蓝牙(Bluetooth)是一个短距离无线通信标准,用于在手机、计算机和其他电子设备之间通信。在 Linux 中权威的蓝牙协议栈实现是 BlueZ。其本身自带了很多有用的工具,如bluetoothctl,hcidump和monitor。本章我们主要介绍开源鸿蒙中的蓝牙应用和接口以及和Linux上工具软件bluetoothctl的对比。

经典蓝牙: 在2010年以前,我们谈论的蓝牙就是经典蓝牙(传统蓝牙)。蓝牙1.0/2.0/2.1/3.0都是经典蓝牙,经典蓝牙包括BR,EDR和HS (AMP) 三种模式。蓝牙数据是通过分组形势在空中传输的。

低功耗蓝牙: 2010年,SIG联盟合并了Wibree联盟(注:Wibree联盟由 Nokia 和 Nordic 等创立,旨在为手机周边设备寻找一种更低功耗的无线通信技术,并把Wibree联盟提出的低功耗无线技术重新命名为低功耗蓝牙技术(BLE),从此 BLE 也成了一种蓝牙技术。其实经典蓝牙称谓不准确,在蓝牙4.0规格中,SIG定义了四种蓝牙controller技术:BR,EDR,AMP和LE。由于 LE 是 2010年才提出的,比较新,因此为了说起来方便,人们把之前的 BR/EDR/AMP 技术称为经典蓝牙技术。

蓝牙5.0: 蓝牙5.0是继蓝牙4.2后最新的蓝牙技术标准,蓝牙5.0针对低功耗设备,有着更大的覆盖范围和更快的速度速率,有效距离最远可达300米,是上一代蓝牙4.2的四倍;最大传输速度为24Mbps,且新增了导航功能,对于低功耗的蓝牙设备间的配对优化明显。

开源鸿蒙的蓝牙介绍

在开源鸿蒙里开源鸿蒙有两个部分的相关实现:

蓝牙仓库: https://gitee.com/openharmony/communication_bluetooth

  1. 目录结构
.
├── frameworks				//框架层
│   ├── inner				//native功能实现
│   └── js					//js适配,NAPI实现
├── interfaces				//接口层
│   ├── inner_api			//native api实现
│   └── kits				//d.ts接口定义
├── services				//蓝牙服务
│   ├── bluetooth			//标准系统蓝牙服务
│   └── bluetooth_lite		//小型系统蓝牙服务
└── test
    ├── example				//蓝牙测试应用
    ├── fuzztest
    ├── moduletest
    └── unittest
  1. 功能介绍

    提供蓝牙BR、EDR和LE的主要功能支持。如: enableBluetooth,disableBluetooth, pairDevice, getLocalName, getPairedDevices, startBluetoothDiscovery, stopBluetoothDiscovery以及蓝牙事件监听,比如:bluetoothDeviceFind, boneStateChange, pinRequired, stateChange。

设置仓库: https://gitee.com/openharmony/applications_settings

  1. 目录结构
.
├── product
│   ├── phone
│   │   └── src
│   │       └── main
│   │           ├── ets
│   │           │   ├── Application
│   │           │   ├── controller
│   │           │   ├── MainAbility
│   │           │   ├── model
│   │           │   ├── pages
│   │           │   ├── res
│   │           │   └── resources
│   │           ├── module.json5
│   │           └── resources
│   │               ├── base
│   │               ├── en_US
│   │               ├── phone
│   │               ├── rawfile
│   │               └── zh_CN
├── README.md
├── README_zh.md
└── signature
    └── settings.p7b
  1. 功能介绍

    application_settings是一个hap应用,其中有一部分是蓝牙对应的配置,提供基本的功能如:蓝牙开关,蓝牙搜索,蓝牙配对(取消配对)等功能。

开源鸿蒙的蓝牙实验

蓝牙测试应用地址: https://gitee.com/openharmony/communication_bluetooth/tree/master/test/example/BluetoothTest

  1. 蓝牙简单的验证流程:扫描

    graph LR
    on[开启蓝牙] --> setBluetoothScanMode[设置蓝牙模式] --> onBluetoothDeviceFind[注册蓝牙发现回调] --> startBluetoothDiscovery[蓝牙发现]
    
    //引入d.ts声明,同时在napi层调起bluetooth模块实例
    import bluetooth from @ohos.bluetooth;
    ……
    //蓝牙使能
    bluetooth.enableBluetooth();
    //设置蓝牙模式:SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE,可连接,可被发现;0,一直,注意这个时间的单位是毫秒,如果需要设置一个功能启用时间务必注意,否则很短时间后设置的模式就会失效;
    bluetooth.setBluetoothScanMode(ScanMode.SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 0);
    //监听状态变化,如果状态变化则进行回调通知
    bluetooth.on(stateChange, (data) => 
        this.btStateMessage = STATE: ;
        switch (data) 
            case 0:
                this.btStateMessage += STATE_OFF;
                break;
            case 1:
                this.btStateMessage += STATE_TURNING_ON;
                break;
            case 2:
                this.btStateMessage += STATE_ON;
                break;
            case 3:
                this.btStateMessage += STATE_TURNING_OFF;
                break;
            case 4:
                this.btStateMessage += STATE_BLE_TURNING_ON;
                break;
            case 5:
                this.btStateMessage += STATE_BLE_ON;
                break;
            case 6:
                this.btStateMessage += STATE_BLE_TURNING_OFF;
                break;
            default:
                this.btStateMessage += 未知状态;
                break;
        
    )
    //接收bluetooth发现设备的返回
    bluetooth.on(bluetoothDeviceFind, (data: Array<string>) => 
        LogUtil.info(`$this.TAG subscribeBluetoothDeviceFind->deviceFind return:$JSON.stringify(data)`);
    )
    //开始bluetooth发现
    bluetooth.startBluetoothDiscovery();
    
  2. 蓝牙简单的验证流程:配对

    graph LR
    on[开启蓝牙] --> setBluetoothScanMode[设置蓝牙模式] --> onPairedRequest[注册蓝牙配对回调] --> startBluetoothDiscovery[蓝牙配对]
    
    import bluetooth from @ohos.bluetooth;
    ……
    //蓝牙使能
    bluetooth.enableBluetooth();
    //设置蓝牙模式:SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE,可连接,可被发现;0,一直;
    bluetooth.setBluetoothScanMode(ScanMode.SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 0);
    //接收bluetooth配对的返回
    bluetooth.on(pinRequired, (data: 
                                 deviceId: string;
                                 pinCode: string;
                                 ) => 
        LogUtil.info(`$this.TAG subscribePinRequired->pinRequired return:$JSON.stringify(data)`);
        //确认配对
        bluetooth.setDevicePairingConfirmation(deviceId,  pindCode)
    )
    //开始bluetooth配对
    bluetooth.pairDevice(deviceMacAddress);
    //获取bluetooth配对设备
    let pairedDeviceList = bluetooth.getPairedDevices
    

Linux上的蓝牙对比实验

蓝牙的测试是需要有对应的测试对象的,简单的配对等功能我们可以用现在的智能手机进行,但是如果稍微复杂的功能我们可能就需要一种特殊的方法,后面我们就简单谈谈利用ubuntu上安装bluez工具进行测试的方法。

环境配置与安装

修改镜像资源配置为阿里源

sudo gedit /etc/apt/sources.list

//默认的链接为:https://developer.aliyun.com/mirror/ubuntu
//修改 etc/apt/sources.list 为
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

APT安装bluez

sudo apt install bluez

了解bluez命令

控制台

  1. 检查蓝牙状态

在添加蓝牙设备之前,计算机上的蓝牙服务必须已启动并正在运行。可以在systemctl命令的帮助下进行检查。

 sudo systemctl status bluetooth

如果蓝牙服务状态未激活,则必须先启用它。然后启动服务,以便在启动计算机时自动启动。

 sudo systemctl enable bluetooth
 sudo systemctl start bluetooth
  1. 使用蓝牙设备之前先检查有没有被 rfkill 禁用。

语法格式: rfkill [参数] 设备名

常用参数:

list 列出可用设备
block 关闭设备
unblock 打开设备
  1. 使用bluetoothctl连接到蓝牙设备

    1. bluetooth
    1. 启动bluetoothctl交互式命令:

    $ bluetoothctl

    查看controller

    $ [bluetoothctl]#  list
    

查看controller的属性

$ [bluetoothctl]# show

  1. 打开蓝牙适配器:

    [bluetooth]# default-agent //设置默认代理

    Default agent request successful

    [bluetooth]# power on //打开

    Changing power on succeeded

  2. help

  • 输入help命令以获取可用命令的列表

    [bluetooth]# help
    Menu main:
    Available commands:
    //命令                                             //命令功能的解释    
    -------------------
    advertise                                         Advertise Options Submenu
    scan                                              Scan Options Submenu
    gatt                                              Generic Attribute Submenu
    list                                              List available controllers
    show [ctrl]                                       Controller information
    select <ctrl>                                     Select default controller
    devices                                           List available devices
    paired-devices                                    List paired devices
    system-alias <name>                               Set controller alias
    reset-alias                                       Reset controller alias
    power <on/off>                                    Set controller power
    pairable <on/off>                                 Set controller pairable mode
    discoverable <on/off>                             Set controller discoverable mode
    discoverable-timeout [value]                      Set discoverable timeout
    agent <on/off/capability>                         Enable/disable agent with given capability
    default-agent                                     Set agent as the default one
    advertise <on/off/type>                           Enable/disable advertising with given type
    set-alias <alias>                                 Set device alias
    scan <on/off>                                     Scan for devices
    info [dev]                                        Device information
    pair [dev]                                        Pair with device
    trust [dev]                                       Trust device
    untrust [dev]                                     Untrust device
    block [dev]                                       Block device
    unblock [dev]                                     Unblock device
    remove <dev>                                      Remove device
    connect <dev>                                     Connect device
    disconnect [dev]                                  Disconnect device
    menu <name>                                       Select submenu
    version                                           Display version
    quit                                              Quit program
    exit                                              Quit program
    help                                              Display help about this program
    export                                            Print environment variables
    
    

主菜单下的功能

  1. 子菜单

menu + "子菜单名":进入子菜单,目前有advertise、scan、gatt三个子菜单,分别用于设置BLE广播信息、扫描过滤、GATT设置。如 menu advertise/scan/gatt,功能在下面的子菜单功能测试中

  1. 进行扫描以检测你的蓝牙设备:要主动搜索可以连接的蓝牙设备
# scan on

当运行上面的命令时,PC将查找并列出系统可以访问的所有蓝牙设备。

所有蓝牙设备都标记为设备,后跟它们各自的媒体访问控制(MAC)地址,这是网络上设备的唯一标识符。 MAC地址的格式为XX:XX:XX:XX:XX:XX 。 Bluetoothctl还在上面的输出中显示设备的名称。

要使蓝牙适配器可被其他设备发现,请使用以下命令:

 [bluetoothctl]# discoverable on

4、与发现的蓝牙设备配对:

 [bluetoothctl]# pair DC:A6:32:74:A5:AF

除了与蓝牙设备配对外,还可以选择信任设备,以便之后的配对可以自动完成无需验证。

 [bluetoothctl]# trust DC:A6:32:74:A5:AF

可以通过发出以下命令来取消对设备的信任:

 [bluetoothctl]# untrust DC:A6:32:74:A5:AF

可以使用以下命令列出计算机蓝牙范围内的设备:

 [bluetoothctl]# devices

可以通过运行以下命令查看当前与系统配对的设备:

 [bluetoothctl]# paired-devices

可以通过运行以下命令查看当前版本:

[bluetooth]# version
Version 5.53

可以通过运行以下命令更改别名:

[bluetooth]# system-alias 别名

可以通过运行以下命令重置别名

[bluetooth]# reset-alias

查看环境变量

[bluetooth]# export

交互实例

advertise菜单下的功能

[bluetooth]# menu advertise
Menu advertise:
Available commands:
//命令                                             //命令功能的解释    
-------------------
uuids [uuid1 uuid2 ...]                           Set/Get advertise uuids
service [uuid] [data=xx xx ...]                   Set/Get advertise service data
manufacturer [id] [data=xx xx ...]                Set/Get advertise manufacturer data
data [type] [data=xx xx ...]                      Set/Get advertise data
discoverable [on/off]                             Set/Get advertise discoverable
discoverable-timeout [seconds]                    Set/Get advertise discoverable timeout
tx-power [on/off]                                 Show/Enable/Disable TX power to be advertised
name [on/off/name]                                Configure local name to be advertised
appearance [on/off/value]                         Configure custom appearance to be advertised
duration [seconds]                                Set/Get advertise duration
timeout [seconds]                                 Set/Get advertise timeout
secondary [1M/2M/Coded]                           Set/Get advertise secondary channel
clear [uuids/service/manufacturer/config-name...] Clear advertise config
back                                              Return to main menu
version                                           Display version
quit                                              Quit program
exit                                              Quit program
help                                              Display help about this program
export                                            Print environment variables

scan菜单下的功能

[bluetooth]# menu scan
Menu scan:
Available commands:
//命令                                             //命令功能的解释    
-------------------
uuids [all/uuid1 uuid2 ...]                       Set/Get UUIDs filter
rssi [rssi]                                       Set/Get RSSI filter, and clears pathloss
pathloss [pathloss]                               Set/Get Pathloss filter, and clears RSSI
transport [transport]                             Set/Get transport filter
duplicate-data [on/off]                           Set/Get duplicate data filter
discoverable [on/off]                             Set/Get discoverable filter
clear [uuids/rssi/pathloss/transport/duplicate-data/discoverable] Clears discovery filter.
back                                              Return to main menu
version                                           Display version
quit                                              Quit program
exit                                              Quit program
help                                              Display help about this program
export                                            Print environment variables

gatt菜单下的功能

[bluetooth]# menu gatt
Menu gatt:
Available commands:
//命令                                             //命令功能的解释    
-------------------
list-attributes [dev/local]                       List attributes
select-attribute <attribute/UUID>                 Select attribute
attribute-info [attribute/UUID]                   Select attribute
read [offset]                                     Read attribute value
write <data=xx xx ...> [offset] [type]            Write attribute value
acquire-write                                     Acquire Write file descriptor
release-write                                     Release Write file descriptor
acquire-notify                                    Acquire Notify file descriptor
release-notify                                    Release Notify file descriptor
notify <on/off>                                   Notify attribute value
clone [dev/attribute/UUID]                        Clone a device or attribute
register-application [UUID ...]                   Register profile to connect
unregister-application                            Unregister profile
register-service <UUID> [handle]                  Register application service.
unregister-service <UUID/object>                  Unregister application service
register-includes <UUID> [handle]                 Register as Included service in.
unregister-includes <Service-UUID><Inc-UUID>      Unregister Included service.
register-characteristic <UUID> <Flags=read,write,notify...> [handle] Register application characteristic
unregister-characteristic <UUID/object>           Unregister application characteristic
register-descriptor <UUID> <Flags=read,write...> [handle] Register application descriptor
unregister-descriptor <UUID/object>               Unregister application descriptor
back                                              Return to main menu
version                                           Display version
quit                                              Quit program
exit                                              Quit program
help                                              Display help about this program
export                                            Print environment variables

取消蓝牙设备的配对,使用remove命令,如下所示:

 bluetoothctl remove FC:69:47:7C:9D:A3

可以使用bluetoothctl将设备与系统断开连接:

 bluetoothctl disconnect FC:69:47:7C:9D:A3

如果希望阻止特定设备连接到系统,则可以使用block命令,后跟该设备的MAC地址。

 bluetoothctl block FC:69:47:7C:9D:A3

要取消阻止设备,只需将上述命令中的单词block替换为unblock即可

bluez功能对应着鸿蒙程序中的功能

功能说明 bluez功能 开源鸿蒙接口
蓝牙开关 power on/off enableBluetooth/disableBluetooth
配对 pair [dev] pairDevice
设置可被发现的 pairable/discoverable <on/off> setBluetoothScanMode
设置蓝牙名称 system-alias <name> setLocalName
注意:bluez开机后自动启动

将如下代码添加至main.conf,蓝牙可以自动启动:

/etc/bluetooth/main.conf
[Policy]
AutoEnable=true
注意:bluez启动后自动可被发现

如果设备总是可见或者可以直接连接:

/etc/bluetooth/main.conf
[General]
DiscoverableTimeout = 0

总结

  1. HAP应用调用系统模块就是import bluetooth from @ohos.bluetooth,其他内容可以从interface/sdk-js/api/@ohos.xxx.d.ts里查找;在DevEco工具里openharmony的sdk默认路径AppData\\Local\\OpenHarmony\\Sdk\\ets\\3.1.7.7\\api文件夹下也可以找.d.ts;
  2. 开源鸿蒙的蓝牙功能和linux上的bluez大多数功能相同,可以进行对比验证比较两边的差距;

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com/#bkwz

以上是关于简析开源鸿蒙蓝牙能力的主要内容,如果未能解决你的问题,请参考以下文章

#盲盒+码# #跟着小白一起学鸿蒙#简析OpenHarmony的WiFi能力

#冲刺创作新星# #跟着小白一起学鸿蒙# [八] 蓝牙应用

鸿蒙开源全场景应用开发——视频编解码

Mac搭建OpenHarmonyOS(开源鸿蒙系统)编译环境

华为宣布方舟编译器8月31日开源,鸿蒙还会远吗?

鸿蒙OS 技术特性