提交 ef75c1ec 编写于 作者: Q qiang

fix: 修复 app 端 ble 接口无法写入数据的问题

上级 a7d02107
import { import {
invoke, invoke,
publish, publish,
pack, arrayBufferToBase64,
unpack base64ToArrayBuffer
} from '../../bridge' } from '../../bridge'
/** /**
* 执行蓝牙相关方法 * 执行蓝牙相关方法
*/ */
function bluetoothExec (method, callbackId, data = {}) { function bluetoothExec (method, callbackId, data = {}, beforeSuccess) {
var deviceId = data.deviceId var deviceId = data.deviceId
if (deviceId) { if (deviceId) {
data.deviceId = deviceId.toUpperCase() data.deviceId = deviceId.toUpperCase()
...@@ -20,7 +20,10 @@ function bluetoothExec (method, callbackId, data = {}) { ...@@ -20,7 +20,10 @@ function bluetoothExec (method, callbackId, data = {}) {
plus.bluetooth[method.replace('Changed', 'Change')](Object.assign(data, { plus.bluetooth[method.replace('Changed', 'Change')](Object.assign(data, {
success (data) { success (data) {
invoke(callbackId, Object.assign({}, pack(data), { if (typeof beforeSuccess === 'function') {
beforeSuccess(data)
}
invoke(callbackId, Object.assign({}, data, {
errMsg: `${method}:ok`, errMsg: `${method}:ok`,
code: undefined, code: undefined,
message: undefined message: undefined
...@@ -37,9 +40,12 @@ function bluetoothExec (method, callbackId, data = {}) { ...@@ -37,9 +40,12 @@ function bluetoothExec (method, callbackId, data = {}) {
/** /**
* 监听蓝牙相关事件 * 监听蓝牙相关事件
*/ */
function bluetoothOn (method) { function bluetoothOn (method, beforeSuccess) {
plus.bluetooth[method.replace('Changed', 'Change')](function (data) { plus.bluetooth[method.replace('Changed', 'Change')](function (data) {
publish(method, Object.assign({}, pack(data), { if (typeof beforeSuccess === 'function') {
beforeSuccess(data)
}
publish(method, Object.assign({}, data, {
code: undefined, code: undefined,
message: undefined message: undefined
})) }))
...@@ -47,6 +53,16 @@ function bluetoothOn (method) { ...@@ -47,6 +53,16 @@ function bluetoothOn (method) {
return true return true
} }
function checkDevices (data) {
data.devices = data.devices.map(device => {
var advertisData = device.advertisData
if (advertisData && typeof advertisData !== 'string') {
device.advertisData = arrayBufferToBase64(advertisData)
}
return device
})
}
var onBluetoothAdapterStateChange var onBluetoothAdapterStateChange
var onBluetoothDeviceFound var onBluetoothDeviceFound
var onBLEConnectionStateChange var onBLEConnectionStateChange
...@@ -67,7 +83,7 @@ export function getBluetoothAdapterState (data, callbackId) { ...@@ -67,7 +83,7 @@ export function getBluetoothAdapterState (data, callbackId) {
} }
export function startBluetoothDevicesDiscovery (data, callbackId) { export function startBluetoothDevicesDiscovery (data, callbackId) {
onBluetoothDeviceFound = onBluetoothDeviceFound || bluetoothOn('onBluetoothDeviceFound') onBluetoothDeviceFound = onBluetoothDeviceFound || bluetoothOn('onBluetoothDeviceFound', checkDevices)
bluetoothExec('startBluetoothDevicesDiscovery', callbackId, data) bluetoothExec('startBluetoothDevicesDiscovery', callbackId, data)
} }
...@@ -76,7 +92,7 @@ export function stopBluetoothDevicesDiscovery (data, callbackId) { ...@@ -76,7 +92,7 @@ export function stopBluetoothDevicesDiscovery (data, callbackId) {
} }
export function getBluetoothDevices (data, callbackId) { export function getBluetoothDevices (data, callbackId) {
bluetoothExec('getBluetoothDevices', callbackId, {}) bluetoothExec('getBluetoothDevices', callbackId, {}, checkDevices)
} }
export function getConnectedBluetoothDevices (data, callbackId) { export function getConnectedBluetoothDevices (data, callbackId) {
...@@ -102,12 +118,18 @@ export function getBLEDeviceCharacteristics (data, callbackId) { ...@@ -102,12 +118,18 @@ export function getBLEDeviceCharacteristics (data, callbackId) {
} }
export function notifyBLECharacteristicValueChange (data, callbackId) { export function notifyBLECharacteristicValueChange (data, callbackId) {
onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange') onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange',
data => {
data.value = arrayBufferToBase64(data.value)
})
bluetoothExec('notifyBLECharacteristicValueChange', callbackId, data) bluetoothExec('notifyBLECharacteristicValueChange', callbackId, data)
} }
export function notifyBLECharacteristicValueChanged (data, callbackId) { export function notifyBLECharacteristicValueChanged (data, callbackId) {
onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange') onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange',
data => {
data.value = arrayBufferToBase64(data.value)
})
bluetoothExec('notifyBLECharacteristicValueChanged', callbackId, data) bluetoothExec('notifyBLECharacteristicValueChanged', callbackId, data)
} }
...@@ -116,5 +138,6 @@ export function readBLECharacteristicValue (data, callbackId) { ...@@ -116,5 +138,6 @@ export function readBLECharacteristicValue (data, callbackId) {
} }
export function writeBLECharacteristicValue (data, callbackId) { export function writeBLECharacteristicValue (data, callbackId) {
bluetoothExec('writeBLECharacteristicValue', callbackId, unpack(data)) data.value = base64ToArrayBuffer(data.value)
bluetoothExec('writeBLECharacteristicValue', callbackId, data)
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册