|
|
@@ -0,0 +1,614 @@ |
|
|
|
const util = require("../../utils/util"); |
|
|
|
|
|
|
|
const plugin = requirePlugin("sdkPlugin").AiLink; |
|
|
|
|
|
|
|
|
|
|
|
function inArray(arr, key, val) { |
|
|
|
|
|
|
|
if (!arr || !arr.length || typeof arr != 'object' || !Array.isArray(arr)) { |
|
|
|
return -1 |
|
|
|
} |
|
|
|
for (let i = 0; i < arr.length; i++) { |
|
|
|
if (!key) { |
|
|
|
if (arr[i] == val) { |
|
|
|
return i |
|
|
|
} |
|
|
|
} else if (arr[i][key] === val) { |
|
|
|
return i |
|
|
|
} |
|
|
|
} |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
// ArrayBuffer转16进度字符串示例 |
|
|
|
function ab2hex(buffer, split) { |
|
|
|
|
|
|
|
var hexArr = Array.prototype.map.call( |
|
|
|
new Uint8Array(buffer), |
|
|
|
function (bit) { |
|
|
|
return ('00' + bit.toString(16)).slice(-2) |
|
|
|
} |
|
|
|
) |
|
|
|
return hexArr.join(split); |
|
|
|
} |
|
|
|
|
|
|
|
Page({ |
|
|
|
data: { |
|
|
|
showWriteInput: false, |
|
|
|
devices: [ |
|
|
|
// { |
|
|
|
// deviceId: "02:03:04:05:06:07", |
|
|
|
// name: "elink", |
|
|
|
// localName: "elink", |
|
|
|
// mac: "02:03:04:05:06:07", |
|
|
|
// RSSI: -69, |
|
|
|
// advertisServiceUUIDs:[ |
|
|
|
// "FFE0","FFC0" |
|
|
|
// ], |
|
|
|
// analyzeDataText:"0102003241123413" |
|
|
|
// } |
|
|
|
], |
|
|
|
connected: false, |
|
|
|
chs: [], |
|
|
|
cmd: '', |
|
|
|
name: '', |
|
|
|
deviceId: null, |
|
|
|
historyList: [], |
|
|
|
state:'', |
|
|
|
electricity:'', |
|
|
|
model:'', |
|
|
|
skipNumber:'', |
|
|
|
skipTime:'', |
|
|
|
cumulativeNumber:'', |
|
|
|
finishArr:{}, |
|
|
|
stumbleRope:[ |
|
|
|
|
|
|
|
], |
|
|
|
isStumbleRope:1, |
|
|
|
historicalRecord:'', |
|
|
|
isSupport:'', |
|
|
|
record:'', |
|
|
|
// isHistoricalRecord:false |
|
|
|
}, |
|
|
|
onLoad: function () { |
|
|
|
let historyList = [] |
|
|
|
historyList = wx.getStorageSync('historyList') |
|
|
|
this.setData({ |
|
|
|
historyList, |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 初始化蓝牙模块 |
|
|
|
openBluetoothAdapter() { |
|
|
|
|
|
|
|
wx.openBluetoothAdapter({ |
|
|
|
|
|
|
|
success: (res) => { |
|
|
|
; |
|
|
|
console.log('openBluetoothAdapter success', res) |
|
|
|
this.startBluetoothDevicesDiscovery() |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
; |
|
|
|
if (res.errCode === 10001) { |
|
|
|
wx.showToast({ |
|
|
|
title: '请打开蓝牙', |
|
|
|
icon: "none" |
|
|
|
}) |
|
|
|
wx.onBluetoothAdapterStateChange(function (res) { |
|
|
|
console.log('onBluetoothAdapterStateChange', res) |
|
|
|
if (res.available) { |
|
|
|
this.startBluetoothDevicesDiscovery() |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
// 获取本机蓝牙适配器状态 |
|
|
|
getBluetoothAdapterState() { |
|
|
|
|
|
|
|
wx.getBluetoothAdapterState({ |
|
|
|
success: (res) => { |
|
|
|
; |
|
|
|
console.log('getBluetoothAdapterState', res) |
|
|
|
if (res.discovering) { |
|
|
|
this.onBluetoothDeviceFound() |
|
|
|
} else if (res.available) { |
|
|
|
this.startBluetoothDevicesDiscovery() |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
// 开始搜寻附近的蓝牙外围设备 |
|
|
|
startBluetoothDevicesDiscovery() { |
|
|
|
|
|
|
|
if (this._discoveryStarted) { |
|
|
|
return |
|
|
|
} |
|
|
|
this._discoveryStarted = true |
|
|
|
wx.startBluetoothDevicesDiscovery({ |
|
|
|
allowDuplicatesKey: true, |
|
|
|
services: [ |
|
|
|
"FFE0", |
|
|
|
// "F0A0", // BM30广播模块需加上,如使用连接模块可忽略 |
|
|
|
], |
|
|
|
success: (res) => { |
|
|
|
; |
|
|
|
console.log('startBluetoothDevicesDiscovery success', res) |
|
|
|
this.onBluetoothDeviceFound() |
|
|
|
}, |
|
|
|
}) |
|
|
|
}, |
|
|
|
// 停止搜寻附近的蓝牙外围设备 |
|
|
|
stopBluetoothDevicesDiscovery() { |
|
|
|
|
|
|
|
wx.stopBluetoothDevicesDiscovery() |
|
|
|
}, |
|
|
|
|
|
|
|
// 监听寻找到新设备的事件 |
|
|
|
onBluetoothDeviceFound() { |
|
|
|
|
|
|
|
wx.onBluetoothDeviceFound((res) => { |
|
|
|
res.devices.forEach(device => { |
|
|
|
; |
|
|
|
if (!device.name && !device.localName) { |
|
|
|
return |
|
|
|
} |
|
|
|
const foundDevices = this.data.devices |
|
|
|
const idx = inArray(foundDevices, 'deviceId', device.deviceId) |
|
|
|
const data = {} |
|
|
|
// console.log(device) |
|
|
|
// console.log(ab2hex(device.advertisData)) |
|
|
|
// 此处判断是否BM30广播模块,如使用连接模块请删除此 if ,只保留 else 内容 |
|
|
|
if (device.advertisServiceUUIDs[0].indexOf("F0A0") !== -1) { |
|
|
|
let parseDataRes = plugin.parseBroadcastData(device.advertisData) |
|
|
|
console.log(parseDataRes) |
|
|
|
if (parseDataRes.status == 1) { |
|
|
|
let analyzeData = plugin.analyzeBroadcastScaleData(parseDataRes) |
|
|
|
console.log(analyzeData) |
|
|
|
device.analyzeDataText = analyzeData.text |
|
|
|
} |
|
|
|
} else { |
|
|
|
let buff = device.advertisData.slice(-6) |
|
|
|
device.mac = new Uint8Array(buff) // 保存广播数据中的mac地址,这是由于iOS不直接返回mac地址 |
|
|
|
let tempMac = Array.from(device.mac) |
|
|
|
tempMac.reverse() |
|
|
|
device.macAddr = ab2hex(tempMac, ':').toUpperCase() |
|
|
|
} |
|
|
|
if (idx === -1) { |
|
|
|
data[`devices[${foundDevices.length}]`] = device |
|
|
|
} else { |
|
|
|
data[`devices[${idx}]`] = device |
|
|
|
} |
|
|
|
this.setData(data) |
|
|
|
}) |
|
|
|
}) |
|
|
|
}, |
|
|
|
// 连接低功耗蓝牙设备 |
|
|
|
createBLEConnection(e) { |
|
|
|
|
|
|
|
this._connLoading = true |
|
|
|
wx.showLoading({ |
|
|
|
title: '连接中', |
|
|
|
}) |
|
|
|
setTimeout(() => { |
|
|
|
; |
|
|
|
if (this._connLoading) { |
|
|
|
this._connLoading = false |
|
|
|
wx.hideLoading() |
|
|
|
} |
|
|
|
}, 6000) |
|
|
|
const ds = e.currentTarget.dataset |
|
|
|
const index = ds.index |
|
|
|
// 保存当前连接的设备,注意不能从wxml的dataset中直接返回该对象,因为ArrarBuffer类型的数据无法保留 |
|
|
|
this._device = this.data.devices[index] |
|
|
|
console.log(this._device) |
|
|
|
const deviceId = ds.deviceId |
|
|
|
const name = ds.name |
|
|
|
this.mac = ds.mac |
|
|
|
wx.createBLEConnection({ |
|
|
|
deviceId, |
|
|
|
success: (res) => { |
|
|
|
; |
|
|
|
this.setData({ |
|
|
|
connected: true, |
|
|
|
name, |
|
|
|
deviceId, |
|
|
|
}) |
|
|
|
console.log("createBLEConnection:success") |
|
|
|
wx.stopBluetoothDevicesDiscovery() |
|
|
|
this.onBLEConnectionStateChange() |
|
|
|
this.getBLEDeviceServices(deviceId) |
|
|
|
}, |
|
|
|
fail: res => { |
|
|
|
; |
|
|
|
this._connLoading = false |
|
|
|
wx.hideLoading() |
|
|
|
wx.showToast({ |
|
|
|
title: '连接失败', |
|
|
|
icon: 'none' |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
// 连接上设备就可以停止蓝牙搜索,减少功耗。 |
|
|
|
this.stopBluetoothDevicesDiscovery() |
|
|
|
}, |
|
|
|
|
|
|
|
onBLEConnectionStateChange() { |
|
|
|
|
|
|
|
wx.onBLEConnectionStateChange((res) => { |
|
|
|
console.log('wx.onBLEConnectionStateChange() ', res.deviceId, res.connected, res.errorCode, res.errorMsg) |
|
|
|
// 该方法回调中可以用于处理连接意外断开等异常情况 |
|
|
|
// console.log(`%c device ${res.deviceId} state has changed, connected: ${res.connected}`, 'color: #F26363') |
|
|
|
if (!res.connected) { |
|
|
|
; |
|
|
|
wx.showToast({ |
|
|
|
title: '连接已断开', |
|
|
|
icon: 'none' |
|
|
|
}) |
|
|
|
this.setData({ |
|
|
|
connected: false, |
|
|
|
showWriteInput: false, |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 断开与低功耗蓝牙设备的连接 |
|
|
|
closeBLEConnection() { |
|
|
|
|
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId: this._deviceId |
|
|
|
}) |
|
|
|
this.setData({ |
|
|
|
connected: false, |
|
|
|
chs: [], |
|
|
|
showWriteInput: false, |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 获取蓝牙设备的 serviceId |
|
|
|
getBLEDeviceServices(deviceId) { |
|
|
|
|
|
|
|
wx.getBLEDeviceServices({ |
|
|
|
deviceId, |
|
|
|
success: (res) => { |
|
|
|
; |
|
|
|
for (let i = 0; i < res.services.length; i++) { |
|
|
|
if (res.services[i].isPrimary && res.services[i].uuid.indexOf('FFE0') > -1) { |
|
|
|
this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid) |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 获取蓝牙设备某个服务中所有特征值(characteristic) |
|
|
|
getBLEDeviceCharacteristics(deviceId, serviceId) { |
|
|
|
|
|
|
|
this._deviceId = deviceId |
|
|
|
this._serviceId = serviceId |
|
|
|
this._device.serviceId = serviceId |
|
|
|
|
|
|
|
wx.getBLEDeviceCharacteristics({ |
|
|
|
deviceId, |
|
|
|
serviceId, |
|
|
|
success: (res) => { |
|
|
|
; |
|
|
|
console.log('getBLEDeviceCharacteristics success', res.characteristics) |
|
|
|
|
|
|
|
// 这部分功能在插件的 initPlugin 中已实现,如需用到其中的 uuid 也可取消注释 |
|
|
|
// // let uuid1, uuid2, uuid3; |
|
|
|
for (let i = 0; i < res.characteristics.length; i++) { |
|
|
|
let item = res.characteristics[i] |
|
|
|
if (item.uuid.indexOf('0000FFE1') != -1) { |
|
|
|
this.uuid1 = item.uuid //下发数据 |
|
|
|
} else if (item.uuid.indexOf('0000FFE2') != -1) { |
|
|
|
this.uuid2 = item.uuid //监听数据 |
|
|
|
} else if (item.uuid.indexOf('0000FFE3') != -1) { |
|
|
|
this.uuid3 = item.uuid //写入设置 |
|
|
|
} |
|
|
|
} |
|
|
|
// 打开监听 |
|
|
|
wx.notifyBLECharacteristicValueChange({ |
|
|
|
deviceId, |
|
|
|
serviceId, |
|
|
|
characteristicId: this.uuid2, |
|
|
|
state: true, |
|
|
|
}) |
|
|
|
wx.notifyBLECharacteristicValueChange({ |
|
|
|
deviceId, |
|
|
|
serviceId, |
|
|
|
characteristicId: this.uuid3, |
|
|
|
state: true, |
|
|
|
}) |
|
|
|
|
|
|
|
// 初始化插件 |
|
|
|
plugin.initPlugin(res.characteristics, this._device) |
|
|
|
|
|
|
|
wx.onBLECharacteristicValueChange((characteristic) => { |
|
|
|
// 解析特征值,返回解密后的数据 |
|
|
|
let bleData = plugin.parseBleData(characteristic.value) |
|
|
|
console.log('蓝牙返回',bleData) |
|
|
|
|
|
|
|
|
|
|
|
if (bleData.status == 0) { |
|
|
|
console.log("握手成功") |
|
|
|
this._connLoading = false |
|
|
|
wx.hideLoading() |
|
|
|
wx.showToast({ |
|
|
|
title: '连接成功', |
|
|
|
}) |
|
|
|
this.setData({ |
|
|
|
showWriteInput : true |
|
|
|
}) |
|
|
|
} else if (bleData.status == 1) { |
|
|
|
let payload = bleData.data //对应协议中的payload数据,可以自行解析该数据 |
|
|
|
if (payload[0] === 0x10) { |
|
|
|
this.setData({ |
|
|
|
isStumbleRope:1 |
|
|
|
}) |
|
|
|
let skipNumber = payload[4] * 256 + payload[3] |
|
|
|
let skipTime = payload[6] * 256 + payload[5] |
|
|
|
let cumulativeNumber = payload[8] * 256 + payload[7] |
|
|
|
this.setData({ |
|
|
|
state:(payload[1]),//状态 |
|
|
|
model:(payload[2]),//模式 |
|
|
|
electricity:(payload[9]),//电量 |
|
|
|
skipNumber:skipNumber,//跳绳数量 |
|
|
|
skipTime:skipTime,//跳绳时间 |
|
|
|
cumulativeNumber:cumulativeNumber//累计个数 |
|
|
|
}) |
|
|
|
}else if(payload[0] === 0x20){ |
|
|
|
let str = payload[1].toString(16) |
|
|
|
let laststring = str.substring(str.length-1) |
|
|
|
if (laststring == 0) { |
|
|
|
var timeStamp = payload[2]+payload[3]*256+payload[4]*65536+payload[5]*16777216//时间戳 |
|
|
|
var model = (payload[6]).toString(16)//模式 |
|
|
|
var skipNumber = payload[8] * 256 + payload[7]//跳绳数量 |
|
|
|
this.setData({ |
|
|
|
['finishArr.timeStamp']:timeStamp, |
|
|
|
['finishArr.model']:model, |
|
|
|
['finishArr.skipNumber']:skipNumber, |
|
|
|
}) |
|
|
|
}else if(laststring == 1){ |
|
|
|
var skipTime = payload[3] * 256 + payload[2]//跳绳时间 |
|
|
|
var cumulativeNumber = payload[5] * 256 + payload[4]//累计个数 |
|
|
|
var averageVelocity = payload[7] * 256 + payload[6]//平均速度 |
|
|
|
var prestissimo = payload[9] * 256 + payload[8]//最快速度 |
|
|
|
this.setData({ |
|
|
|
['finishArr.skipTime']:skipTime, |
|
|
|
['finishArr.cumulativeNumber']:cumulativeNumber, |
|
|
|
['finishArr.averageVelocity']:averageVelocity, |
|
|
|
['finishArr.prestissimo']:prestissimo, |
|
|
|
}) |
|
|
|
}else{ |
|
|
|
if (payload[2] != 65535 && payload[4] != 65535) { |
|
|
|
var stumbleRopeZeroTime = payload[3] * 256 + payload[2] |
|
|
|
var stumbleRopeZeroNum = payload[5] * 256 + payload[4] |
|
|
|
} |
|
|
|
if (payload[6] != 65535 && payload[8] != 65535) { |
|
|
|
var stumbleRopeOneTime = payload[7] * 256 + payload[6] |
|
|
|
var stumbleRopeOneNum = payload[9] * 256 + payload[8] |
|
|
|
} |
|
|
|
if (payload[10] != 65535 && payload[12] != 65535) { |
|
|
|
var stumbleRopeTwoTime = payload[11] * 256 + payload[10] |
|
|
|
var stumbleRopeTwoNum = payload[13] * 256 + payload[12] |
|
|
|
} |
|
|
|
let stumbleRopeOjeckt = { |
|
|
|
stumbleRopeZeroTime:stumbleRopeZeroTime, |
|
|
|
stumbleRopeZeroNum:stumbleRopeZeroNum, |
|
|
|
stumbleRopeOneTime:stumbleRopeOneTime, |
|
|
|
stumbleRopeOneNum:stumbleRopeOneNum, |
|
|
|
stumbleRopeTwoTime:stumbleRopeTwoTime, |
|
|
|
stumbleRopeTwoNum:stumbleRopeTwoNum, |
|
|
|
} |
|
|
|
var temp = [] |
|
|
|
temp.push(stumbleRopeOjeckt) |
|
|
|
this.setData({ |
|
|
|
stumbleRope:temp |
|
|
|
}) |
|
|
|
} |
|
|
|
this.setData({ |
|
|
|
isStumbleRope:2 |
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
}else if(bleData.status == 2){ |
|
|
|
let payload = bleData.data |
|
|
|
if (payload[0].toString(16) == 'f1') { |
|
|
|
let historicalRecord = payload[1]//请求历史记录标识 |
|
|
|
let isSupport = payload[2]//是否支持 |
|
|
|
let record = payload[4] * 256 + payload[3] |
|
|
|
this.setData({ |
|
|
|
historicalRecord:historicalRecord, |
|
|
|
isSupport:isSupport, |
|
|
|
record:record, |
|
|
|
isStumbleRope:3, |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
const idx = inArray(this.data.chs, 'uuid', characteristic.characteristicId) |
|
|
|
const data = {} |
|
|
|
|
|
|
|
if (idx === -1) { |
|
|
|
data[`chs[${this.data.chs.length}]`] = { |
|
|
|
uuid: characteristic.characteristicId, |
|
|
|
value: ab2hex(bleData.completeData, ' ') |
|
|
|
} |
|
|
|
} else { |
|
|
|
data[`chs[${idx}]`] = { |
|
|
|
uuid: characteristic.characteristicId, |
|
|
|
value: ab2hex(bleData.completeData, ' ') |
|
|
|
} |
|
|
|
} |
|
|
|
this.setData(data) |
|
|
|
}) |
|
|
|
}, |
|
|
|
fail(res) { |
|
|
|
console.error('getBLEDeviceCharacteristics', res) |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
writeBLECharacteristicValue(buffer, uuid, deviceId, serviceId) { |
|
|
|
// 向蓝牙设备发送一个二进制流数据 |
|
|
|
wx.writeBLECharacteristicValue({ |
|
|
|
deviceId, |
|
|
|
serviceId, |
|
|
|
characteristicId: uuid, |
|
|
|
value: buffer, |
|
|
|
success(res) { |
|
|
|
; |
|
|
|
console.log('writeBLECharacteristicValue success', res) |
|
|
|
console.log('下发指令==> ' + ab2hex(buffer)) |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
closeBluetoothAdapter() { |
|
|
|
wx.closeBluetoothAdapter() |
|
|
|
this._discoveryStarted = false |
|
|
|
}, |
|
|
|
//发送指令给设备 |
|
|
|
SendInstructions(e){ |
|
|
|
let key = e.currentTarget.dataset.index |
|
|
|
let cmd = '' |
|
|
|
switch (key) { |
|
|
|
case '1': |
|
|
|
cmd = 'a7,00,2f,05,00,67,28,9f,61,c3,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
case '2': |
|
|
|
cmd = 'a7,00,2f,02,01,01,33,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
this.setData({ |
|
|
|
isStumbleRope:1 |
|
|
|
}) |
|
|
|
break; |
|
|
|
case '3': |
|
|
|
cmd = 'a7,00,2f,02,01,00,32,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
case '4': |
|
|
|
cmd = 'a7,00,2f,02,02,01,34,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
this.setData({ |
|
|
|
isStumbleRope:1 |
|
|
|
}) |
|
|
|
break; |
|
|
|
case '5': |
|
|
|
cmd = 'a7,00,2f,02,02,00,33,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
case '6': |
|
|
|
cmd = 'a7,00,2f,02,03,01,35,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
this.setData({ |
|
|
|
isStumbleRope:1 |
|
|
|
}) |
|
|
|
break; |
|
|
|
case '7': |
|
|
|
cmd = 'a7,00,2f,02,03,00,34,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
case '8': |
|
|
|
cmd = 'a7,00,2f,03,04,78,00,ae,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
case '9': |
|
|
|
cmd = 'a7,00,2f,03,05,32,00,69,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
case '10': |
|
|
|
cmd = 'a6,02,f1,01,f4,6a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
case '11': |
|
|
|
cmd = 'a7,00,2f,02,b0,01,e2,7a' |
|
|
|
this.submitCmd(null,cmd) |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
// 指令下发 |
|
|
|
submitCmd(e, cmd) { |
|
|
|
let arr = [] |
|
|
|
let temp = [] |
|
|
|
if (!cmd) { |
|
|
|
cmd = this.data.cmd |
|
|
|
} |
|
|
|
console.log(cmd) |
|
|
|
if(!cmd || !this.data.connected){ |
|
|
|
return |
|
|
|
} |
|
|
|
if(cmd.indexOf(",") == -1){ |
|
|
|
temp = cmd.split(" ") |
|
|
|
} else { |
|
|
|
temp = cmd.split(",") |
|
|
|
} |
|
|
|
let tempCmd = temp.join(' ') |
|
|
|
for(let i = 0; i < temp.length; i++){ |
|
|
|
arr[i] = parseInt(temp[i],16) |
|
|
|
} |
|
|
|
// let arr = [ |
|
|
|
// 0xA6, |
|
|
|
// 0x01, |
|
|
|
// 0x28, |
|
|
|
// 0x29, |
|
|
|
// 0x6A, |
|
|
|
// //A6 01 28 29 6A |
|
|
|
// ] |
|
|
|
if(arr[0] == 0xA6){ |
|
|
|
let len = arr[1] |
|
|
|
let payload = arr.slice(2, 2 + len) |
|
|
|
plugin.sendDataOfA6(payload) |
|
|
|
// let buff = new Uint8Array(arr).buffer |
|
|
|
// this.writeBLECharacteristicValue(buff, this.uuid3, this._deviceId, this._serviceId) |
|
|
|
} else if(arr[0] == 0xA7) { |
|
|
|
let len = arr[3] |
|
|
|
let payload = arr.slice(4, 4 + len) |
|
|
|
plugin.sendDataOfA7(payload) |
|
|
|
} |
|
|
|
let historyList = wx.getStorageSync('historyList') || [] |
|
|
|
let idx = historyList.findIndex(item => item.cmd == tempCmd) |
|
|
|
if (idx < 0) { |
|
|
|
historyList.push({cmd: tempCmd}) |
|
|
|
} |
|
|
|
this.setData({ |
|
|
|
historyList |
|
|
|
}) |
|
|
|
wx.setStorage({ |
|
|
|
data: historyList, |
|
|
|
key: 'historyList', |
|
|
|
}) |
|
|
|
wx.showToast({ |
|
|
|
title: '已发送', |
|
|
|
icon: 'none' |
|
|
|
}) |
|
|
|
}, |
|
|
|
history_delete(e) { |
|
|
|
; |
|
|
|
let index = e.currentTarget.dataset.index |
|
|
|
this.data.historyList.splice(index, 1) |
|
|
|
this.setData({ |
|
|
|
historyList: this.data.historyList |
|
|
|
}) |
|
|
|
wx.setStorage({ |
|
|
|
data: this.data.historyList, |
|
|
|
key: 'historyList', |
|
|
|
}) |
|
|
|
}, |
|
|
|
history_copy(e) { |
|
|
|
; |
|
|
|
let index = e.currentTarget.dataset.index |
|
|
|
wx.setClipboardData({ |
|
|
|
data: this.data.historyList[index].cmd |
|
|
|
}) |
|
|
|
}, |
|
|
|
history_send(e) { |
|
|
|
let index = e.currentTarget.dataset.index |
|
|
|
let cmd = this.data.historyList[index].cmd |
|
|
|
this.submitCmd(null, cmd) |
|
|
|
}, |
|
|
|
}); |