跳转到内容

蓝牙

传统蓝牙本机管理:打开和关闭蓝牙、设置和获取本机蓝牙名称、扫描和取消扫描周边蓝牙设备、获取本机蓝牙 profile 对其他设备的连接状态、获取本机蓝牙已配对的蓝牙设备列表。

传统蓝牙远端设备操作:查询远端蓝牙设备名称和 MAC 地址、设备类型和配对状态,以及向远端蓝牙设备发起配对。

BLE 设备交互时会分为不同的角色:

中心设备和外围设备:中心设备负责扫描外围设备、发现广播。外围设备负责发送广播。

GATT(Generic Attribute Profile,通用属性配置文件)服务端与 GATT 客户端:两台设备建立连接后,其中一台作为 GATT 服务端,另一台作为 GATT 客户端。

BLE 扫描和广播:根据指定状态获取外围设备、启动或停止 BLE 扫描、广播。

BLE 中心设备与外围设备进行数据交互:BLE 外围设备和中心设备建立 GATT 连接后,中心设备可以查询外围设备支持的各种数据,向外围设备发起数据请求,并向其写入特征值数据。

BLE 外围设备数据管理:BLE 外围设备作为服务端,可以接收来自中心设备(客户端)的 GATT 连接请求,应答来自中心设备的特征值内容读取和写入请求,并向中心设备提供数据。同时外围设备还可以主动向中心设备发送数据。

通过 BLE 扫描和广播提供的开放能力,可以根据指定状态获取外围设备、启动或停止 BLE 扫描、广播。

接口声明

{ "name": "blueos.bluetooth.ble" }

接口导入

import bluetooth from '@blueos.bluetooth.ble'

权限要求

{
"permissions": [{ "name": "blueos.permission.BLUETOOTH" }]
}

低功率蓝牙 BLE 管理类 bluetooth.BLE 的主要接口,本文档仅实现 createGattServer。

接口名功能描述
createGattClientDevice创建一个可使用的 GattClientDevice 实例。
createGattServer创建一个可使用的 GattServer 实例。
getConnectedBLEDevices获取和当前设备连接的 BLE 设备。
getLeMaximumAdvertisingDataLength广播的最大数据长度。
startBLEScan发起 BLE 扫描流程。
stopBLEScan停止 BLE 扫描流程。
subscribeBLEDeviceFind订阅 BLE 设备发现上报事件。
unsubscribeBLEDeviceFind取消订阅 BLE 设备发现上报事件。

创建一个可使用的 GattServer 实例。

类型说明
GattServerserver 端类,使用 server 端方法之前需要创建该类的实例进行操作。

server 端类,使用 server 端方法之前需要创建该类的实例进行操作,通过 createGattServer()方法构造此实例。

const gattServer = bluetooth.BLE.createGattServer()

BLE 外围设备管理类 GattServer(外围设备)server 端类,使用 server 端方法之前需要创建该类的实例进行操作,通过 createGattServer()方法构造此实例。(let gattServer = bluetooth.BLE.createGattServer()) 的主要接口:

接口名功能描述
startAdvertising开始发送 BLE 广播。
stopAdvertising停止发送 BLE 广播。
addServiceserver 端添加服务。
removeService删除已添加的服务。
close关闭服务端功能,去注册 server 在协议栈的注册,调用该接口后GattServer实例将不能再使用。
notifyCharacteristicChangedserver 端特征值发生变化时,主动通知已连接的 client 设备。
sendResponseserver 端回复 client 端的读写请求。
subscribeCharacteristicReadserver 端订阅特征值读请求事件。
unsubscribeCharacteristicReadserver 端取消订阅特征值读请求事件。
subscribeCharacteristicWriteserver 端订阅特征值写请求事件。
unsubscribeCharacteristicWriteserver 端取消订阅特征值读请求事件。
subscribeDescriptorReadserver 端订阅描述符读请求事件。
unsubscribeDescriptorReadserver 端取消订阅描述符读请求事件。
subscribeDescriptorWriteserver 端订阅描述符写请求事件。
unsubscribeDescriptorWriteserver 端取消订阅描述符写请求事件。
subscribeConnectStateChangeserver 端订阅 BLE 连接状态变化事件。
unsubscribeConnectStateChangeserver 端取消订阅 BLE 连接状态变化事件。

BLE 外围设备管理类 GattServer(外围设备)server 端类接口详细描述:

gattServer.startAdvertising(setting: AdvertiseSetting, advData: AdvertiseData, advResponse?: AdvertiseData)

Section titled “gattServer.startAdvertising(setting: AdvertiseSetting, advData: AdvertiseData, advResponse?: AdvertiseData)”

开始发送 BLE 广播。

参数名类型必填描述
settingAdvertiseSettingBLE 广播的相关参数。
advDataAdvertiseDataBLE 广播包内容。
advResponseAdvertiseDataBLE 回复扫描请求回复响应。

描述蓝牙低功耗设备发送广播的参数。

参数名类型是否必填默认值描述
intervalnumber1600表示广播间隔,最小值设置 32 个 slot 表示 20ms,最大值设置 16384 个 slot,默认值设置为 1600 个 slot 表示 1s。
txPowernumber-7表示发送功率,最小值设置-127,最大值设置 1,默认值设置-7,单位 dbm。
connectablebooleantrue表示是否是可连接广播,默认值设置为 true。

描述 BLE 广播数据包的内容。

参数名类型是否必填描述
serviceUuidsArray表示要广播的服务 UUID 列表。
manufactureDataArray<ManufactureData>表示要广播的广播的制造商信息列表。
serviceDataArray<ServiceData>表示要广播的服务数据列表。

serviceUuids 和 serviceData 至少填写一个。

描述 BLE 广播数据包的内容。

参数名类型是否必填描述
manufactureIdstringnumber
manufactureValueArrayBuffer表示制造商发送的制造商数据。

描述广播包中服务数据内容。

参数名类型是否必填描述
serviceUuidstring表示服务的 UUID。
serviceValueArrayBuffer表示服务数据。
let manufactureValueBuffer = new Uint8Array(4)
manufactureValueBuffer[0] = 1
manufactureValueBuffer[1] = 2
manufactureValueBuffer[2] = 3
manufactureValueBuffer[3] = 4
let serviceValueBuffer = new Uint8Array(4)
serviceValueBuffer[0] = 4
serviceValueBuffer[1] = 6
serviceValueBuffer[2] = 7
serviceValueBuffer[3] = 8
console.info('manufactureValueBuffer = ' + JSON.stringify(manufactureValueBuffer))
console.info('serviceValueBuffer = ' + JSON.stringify(serviceValueBuffer))
let gattServer = bluetooth.BLE.createGattServer()
gattServer.startAdvertising(
{
interval: 150,
txPower: 60,
connectable: true,
},
{
serviceUuids: ['00001888-0000-1000-8000-00805f9b34fb'],
manufactureData: [
{
manufactureId: 4567,
manufactureValue: manufactureValueBuffer.buffer,
},
],
serviceData: [
{
serviceUuid: '00001888-0000-1000-8000-00805f9b34fb',
serviceValue: serviceValueBuffer.buffer,
},
],
},
{
serviceUuids: ['00001889-0000-1000-8000-00805f9b34fb'],
manufactureData: [
{
manufactureId: 1789,
manufactureValue: manufactureValueBuffer.buffer,
},
],
serviceData: [
{
serviceUuid: '00001889-0000-1000-8000-00805f9b34fb',
serviceValue: serviceValueBuffer.buffer,
},
],
}
)

停止发送 BLE 广播。

const gattServer = bluetooth.BLE.createGattServer()
gattServer.stopAdvertising()

gattServer.addService(service: GattService)

Section titled “gattServer.addService(service: GattService)”

server 端添加服务。

参数名类型必填描述
serviceGattService服务端的 service 数据。BLE 广播的相关参数
类型说明
boolean添加服务操作,成功返回 true,否则返回 false。

描述 service 的接口参数定义。

参数名类型可读可写描述
serviceUuidstring特定服务(service)的 UUID,例如:00001888-0000-1000-8000-00805f9b34fb。
isPrimaryboolean如果是主服务设置为 true,否则设置为 false。
characteristicsArray<BLECharacteristic>当前服务包含的特征列表。
includeServicesArray<GattService>当前服务依赖的其它服务。

描述 characteristic 的接口参数定义 。

参数名类型可读可写描述
serviceUuidstring特定服务(service)的 UUID,例如:00001888-0000-1000-8000-00805f9b34fb。
characteristicUuidstring特定特征(characteristic)的 UUID,例如:00002a11-0000-1000-8000-00805f9b34fb。
characteristicValueArrayBuffer特征对应的二进制值。
descriptorsArray<BLEDescriptor>特定特征的描述符列表。
propertiesArray<CharacteristicProperties>特定特征的属性。

描述 descriptor 的接口参数定义 。

参数名类型可读可写描述
serviceUuidstring特定服务(service)的 UUID,例如:00001888-0000-1000-8000-00805f9b34fb。
characteristicUuidstring特定特征(characteristic)的 UUID,例如:00002a11-0000-1000-8000-00805f9b34fb。
descriptorUuidstring描述符(descriptor)的 UUID,例如:00002902-0000-1000-8000-00805f9b34fb。
descriptorValueArrayBuffer描述符对应的二进制值。
名称取值描述
PROPERTY_BROADCAST0表示 characteristic 是可广播的。
PROPERTY_EXTENDED_PROPS1表示 characteristic 有扩展的属性 descriptor。
PROPERTY_INDICATE2表示 characteristic 支持 indicate 操作。
PROPERTY_NOTIFY3表示 characteristic 支持 notification 操作。
PROPERTY_READ4表示 characteristic 是可读的。
PROPERTY_WRITE5表示 characteristic 是可写的。
PROPERTY_SIGNED_WRITE6表示 characteristic 支持带签名写入
PROPERTY_WRITE_NO_RESPONSE7表示 characteristic 支持没有回复的写入
// 创建descriptors
let descriptors = []
let arrayBuffer = new ArrayBuffer(8)
let descV = new Uint8Array(arrayBuffer)
descV[0] = 11
let descriptor = {
serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB',
descriptorValue: arrayBuffer,
}
descriptors[0] = descriptor
// 创建characteristics
let characteristics = []
let arrayBufferC = new ArrayBuffer(8)
let cccV = new Uint8Array(arrayBufferC)
cccV[0] = 1
let characteristic = {
serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
characteristicValue: arrayBufferC,
descriptors: descriptors,
properties: [1, 4, 6],
}
characteristics[0] = characteristic
// 创建gattService
let gattService = {
serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
isPrimary: true,
characteristics: characteristics,
includeServices: [],
}
let gattServer = bluetooth.BLE.createGattServer()
let ret = gattServer.addService(gattService)
if (ret) {
console.log('add service successfully')
} else {
console.log('add service failed')
}

gattServer.removeService(serviceUuid: string)

Section titled “gattServer.removeService(serviceUuid: string)”

删除已添加的服务。

参数名类型必填描述
serviceUuidstringservice 的 UUID,例如“00001810-0000-1000-8000-00805F9B34FB”。
类型说明
boolean删除服务操作,成功返回 true,否则返回 false。
const gattServer = bluetooth.BLE.createGattServer()
gattServer.removeService('00001810-0000-1000-8000-00805F9B34FB')

关闭服务端功能,去注册 server 在协议栈的注册,调用该接口后GattServer实例将不能再使用。

let gattServer = bluetooth.BLE.createGattServer()
gattServer.close()

gattServer.notifyCharacteristicChanged(deviceId: string, notifyCharacteristic: NotifyCharacteristic)

Section titled “gattServer.notifyCharacteristicChanged(deviceId: string, notifyCharacteristic: NotifyCharacteristic)”

server 端特征值发生变化时,主动通知已连接的 client 设备。

参数名类型必填描述
deviceIdstringservice 的 UUID,例如“00001810-0000-1000-8000-00805F9B34FB”。
notifyCharacteristicNotifyCharacteristic通知的特征值数据。
类型说明
boolean通知操作,成功返回 true,否则返回 false。
// 创建descriptors
let descriptors = []
let arrayBuffer = new ArrayBuffer(8)
let descV = new Uint8Array(arrayBuffer)
descV[0] = 11
let descriptor = {
serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB',
descriptorValue: arrayBuffer,
}
descriptors[0] = descriptor
let arrayBufferC = new ArrayBuffer(8)
let characteristic = {
serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
characteristicValue: arrayBufferC,
descriptors: descriptors,
}
let notifyCharacteristic = {
serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001821-0000-1000-8000-00805F9B34FB',
characteristicValue: characteristic.characteristicValue,
confirm: false,
}
let gattServer = bluetooth.BLE.createGattServer()
gattServer.notifyCharacteristicChanged('XX:XX:XX:XX:XX:XX', notifyCharacteristic)

描述 server 端特征值发生变化时,server端发送特征值通知的参数结构。

名称类型必填说明
serviceUuidstring特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。
characteristicUuidstring内容发生变化的特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
characteristicValueArrayBuffer特征值对应的数据内容。
confirmbooleantrue表示发送的是指示,需要client端回复确认。false表示发送的是通知,不需要client端回复确认。

gattServer.sendResponse(serverResponse: ServerResponse)

Section titled “gattServer.sendResponse(serverResponse: ServerResponse)”

server 端回复 client 端的读写请求。

参数名类型必填描述
serverResponseServerResponseservice 的 UUID,例如“00001810-0000-1000-8000-00805F9B34FB”。
类型说明
boolean回复响应操作,成功返回 true,否则返回 false。

描述 server 端回复 client 端读/写请求的响应参数结构。

参数名类型可读可写描述
deviceIdstring表示远端设备地址,例如:“XX:XX:XX:XX:XX:XX”。
transIdnumber表示请求的传输 ID,与订阅的读/写请求事件携带的 ID 保持一致。
statusnumber表示响应的状态,设置为 0 即可,表示正常。
offsetnumber表示请求的读/写起始位置,与订阅的读/写请求事件携带的 offset 保持一致。
valueArrayBuffer表示回复响应的二进制数据。
/* send response */
let arrayBufferCCC = new ArrayBuffer(8)
let cccValue = new Uint8Array(arrayBufferCCC)
cccValue[0] = 1123
let serverResponse = {
deviceId: 'XX:XX:XX:XX:XX:XX',
transId: 0,
status: 0,
offset: 0,
value: arrayBufferCCC,
}
let gattServer = bluetooth.BLE.createGattServer()
let ret = gattServer.sendResponse(serverResponse)
if (ret) {
console.log('bluetooth sendResponse successfully')
} else {
console.log('bluetooth sendResponse failed')
}

gattServer.subscribeCharacteristicRead(OBJECT)

Section titled “gattServer.subscribeCharacteristicRead(OBJECT)”

server 端订阅特征值读请求事件。

参数名类型必填说明
callbackFunction回调此函数
failFunction失败回调。
类型说明
CharacteristicReadReq描述 server 端订阅后收到的特征值读请求事件参数结构。

描述 server 端订阅后收到的特征值读请求事件参数结构。

参数名类型可读可写描述
deviceIdstring表示发送特征值读请求的远端设备地址,例如:“XX:XX:XX:XX:XX:XX”。
transIdnumber表示读请求的传输 ID,server 端回复响应时需填写相同的传输 ID。
offsetnumber表示读特征值数据的起始位置。例如:k 表示从第 k 个字节开始读,server 端回复响应时需填写相同的 offset。
characteristicUuidstring特定特征(characteristic)的 UUID,例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuidstring特定服务(service)的 UUID,例如:00001888-0000-1000-8000-00805f9b34fb。
let gattServer = bluetooth.BLE.createGattServer()
let arrayBufferCCC = new ArrayBuffer(8)
let cccValue = new Uint8Array(arrayBufferCCC)
cccValue[0] = 1123
function ReadCharacteristicReq(CharacteristicReadReq) {
let deviceId = CharacteristicReadReq.deviceId
let transId = CharacteristicReadReq.transId
let offset = CharacteristicReadReq.offset
let characteristicUuid = CharacteristicReadReq.characteristicUuid
let serverResponse = {
deviceId: deviceId,
transId: transId,
status: 0,
offset: offset,
value: arrayBufferCCC,
}
let ret = gattServer.sendResponse(serverResponse)
if (ret) {
console.log('bluetooth sendResponse successfully')
} else {
console.log('bluetooth sendResponse failed')
}
}
gattServer.subscribeCharacteristicRead({
callback: function (data) {
ReadCharacteristicReq(data)
},
fail: function (data, code) {
console.log(`handling fail, code = ${code}`)
},
})

gattServer.unsubscribeCharacteristicRead()

Section titled “gattServer.unsubscribeCharacteristicRead()”

server 端取消订阅特征值读请求事件。

const gattServer = bluetooth.BLE.createGattServer()
gattServer.unsubscribeCharacteristicRead()

gattServer.subscribeCharacteristicWrite(OBJECT)

Section titled “gattServer.subscribeCharacteristicWrite(OBJECT)”

server 端订阅特征值写请求事件。

参数名类型必填说明
callbackFunction回调此函数
failFunction失败回调。
类型说明
DescriptorWriteReq描述 server 端订阅后收到的描述符写请求事件参数结构。

描述 server 端订阅后收到的描述符写请求事件参数结构。

参数名类型可读可写描述
deviceIdstring表示发送描述符写请求的远端设备地址,例如:“XX:XX:XX:XX:XX:XX”。
transIdnumber表示写请求的传输 ID,server 端回复响应时需填写相同的传输 ID。
offsetnumber表示写描述符数据的起始位置。例如:k 表示从第 k 个字节开始写,server 端回复响应时需填写相同的 offset。
isPrepboolean表示写请求是否立即执行。
needRspboolean表示是否要给 client 端回复响应。
valueArrayBuffer表示写入的描述符二进制数据。
descriptorUuidstring表示描述符(descriptor)的 UUID,例如:00002902-0000-1000-8000-00805f9b34fb。
characteristicUuidstring特定特征(characteristic)的 UUID,例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuidstring特定服务(service)的 UUID,例如:00001888-0000-1000-8000-00805f9b34fb。
let gattServer = bluetooth.BLE.createGattServer()
let arrayBufferCCC = new ArrayBuffer(8)
let cccValue = new Uint8Array(arrayBufferCCC)
function WriteCharacteristicReq(CharacteristicWriteReq) {
let deviceId = CharacteristicWriteReq.deviceId
let transId = CharacteristicWriteReq.transId
let offset = CharacteristicWriteReq.offset
let isPrep = CharacteristicWriteReq.isPrep
let needRsp = CharacteristicWriteReq.needRsp
let value = new Uint8Array(CharacteristicWriteReq.value)
let characteristicUuid = CharacteristicWriteReq.characteristicUuid
cccValue[0] = value[0]
let serverResponse = {
deviceId: deviceId,
transId: transId,
status: 0,
offset: offset,
value: arrayBufferCCC,
}
let ret = gattServer.sendResponse(serverResponse)
if (ret) {
console.log('bluetooth sendResponse successfully')
} else {
console.log('bluetooth sendResponse failed')
}
}
gattServer.subscribeCharacteristicWrite({
callback: function (data) {
WriteCharacteristicReq(data)
},
fail: function (data, code) {
console.log(`handling fail, code = ${code}`)
},
})

gattServer.unsubscribeCharacteristicWrite()

Section titled “gattServer.unsubscribeCharacteristicWrite()”

server 端取消订阅特征值读请求事件。

const gattServer = bluetooth.BLE.createGattServer()
gattServer.unsubscribeCharacteristicWrite()

gattServer.subscribeDescriptorRead(OBJECT)

Section titled “gattServer.subscribeDescriptorRead(OBJECT)”

server 端订阅描述符读请求事件。

参数名类型必填说明
callbackFunction回调此函数
failFunction失败回调。
类型说明
DescriptorReadReq描述 server 端订阅后收到的描述符读请求事件参数结构。

描述 server 端订阅后收到的描述符读请求事件参数结构。

参数名类型可读可写描述
deviceIdstring表示发送描述符读请求的远端设备地址,例如:“XX:XX:XX:XX:XX:XX”。
transIdnumber表示读请求的传输 ID,server 端回复响应时需填写相同的传输 ID。
offsetnumber表示读描述符数据的起始位置。例如:k 表示从第 k 个字节开始读,server 端回复响应时需填写相同的 offset。
descriptorUuidstring表示描述符(descriptor)的 UUID,例如:00002902-0000-1000-8000-00805f9b34fb。
characteristicUuidstring表示是否要给 client 端回复响应。
valueArrayBuffer表示写入的描述符二进制数据。
descriptorUuidstring表示描述符(descriptor)的 UUID,例如:00002902-0000-1000-8000-00805f9b34fb。
characteristicUuidstring特定特征(characteristic)的 UUID,例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuidstring特定服务(service)的 UUID,例如:00001888-0000-1000-8000-00805f9b34fb。
let gattServer = bluetooth.BLE.createGattServer()
let arrayBufferDesc = new ArrayBuffer(8)
let descValue = new Uint8Array(arrayBufferDesc)
descValue[0] = 1101
function ReadDescriptorReq(DescriptorReadReq) {
let deviceId = DescriptorReadReq.deviceId
let transId = DescriptorReadReq.transId
let offset = DescriptorReadReq.offset
let descriptorUuid = DescriptorReadReq.descriptorUuid
let serverResponse = {
deviceId: deviceId,
transId: transId,
status: 0,
offset: offset,
value: arrayBufferDesc,
}
let ret = gattServer.sendResponse(serverResponse)
if (ret) {
console.log('bluetooth sendResponse successfully')
} else {
console.log('bluetooth sendResponse failed')
}
}
gattServer.subscribeDescriptorRead({
callback: function (data) {
ReadDescriptorReq(data)
},
fail: function (data, code) {
console.log(`handling fail, code = ${code}`)
},
})

server 端取消订阅描述符读请求事件。

const gattServer = bluetooth.BLE.createGattServer()
gattServer.unsubscribeDescriptorRead()

gattServer.subscribeDescriptorWrite(OBJECT)

Section titled “gattServer.subscribeDescriptorWrite(OBJECT)”

server 端订阅描述符写请求事件。

参数名类型必填说明
callbackFunction回调此函数
failFunction失败回调。
类型说明
DescriptorWriteReq描述 server 端订阅后收到的描述符写请求事件参数结构。

描述 server 端订阅后收到的描述符写请求事件参数结构。

参数名类型可读可写描述
deviceIdstring表示发送描述符写请求的远端设备地址,例如:“XX:XX:XX:XX:XX:XX”。
transIdnumber表示写请求的传输 ID,server 端回复响应时需填写相同的传输 ID。
offsetnumber表示写描述符数据的起始位置。例如:k 表示从第 k 个字节开始写,server 端回复响应时需填写相同的 offset。
isPrepboolean表示写请求是否立即执行。
needRspboolean表示是否要给 client 端回复响应。
valueArrayBuffer表示写入的描述符二进制数据。
descriptorUuidstring表示描述符(descriptor)的 UUID,例如:00002902-0000-1000-8000-00805f9b34fb。
characteristicUuidstring特定特征(characteristic)的 UUID,例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuidstring特定服务(service)的 UUID,例如:00001888-0000-1000-8000-00805f9b34fb。
let gattServer = bluetooth.BLE.createGattServer()
let arrayBufferCCC = new ArrayBuffer(8)
let cccValue = new Uint8Array(arrayBufferCCC)
function WriteCharacteristicReq(CharacteristicWriteReq) {
let deviceId = CharacteristicWriteReq.deviceId
let transId = CharacteristicWriteReq.transId
let offset = CharacteristicWriteReq.offset
let isPrep = CharacteristicWriteReq.isPrep
let needRsp = CharacteristicWriteReq.needRsp
let value = new Uint8Array(CharacteristicWriteReq.value)
let characteristicUuid = CharacteristicWriteReq.characteristicUuid
cccValue[0] = value[0]
let serverResponse = {
deviceId: deviceId,
transId: transId,
status: 0,
offset: offset,
value: arrayBufferCCC,
}
let ret = gattServer.sendResponse(serverResponse)
if (ret) {
console.log('bluetooth sendResponse successfully')
} else {
console.log('bluetooth sendResponse failed')
}
}
gattServer.subscribeDescriptorWrite({
callback: function (data) {
WriteCharacteristicReq(data)
},
fail: function (data, code) {
console.log(`handling fail, code = ${code}`)
},
})

server 端取消订阅描述符写请求事件。

const gattServer = bluetooth.BLE.createGattServer()
gattServer.unsubscribeDescriptorWrite()

gattServer.subscribeConnectStateChange(OBJECT)

Section titled “gattServer.subscribeConnectStateChange(OBJECT)”

server 端订阅 BLE 连接状态变化事件。

参数名类型必填说明
callbackFunction回调此函数
failFunction失败回调。
类型说明
BLEConnectChangedState描述 Gatt profile 连接状态 。

描述 Gatt profile 连接状态 。

参数名类型可读可写描述
deviceIdstring表示远端设备地址,例如:“XX:XX:XX:XX:XX:XX”。
transIdProfileConnectionState表示 BLE 连接状态的枚举。

枚举,蓝牙设备的 profile 连接状态。

名称默认值说明
STATE_DISCONNECTED0表示 profile 已断连。
STATE_CONNECTING1表示 profile 正在连接。
STATE_CONNECTED2表示 profile 正在连接。
STATE_DISCONNECTING3表示 profile 正在断连。
function Connected(BLEConnectChangedState) {
let deviceId = BLEConnectChangedState.deviceId
let status = BLEConnectChangedState.state
}
let gattServer = bluetooth.BLE.createGattServer()
gattServer.subscribeConnectStateChange({
callback: function (data) {
Connected(data)
},
fail: function (data, code) {
console.log(`handling fail, code = ${code}`)
},
})

gattServer.unsubscribeConnectStateChange()

Section titled “gattServer.unsubscribeConnectStateChange()”

server 端取消订阅 BLE 连接状态变化事件。

const gattServer = bluetooth.BLE.createGattServer()
gattServer.unsubscribeConnectStateChange()