421 lines
10 KiB
JavaScript
421 lines
10 KiB
JavaScript
|
||
|
||
const app = getApp()
|
||
function inArray(arr, key, val) {
|
||
for (let i = 0; i < arr.length; i++) {
|
||
if (arr[i][key] === val) {
|
||
return i;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
// ArrayBuffer转16进度字符串示例
|
||
function ab2hex(buffer) {
|
||
var hexArr = Array.prototype.map.call(
|
||
new Uint8Array(buffer),
|
||
function (bit) {
|
||
return ('00' + bit.toString(16)).slice(-2)
|
||
}
|
||
)
|
||
return hexArr.join('');
|
||
}
|
||
|
||
|
||
|
||
Component({
|
||
properties: {
|
||
paramA: Number,
|
||
paramB: String,
|
||
// 定义属性,属性值可以是任意类型
|
||
myProperty: {
|
||
type: Array,
|
||
value: {}
|
||
}
|
||
},
|
||
data: {
|
||
devices: [],
|
||
connected: false,
|
||
chs: [],
|
||
TimerNumber:0,
|
||
myArray: [],
|
||
index: null,
|
||
firmwareName:"这里显示文件名称",
|
||
devicedisplay:0,
|
||
dat_filename:"",
|
||
dat_filePath:"",
|
||
hex_filename:"",
|
||
hex_filePath:"",
|
||
},
|
||
|
||
methods: {
|
||
onLoad: function() {
|
||
this.data.paramA // 页面参数 paramA 的值
|
||
this.data.paramB // 页面参数 paramB 的值
|
||
|
||
},
|
||
bindPickerChange: function(e) {
|
||
console.log('picker发送选择改变,携带值为', e.detail.value)
|
||
this.setData({
|
||
index: e.detail.value
|
||
})
|
||
},
|
||
// 初始化蓝牙
|
||
openBluetoothAdapter() {
|
||
wx.openBluetoothAdapter({
|
||
success: (res) => {
|
||
console.log('openBluetoothAdapter success', res)
|
||
this.startBluetoothDevicesDiscovery()
|
||
},
|
||
fail: (res) => {
|
||
if (res.errCode === 10001) {
|
||
wx.onBluetoothAdapterStateChange(function (res) {
|
||
console.log('onBluetoothAdapterStateChange', res)
|
||
if (res.available) {
|
||
this.startBluetoothDevicesDiscovery()
|
||
}
|
||
})
|
||
}
|
||
}
|
||
})
|
||
var _this =this;
|
||
let num =setTimeout(function(){
|
||
_this.stopBluetoothDevicesDiscovery()
|
||
},20000)
|
||
// console.log('setTimeout'+num)
|
||
this.setData({
|
||
TimerNumber: num,
|
||
})
|
||
// console.log('setTimeout'+this.data.TimerNumber)
|
||
},
|
||
|
||
|
||
startBluetoothDevicesDiscovery() {
|
||
console.log('startBluetoothDevicesDiscovery ')
|
||
if (this._discoveryStarted) {
|
||
return
|
||
}
|
||
this._discoveryStarted = true
|
||
wx.startBluetoothDevicesDiscovery({
|
||
allowDuplicatesKey: true,
|
||
success: (res) => {
|
||
console.log('startBluetoothDevicesDiscovery success', res)
|
||
this.onBluetoothDeviceFound()
|
||
},
|
||
fail(res) {
|
||
console.error('startBluetoothDevicesDiscovery', res)
|
||
}
|
||
})
|
||
},
|
||
closeBLEConnection() {
|
||
wx.closeBLEConnection({
|
||
deviceId: this.data.deviceId
|
||
})
|
||
this.setData({
|
||
connected: false,
|
||
chs: [],
|
||
canWrite: false,
|
||
devicedisplay:-1
|
||
})
|
||
},
|
||
onBluetoothDeviceFound() {
|
||
// console.log('onBluetoothDeviceFound ')
|
||
wx.onBluetoothDeviceFound((res) => {
|
||
// console.log('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 = {}
|
||
if (idx === -1) {
|
||
data[`devices[${foundDevices.length}]`] = device
|
||
} else {
|
||
data[`devices[${idx}]`] = device
|
||
}
|
||
this.setData(data)
|
||
})
|
||
})
|
||
},
|
||
getBluetoothAdapterState() {
|
||
wx.getBluetoothAdapterState({
|
||
success: (res) => {
|
||
console.log('getBluetoothAdapterState', res)
|
||
if (res.discovering) {
|
||
this.onBluetoothDeviceFound()
|
||
} else if (res.available) {
|
||
this.startBluetoothDevicesDiscovery()
|
||
}
|
||
}
|
||
})
|
||
},
|
||
startBluetoothDevicesDiscovery() {
|
||
console.log('startBluetoothDevicesDiscovery ')
|
||
if (this._discoveryStarted) {
|
||
return
|
||
}
|
||
this._discoveryStarted = true
|
||
wx.startBluetoothDevicesDiscovery({
|
||
allowDuplicatesKey: true,
|
||
success: (res) => {
|
||
console.log('startBluetoothDevicesDiscovery success', res)
|
||
this.onBluetoothDeviceFound()
|
||
},
|
||
fail(res) {
|
||
console.error('startBluetoothDevicesDiscovery', res)
|
||
}
|
||
})
|
||
},
|
||
stopBluetoothDevicesDiscovery() {
|
||
// console.log('setTimeout'+this.data.TimerNumber)
|
||
|
||
wx.stopBluetoothDevicesDiscovery()
|
||
if (this.data.TimerNumber!=0){
|
||
// console.log('timeoutID'+ this.data.TimerNumber)
|
||
clearTimeout(this.data.TimerNumber)
|
||
}
|
||
|
||
},
|
||
createBLEConnection(e) {
|
||
|
||
const ds = e.currentTarget.dataset
|
||
const deviceId = ds.deviceId
|
||
const name = ds.name
|
||
|
||
console.log('createBLEConnection:'+deviceId)
|
||
wx.createBLEConnection({
|
||
deviceId,
|
||
success: (res) => {
|
||
this.setData({
|
||
connected: true,
|
||
name,
|
||
deviceId,
|
||
devicedisplay:deviceId,
|
||
})
|
||
console.log('kkkkk:'+this.devicedisplay)
|
||
this.getBLEDeviceServices(deviceId)
|
||
},
|
||
fail: (res) => {
|
||
console.error('createBLEConnection', res.errMsg)
|
||
}
|
||
}
|
||
)
|
||
this.stopBluetoothDevicesDiscovery()
|
||
},
|
||
|
||
getBLEDeviceServices(deviceId) {
|
||
wx.getBLEDeviceServices({
|
||
deviceId,
|
||
success: (res) => {
|
||
console.log('getBLEDeviceServices', res.characteristics)
|
||
for (let i = 0; i < res.services.length; i++) {
|
||
if (res.services[i].isPrimary) {
|
||
this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid)
|
||
return
|
||
}
|
||
}
|
||
}
|
||
})
|
||
},
|
||
getBLEDeviceCharacteristics(deviceId, serviceId) {
|
||
wx.getBLEDeviceCharacteristics({
|
||
deviceId,
|
||
serviceId,
|
||
success: (res) => {
|
||
console.log('getBLEDeviceCharacteristics success', res.characteristics)
|
||
for (let i = 0; i < res.characteristics.length; i++) {
|
||
let item = res.characteristics[i]
|
||
|
||
if (item.properties.read) {
|
||
console.log('read characteristicId:'+item.uuid, res.errMsg)
|
||
wx.readBLECharacteristicValue({
|
||
deviceId,
|
||
serviceId,
|
||
characteristicId: item.uuid,
|
||
})
|
||
}
|
||
if (item.properties.write && item.properties.notify) {
|
||
this.setData({
|
||
canWrite: true
|
||
})
|
||
this._deviceId = deviceId
|
||
this._serviceId = serviceId
|
||
this._characteristicId = item.uuid
|
||
console.log('Write _characteristicId:'+item.uuid, res.errMsg)
|
||
|
||
// this.writeBLECharacteristicValue('11223344AABBCC')
|
||
}
|
||
if (item.properties.notify || item.properties.indicate) {
|
||
console.log('notify OR indicate characteristicId:'+item.uuid, res.errMsg)
|
||
wx.notifyBLECharacteristicValueChange({
|
||
deviceId,
|
||
serviceId,
|
||
characteristicId: item.uuid,
|
||
state: true,
|
||
})
|
||
}
|
||
}
|
||
},
|
||
fail(res) {
|
||
console.error('getBLEDeviceCharacteristics', res)
|
||
}
|
||
})
|
||
// 操作之前先监听,保证第一时间获取数据
|
||
wx.onBLECharacteristicValueChange((characteristic) => {
|
||
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(characteristic.value)
|
||
}
|
||
} else {
|
||
data[`chs[${idx}]`] = {
|
||
uuid: characteristic.characteristicId,
|
||
value: ab2hex(characteristic.value)
|
||
}
|
||
}
|
||
// data[`chs[${this.data.chs.length}]`] = {
|
||
// uuid: characteristic.characteristicId,
|
||
// value: ab2hex(characteristic.value)
|
||
// }
|
||
this.setData(data)
|
||
})
|
||
},
|
||
|
||
stringToBytes : function(strtxt) {
|
||
return new TextEncoder().encode(strtxt)
|
||
},
|
||
stringToByteArray:function (str) {
|
||
console.log('str'+str)
|
||
var array = new Uint8Array(str.length);
|
||
for (var i = 0; i < str.length; i++) {
|
||
array[i] = str.charCodeAt(i);
|
||
console.log('array[i]'+array[i])
|
||
}
|
||
return array;
|
||
} ,
|
||
chooseMessageFile(e){
|
||
const ds = e.currentTarget.dataset;
|
||
const name = ds.name;
|
||
const _this =this
|
||
let array = [name]
|
||
|
||
|
||
console.log(_this.properties.paramA)
|
||
console.log(app.globalData.roomIDName.length)
|
||
console.log(_this.data.myArray.length)
|
||
console.log(_this.properties.myProperty.length)
|
||
|
||
|
||
wx.chooseMessageFile({
|
||
count: 1,
|
||
type:'file',
|
||
extension:array,
|
||
success(res){
|
||
console.log(res)
|
||
if (name === '.hex')
|
||
{
|
||
console.log('chooseMessageFile True HEX:'+res.tempFiles[0].path)
|
||
_this.setData({
|
||
hex_filename:res.tempFiles[0].name,
|
||
hex_filePath:res.tempFiles[0].path,
|
||
|
||
})
|
||
}
|
||
else if (name === '.dat') {
|
||
console.log('chooseMessageFile True DAT:'+res.tempFiles[0].path)
|
||
_this.setData({
|
||
dat_filename:res.tempFiles[0].name,
|
||
dat_filePath:res.tempFiles[0].path,
|
||
})
|
||
|
||
}
|
||
|
||
|
||
|
||
},
|
||
fail (res) {
|
||
console.log('Failed to get file', res.errMsg)
|
||
}
|
||
|
||
|
||
})
|
||
},
|
||
|
||
|
||
writeBLECharacteristicValue(sendstr) {
|
||
// 向蓝牙设备发送一个0x00的16进制数据
|
||
|
||
console.log(sendstr)
|
||
let datebuffer =this.stringToByteArray(sendstr);
|
||
// console.log('buffer Size:'+buffer.length)
|
||
|
||
let buffer = datebuffer.buffer
|
||
console.log('datebuffer'+datebuffer)
|
||
// let dataView = new Uint8Array(buffer)
|
||
// dataView.a
|
||
console.log('buffer.leng'+buffer.byteLength)
|
||
console.log('buffer.leng'+buffer)
|
||
// dataView.setUint8(1,11)
|
||
// dataView.setUint8(2,16)
|
||
// dataView.setUint8(3,13)
|
||
// dataView.setUint8(4,18)
|
||
// dataView.setUint8(5,12)
|
||
// dataView.setUint8(6,24)
|
||
// dataView.setUint8(7,54)
|
||
// dataView.setUint8(8,34)
|
||
|
||
console.log('UUID :'+this._characteristicId)
|
||
|
||
wx.writeBLECharacteristicValue({
|
||
deviceId: this._deviceId,
|
||
serviceId: this._serviceId,
|
||
characteristicId: this._characteristicId,
|
||
value: buffer,
|
||
success (res) {
|
||
console.log('writeBLECharacteristicValue success', res.errMsg)
|
||
},
|
||
fail (res) {
|
||
console.log('writeBLECharacteristicValue fail', res.errMsg)
|
||
}
|
||
})
|
||
},
|
||
writeBLECharacteristicValue1(){
|
||
this.writeBLECharacteristicValue('1233456789a')
|
||
},
|
||
|
||
closeBluetoothAdapter() {
|
||
wx.closeBluetoothAdapter()
|
||
this._discoveryStarted = false
|
||
},
|
||
|
||
|
||
|
||
},
|
||
|
||
|
||
|
||
ready: function () {
|
||
|
||
console.log(app.globalData.roomIDName)
|
||
this.setData({
|
||
myArray:app.globalData.roomIDName
|
||
})
|
||
console.log( this.data.myArray)
|
||
},
|
||
|
||
|
||
|
||
|
||
|
||
// 蓝牙操作
|
||
|
||
|
||
|
||
|
||
|
||
|
||
})
|