diff --git a/src/core/service/api/device/bluetooth.js b/src/core/service/api/device/bluetooth.js new file mode 100644 index 0000000000000000000000000000000000000000..bda7eae6cccb08f423630da3095d92d2f9229652 --- /dev/null +++ b/src/core/service/api/device/bluetooth.js @@ -0,0 +1,24 @@ +import { + invoke +} from 'uni-core/service/bridge' + +import { + onMethod +} from '../../platform' + +function on (method) { + const callbacks = [] + onMethod(method, data => { + callbacks.forEach(callbackId => { + invoke(callbackId, data) + }) + }) + return function (callbackId) { + callbacks.push(callbackId) + } +} + +export const onBluetoothDeviceFound = on('onBluetoothDeviceFound') +export const onBluetoothAdapterStateChange = on('onBluetoothAdapterStateChange') +export const onBLEConnectionStateChange = on('onBLEConnectionStateChange') +export const onBLECharacteristicValueChange = on('onBLECharacteristicValueChange') diff --git a/src/core/service/bridge.js b/src/core/service/bridge.js index b154cda998d75f5db854b475a184f5c163df35e0..9160f7844d3e6f3d3d018af221912d0759d363ef 100644 --- a/src/core/service/bridge.js +++ b/src/core/service/bridge.js @@ -1,3 +1,7 @@ +export function pack (args) { + return args +} + export function unpack (args) { return args } diff --git a/src/platforms/app-plus/service/api/device/bluetooth.js b/src/platforms/app-plus/service/api/device/bluetooth.js index e7f116a3faf3836e57a11b6360fd56c3d32eeeb4..02f755e5e804e3339b609881b40c351f617fba1b 100644 --- a/src/platforms/app-plus/service/api/device/bluetooth.js +++ b/src/platforms/app-plus/service/api/device/bluetooth.js @@ -1,12 +1,14 @@ import { invoke, - publish + publish, + pack, + unpack } from '../../bridge' /** * 执行蓝牙相关方法 */ -function bluetoothExec (method, callbackId, data = {}, beforeSuccess) { +function bluetoothExec (method, callbackId, data = {}) { var deviceId = data.deviceId if (deviceId) { data.deviceId = deviceId.toUpperCase() @@ -18,10 +20,7 @@ function bluetoothExec (method, callbackId, data = {}, beforeSuccess) { plus.bluetooth[method.replace('Changed', 'Change')](Object.assign(data, { success (data) { - if (typeof beforeSuccess === 'function') { - beforeSuccess(data) - } - invoke(callbackId, Object.assign({}, data, { + invoke(callbackId, Object.assign({}, pack(data), { errMsg: `${method}:ok`, code: undefined, message: undefined @@ -38,12 +37,9 @@ function bluetoothExec (method, callbackId, data = {}, beforeSuccess) { /** * 监听蓝牙相关事件 */ -function bluetoothOn (method, beforeSuccess) { +function bluetoothOn (method) { plus.bluetooth[method.replace('Changed', 'Change')](function (data) { - if (typeof beforeSuccess === 'function') { - beforeSuccess(data) - } - publish(method, Object.assign({}, data, { + publish(method, Object.assign({}, pack(data), { code: undefined, message: undefined })) @@ -51,16 +47,6 @@ function bluetoothOn (method, beforeSuccess) { return true } -function checkDevices (data) { - data.devices = data.devices.map(device => { - var advertisData = device.advertisData - if (advertisData && typeof advertisData !== 'string') { - device.advertisData = wx.arrayBufferToBase64(advertisData) - } - return device - }) -} - var onBluetoothAdapterStateChange var onBluetoothDeviceFound var onBLEConnectionStateChange @@ -81,7 +67,7 @@ export function getBluetoothAdapterState (data, callbackId) { } export function startBluetoothDevicesDiscovery (data, callbackId) { - onBluetoothDeviceFound = onBluetoothDeviceFound || bluetoothOn('onBluetoothDeviceFound', checkDevices) + onBluetoothDeviceFound = onBluetoothDeviceFound || bluetoothOn('onBluetoothDeviceFound') bluetoothExec('startBluetoothDevicesDiscovery', callbackId, data) } @@ -90,7 +76,7 @@ export function stopBluetoothDevicesDiscovery (data, callbackId) { } export function getBluetoothDevices (data, callbackId) { - bluetoothExec('getBluetoothDevices', callbackId, {}, checkDevices) + bluetoothExec('getBluetoothDevices', callbackId, {}) } export function getConnectedBluetoothDevices (data, callbackId) { @@ -116,18 +102,12 @@ export function getBLEDeviceCharacteristics (data, callbackId) { } export function notifyBLECharacteristicValueChange (data, callbackId) { - onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange', - data => { - data.value = wx.arrayBufferToBase64(data.value) - }) + onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange') bluetoothExec('notifyBLECharacteristicValueChange', callbackId, data) } export function notifyBLECharacteristicValueChanged (data, callbackId) { - onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange', - data => { - data.value = wx.arrayBufferToBase64(data.value) - }) + onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange') bluetoothExec('notifyBLECharacteristicValueChanged', callbackId, data) } @@ -136,6 +116,5 @@ export function readBLECharacteristicValue (data, callbackId) { } export function writeBLECharacteristicValue (data, callbackId) { - data.value = wx.base64ToArrayBuffer(data.value) - bluetoothExec('writeBLECharacteristicValue', callbackId, data) + bluetoothExec('writeBLECharacteristicValue', callbackId, unpack(data)) } diff --git a/src/platforms/app-plus/service/bridge.js b/src/platforms/app-plus/service/bridge.js index c79340c245fe1dcc06c08a8d17d457271be1758e..ae41b48500bad0c192f88e92be4cffd1971d08af 100644 --- a/src/platforms/app-plus/service/bridge.js +++ b/src/platforms/app-plus/service/bridge.js @@ -1,4 +1,5 @@ export { + pack, unpack, invoke }