From 3500ccd27caa02a04799c548ba4f65a4cfd02522 Mon Sep 17 00:00:00 2001 From: royye62 Date: Tue, 14 Apr 2020 16:50:37 +0800 Subject: [PATCH] miniprogram: add iap mp for ble OTA --- tools/Mini_Program/iap/README.md | 2 + tools/Mini_Program/iap/miniprogram/app.js | 12 + tools/Mini_Program/iap/miniprogram/app.json | 14 + tools/Mini_Program/iap/miniprogram/app.wxss | 51 ++ .../iap/miniprogram/images/aithinker-mini.png | Bin 0 -> 86564 bytes .../iap/miniprogram/images/bluetooth.png | Bin 0 -> 9575 bytes .../pages/hardware/ble/device/index.js | 441 ++++++++++++++ .../pages/hardware/ble/device/index.json | 3 + .../pages/hardware/ble/device/index.wxml | 94 +++ .../pages/hardware/ble/device/index.wxss | 78 +++ .../pages/hardware/ble/index/index.js | 129 ++++ .../pages/hardware/ble/index/index.json | 3 + .../pages/hardware/ble/index/index.wxml | 15 + .../pages/hardware/ble/index/index.wxss | 27 + .../Mini_Program/iap/miniprogram/sitemap.json | 7 + .../miniprogram/utils/hardware/ble/ble-api.js | 554 ++++++++++++++++++ .../miniprogram/utils/hardware/ble/crc16.js | 83 +++ .../miniprogram/utils/hardware/ble/packet.js | 109 ++++ .../iap/miniprogram/utils/util.js | 97 +++ tools/Mini_Program/iap/project.config.json | 73 +++ 20 files changed, 1792 insertions(+) create mode 100644 tools/Mini_Program/iap/README.md create mode 100644 tools/Mini_Program/iap/miniprogram/app.js create mode 100644 tools/Mini_Program/iap/miniprogram/app.json create mode 100644 tools/Mini_Program/iap/miniprogram/app.wxss create mode 100644 tools/Mini_Program/iap/miniprogram/images/aithinker-mini.png create mode 100644 tools/Mini_Program/iap/miniprogram/images/bluetooth.png create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.js create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.json create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.wxml create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.wxss create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/index/index.js create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/index/index.json create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/index/index.wxml create mode 100644 tools/Mini_Program/iap/miniprogram/pages/hardware/ble/index/index.wxss create mode 100644 tools/Mini_Program/iap/miniprogram/sitemap.json create mode 100644 tools/Mini_Program/iap/miniprogram/utils/hardware/ble/ble-api.js create mode 100644 tools/Mini_Program/iap/miniprogram/utils/hardware/ble/crc16.js create mode 100644 tools/Mini_Program/iap/miniprogram/utils/hardware/ble/packet.js create mode 100644 tools/Mini_Program/iap/miniprogram/utils/util.js create mode 100644 tools/Mini_Program/iap/project.config.json diff --git a/tools/Mini_Program/iap/README.md b/tools/Mini_Program/iap/README.md new file mode 100644 index 000000000..dd8d33788 --- /dev/null +++ b/tools/Mini_Program/iap/README.md @@ -0,0 +1,2 @@ +## 蓝牙升级微信小程序源码 + diff --git a/tools/Mini_Program/iap/miniprogram/app.js b/tools/Mini_Program/iap/miniprogram/app.js new file mode 100644 index 000000000..9c5d25e2b --- /dev/null +++ b/tools/Mini_Program/iap/miniprogram/app.js @@ -0,0 +1,12 @@ +//app.js +App({ + globalData: { + }, + onLaunch: function () { + this.globalData.SystemInfo = wx.getSystemInfoSync() + //console.log(this.globalData.SystemInfo) + wx.setKeepScreenOn({ + keepScreenOn: true + }) + }, +}) \ No newline at end of file diff --git a/tools/Mini_Program/iap/miniprogram/app.json b/tools/Mini_Program/iap/miniprogram/app.json new file mode 100644 index 000000000..6d45376b0 --- /dev/null +++ b/tools/Mini_Program/iap/miniprogram/app.json @@ -0,0 +1,14 @@ +{ + "pages": [ + "pages/hardware/ble/index/index", + "pages/hardware/ble/device/index" + ], + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#f8f8f8", + "navigationBarTitleText": "TencentOS tiny 蓝牙OTA示例", + "navigationBarTextStyle": "black", + "backgroundColor": "#f8f8f8" + }, + "sitemapLocation": "sitemap.json" +} \ No newline at end of file diff --git a/tools/Mini_Program/iap/miniprogram/app.wxss b/tools/Mini_Program/iap/miniprogram/app.wxss new file mode 100644 index 000000000..7dfbc1bc6 --- /dev/null +++ b/tools/Mini_Program/iap/miniprogram/app.wxss @@ -0,0 +1,51 @@ +/**app.wxss**/ +/* .container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 100rpx 0; + box-sizing: border-box; +} */ + + +.flex-row { + display: flex; + flex-flow: row nowrap; +} + +.flex-row-wrap { + display: flex; + flex-flow: row wrap; +} + +.flex-column-reverse { + display: flex; + flex-flow: column-reverse nowrap; +} + +.center { + justify-content: center; + align-items: center; +} + +.left { + justify-content: flex-start; + align-items: center; +} + +.right { + justify-content: flex-end; + align-items: center; +} + +.space-between { + justify-content: space-between; + align-items: center; +} + +.space-around { + justify-content: space-around; + align-items: center; +} \ No newline at end of file diff --git a/tools/Mini_Program/iap/miniprogram/images/aithinker-mini.png b/tools/Mini_Program/iap/miniprogram/images/aithinker-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..87743378c1716b155bbad4f3870f38b43312747a GIT binary patch literal 86564 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 c7iRq@f8)?AS*tHO{0uFVdQ&MBb@096z1i~s-t literal 0 HcmV?d00001 diff --git a/tools/Mini_Program/iap/miniprogram/images/bluetooth.png b/tools/Mini_Program/iap/miniprogram/images/bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..fdfe30c038284fc1d94a8534207b930d7cecec5b GIT binary patch literal 9575 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 { + eventChannel.on('eventData', function (data) { + resolve(data) + }) + }) + }, + onLoad: async function(options) { + console.log(util.formatTime()) + let data = await this.acceptDataFromPrevPage() + console.log("accept data from prev page", data) + this.setData({ + device: data.device, + }) + + // 监听低功耗蓝牙连接状态的改变事件。包括开发者主动连接或断开连接,设备丢失,连接异常断开等等 + await bleapi.onBLEConnectionStateChange(this.onStateChange) + // 监听低功耗蓝牙设备的特征值变化事件。必须先启用 notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification + if (this.data.device.characteristic.properties.notify == true) { + console.log("notifyBLECharacteristicValueChange and register value change callback") + await bleapi.notifyBLECharacteristicValueChanged( + this.data.device.deviceId, + this.data.device.service.uuid, + this.data.device.characteristic.uuid) + await bleapi.onBLECharacteristicValueChange(this.onMessage) + } + }, + onUnload: function(e) { + let deviceId = this.data.device.deviceId + console.log("onUnload close the ble connection", deviceId) + bleapi.closeBLEConnection(deviceId) + }, + onStateChange: function(res) { + console.log("onBLEConnectionStateChange", res.connected) + this.setData({ + [`device.connected`]: res.connected + }) + }, + formSubmit: async function(e) { + console.log(e.detail.value) + let value = e.detail.value.textarea + try { + await this.writeData(util.str2abUint8(value)) + wx.showToast({ + icon: 'none', + title: '写数据成功', + duration: 1000, + }) + } catch (e) { + wx.showToast({ + icon: 'none', + title: '写数据失败', + duration: 2000, + }) + } + }, + formReset(e) { + console.log(e) + this.setData({ + inputText: '', + }) + }, + bindTextAreaBlur: function(e) { + console.log(e.detail.value) + this.setData({ + inputText: e.detail.value, + }) + }, + chose: function() { + wx.chooseMessageFile({ + count: 1, + type: 'file', + success: (res) => { + console.log(res) + fileName = res.tempFiles[0].name + wx.getFileSystemManager().readFile({ + filePath: res.tempFiles[0].path, + // encoding: 'binary', + success: (res2) => { + console.log(res2) + fileBuffer = new Uint8Array(res2.data) + this.setData({ + file_name: fileName, + file_size: res.tempFiles[0].size, + }) + } + }) + } + }) + }, + writeData: async function(payload) { + console.log(`writeData len(${payload.byteLength})`, payload, new Date().toISOString()) + if (!this.data.device.connected) { + wx.showModal({ + title: '提示', + content: '蓝牙已断开,请重新连接设备', + showCancel: false, + success: function(res) {} + }) + return Promise.reject(`ble disconnect`) + } + + let pos = 0; + let bytes = payload.byteLength + while (bytes > 0) { + let frameBuffer; + if (bytes > 20) { + frameBuffer = payload.slice(pos, pos + 20); + pos += 20; + bytes -= 20; + } else { + frameBuffer = payload.slice(pos, pos + bytes); + pos += bytes; + bytes -= bytes; + } + // console.log(`frame(${frameBuffer.byteLength})`, frameBuffer) + try { + await bleapi.writeBLECharacteristicValue( + this.data.device.deviceId, + this.data.device.service.uuid, + this.data.device.characteristic.uuid, + frameBuffer + ) + // Android手机,连续调用会存在写失败的可能性,建议加延时 + await util.delayMs(20) + } catch (e) { + return Promise.reject(e) + } + } + return Promise.resolve() + }, + onMessage: function(data) { + let datastr = util.ab2strHex(data) + console.log('onMessage:', datastr, msgQueue, new Date().toISOString()) + let str = util.ArrayBuffer2str(data) + this.setData({ + receiveText: this.data.receiveText + str + }) + + if (DownLoadMode) { // 下载模式 + let arr = new Uint8Array(data) + for (let i = 0; i < arr.length; i++) { + if (arr[i] == CAN) { // 取消传输 + DownLoadMode = false + } + msgQueue.push(arr[i]) + } + this.setData({ + downloadLog: this.data.downloadLog + `${datastr}\r\n` + }) + } else { // 普通模式 + console.log("normal onReceive:", str) + } + }, + upload: async function() { + let that = this + if (!this.data.device.connected) { + wx.showModal({ + title: '提示', + content: '蓝牙已断开', + showCancel: false, + success: function(res) {} + }) + return + } + + if (!fileName || fileBuffer.length == 0) { + wx.showModal({ + content: "请先选择固件", + showCancel: false + }); + return + } + + wx.showLoading({ + title: '准备上传...', + mask: true, + }) + this.setData({ + send_percent: 0, + timestamp_start: "", + timestamp_end: "", + }) + DownLoadMode = 1 + console.log(`upload begin. bytes: ${fileBuffer.length} /1024: ${fileBuffer.length/1024}`) + try { + await this.recieveByte(C, SyncTimeout) + + wx.showLoading({ + title: '开始上传...', + mask: true, + }) + + this.setData({ + timestamp_start: util.formatTime(), + date_start: new Date() + }) + + console.log("send blockZero begin") + let id = 0 + let blockZero = Packet.getNormalPacket(id, Packet.getZeroContent(fileName, fileBuffer.length)) + await that.writeData(blockZero.buffer) + await that.recieveByte(ACK, RecvTimeout) + await that.recieveByte(C, SyncTimeout) + console.log("send blockZero complete") + wx.showLoading({ + title: '上传中...', + mask: true, + }) + + console.log("send file begin") + let nInterval = (bUse1K == true) ? 1024 : 128; + for (let i = 0; i < fileBuffer.length; i += nInterval) { + console.log("send block " + (i / nInterval + 1) + " start"); + let upper = (fileBuffer.length < i + nInterval) ? + fileBuffer.length : i + nInterval; + let payloadBuf = new Uint8Array(nInterval); + for (let j = i; j < upper; j++) { + payloadBuf[j - i] = fileBuffer[j]; + } + id = i / nInterval + 1; + let block = (bUse1K == true) ? Packet.getLongPacket(id, payloadBuf) : Packet.getNormalPacket(id, payloadBuf); + + await that.writeData(block.buffer) + try { + // TODO: NAK 重传逻辑 + await that.recieveByte(ACK, RecvTimeout) + } catch (e) { + console.error(`${(i / nInterval) + 1} block lost a ack`, e) + } + + console.log("send block " + ((i / nInterval) + 1) + " succceed!"); + this.setData({ + send_percent: parseInt((i) / fileBuffer.length * 100), + }) + } + console.log("send file complete") + + // EOT处理 + // 超时, + // 返回 NAK, 则重传EOT + // 返回 ACK, 则结束 + console.log("send EOT"); + let sendEOTAndRetry = this.autoRetry(async function(buf) { + await that.writeData(new Uint8Array([EOT]).buffer) + console.log(`waiting ACK`, new Date().toISOString()) + let c = await that.recieve(RecvTimeout) + if (c == ACK) { + console.log(`receive ACK 0x${c.toString(16)}`) + // 处理黏包的情况 [ACK, ACK] + while (msgQueue.length > 0) { + if (msgQueue[0] == ACK) { + let c = msgQueue.shift() + console.log(`shift ${c.toString(16)} from queue`, msgQueue) + } else { + break + } + } + } else if (c == NAK) { + console.log(`receive NAK 0x${c.toString(16)}`) + // 处理黏包情况 [NAK, ACK, C] + if (msgQueue.length > 0) { + await that.recieveByte(ACK, RecvTimeout) + } else { + throw `receive NAK 0x${c.toString(16)}, resend EOT` + } + } + }, 2) + await sendEOTAndRetry(new Uint8Array([EOT]).buffer) + await that.recieveByte(C, SyncTimeout) + + console.log("send last block begin") + let blockLast = Packet.getNormalPacket(0, new Uint8Array(128)); + await that.writeData(blockLast.buffer) + await that.recieveByte(ACK, RecvTimeout) + console.log("send last block compelte") + + DownLoadMode = 0 + let diff = new Date().getTime() - this.data.date_start.getTime() + let rate = Math.round(fileBuffer.length * 1000 / diff) * 100 / 100 + console.log("upload complete") + this.setData({ + send_percent: 100, + timestamp_end: util.formatTime(), + rate: rate, + }) + wx.showModal({ + content: "上传完成", + showCancel: false + }); + } catch (e) { + DownLoadMode = 0 + console.error("upload fail:", e) + wx.showModal({ + content: "上传失败,请重试\r\n" + e, + showCancel: false + }); + } + wx.hideLoading() + console.log("msgQueue", msgQueue) + msgQueue = [] // clear msgQueue + }, + reciveByteAndRetry: async function(expect, timeout, retryNum) { + let func = this.autoRetry(this.recieveByte, retryNum) + await func(expect, timeout) + }, + recieveByte: async function(expect, timeout) { + console.log(`waiting 0x${expect.toString(16)} for ${timeout}ms ...`, new Date().toISOString()) + try { + let c = await this.recieve(timeout) + if (c == CAN) { // 接收端终止 + throw `receive 0x${c.toString(16)}. cancel tranmission` + } + if (c != expect) { + throw `expect 0x${expect.toString(16)}, but recieve 0x${c.toString(16)}` + } + // 处理黏包的情况 + while (msgQueue.length > 0) { + if (msgQueue[0] == expect) { + let c = msgQueue.shift() + console.log(`shift ${c.toString(16)} from queue`, msgQueue) + } else { + break + } + } + Promise.resolve(c) + } catch (e) { + throw `waiting 0x${expect.toString(16)} fail: ${e}` + } + }, + recieve: async function(timeout) { + // console.log("start recieve", new Date().toISOString()) + let elaspe = timeout + const interval = 500 + while (elaspe > 0) { + elaspe = elaspe - interval + // console.log(`xxxx`, msgQueue.length, elaspe) + if (msgQueue.length > 0) { + let c = msgQueue.shift(); + console.log(`receive from queue: ${c.toString(16)}`, msgQueue) + return Promise.resolve(c) + } + await util.delayMs(interval) + } + return Promise.reject(`receive timeout ${timeout}ms ${new Date().toISOString()}`) + }, + /* + example: + let sendLastblockAndRetry = this.autoRetry(async function (buf) { + await that.writeData(buf); + await that.recieveByte(ACK, RecvTimeout) + }, 3) + await sendLastblockAndRetry(blockLast.buffer) + */ + autoRetry(func, retryMax) { + let retryNum = retryMax; + return async function funcR() { + let params = arguments + while (retryNum--) { + try { + await func(...params) + break + } catch (e) { + if (retryNum > 0) { + console.error(`retry ${retryMax - retryNum} time. error:`, e); + continue + } else { + throw e + } + } + } + } + }, + RecvCleanTap: function() { + this.setData({ + receiveText: '' + }) + }, + sendValue: async function(e) { + let val = e.currentTarget.dataset.val + try { + await this.writeData(util.str2abUint8(val)) + wx.showToast({ + icon: 'none', + title: '发送成功', + duration: 1000, + }) + } catch (e) { + wx.showToast({ + icon: 'none', + title: '发送失败', + duration: 2000, + }) + } + }, +}) \ No newline at end of file diff --git a/tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.json b/tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.json new file mode 100644 index 000000000..8835af069 --- /dev/null +++ b/tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.wxml b/tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.wxml new file mode 100644 index 000000000..fb70629ef --- /dev/null +++ b/tools/Mini_Program/iap/miniprogram/pages/hardware/ble/device/index.wxml @@ -0,0 +1,94 @@ + + + + + + + 设备信息 + + + + 设备名称 + {{device.name}} + + + 设备ID + {{device.deviceId}} + + + 连接状态 + +