|
@@ -1,6 +1,7 @@
|
|
|
const { BtHelper } = require("../../devices/bt_helper");
|
|
|
import { EnumCmdEvent, CmdEvent } from '../../devices/cmd_key_event';
|
|
|
import EventManager from '../../utils/event_bus'
|
|
|
+import route_util from '../../utils/route_util';
|
|
|
// pages/OTA/ota.js
|
|
|
Page({
|
|
|
|
|
@@ -57,6 +58,12 @@ Page({
|
|
|
buttonTips: "更新失败,再试一次"
|
|
|
});
|
|
|
break;
|
|
|
+ case 5:
|
|
|
+ this.setData({
|
|
|
+ otaStatus: 4,
|
|
|
+ buttonTips: "更新完成"
|
|
|
+ });
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
@@ -78,6 +85,9 @@ Page({
|
|
|
})
|
|
|
return;
|
|
|
}
|
|
|
+ if (this.data.otaStatus != 1 || this.data.otaStatus != 4) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
let _this = this
|
|
|
wx.showModal({
|
|
@@ -91,7 +101,9 @@ Page({
|
|
|
}
|
|
|
|
|
|
if (res.confirm) {
|
|
|
- _this.startDownloadFile()
|
|
|
+ _this.sendOtaCmd(1)
|
|
|
+
|
|
|
+ // _this.startDownloadFile()
|
|
|
// _this.downloadOtaFile(_this.data.otaData.url ?? "")
|
|
|
}
|
|
|
}
|
|
@@ -100,6 +112,40 @@ Page({
|
|
|
// btHelper.ota(this.data.otaData.file_url)
|
|
|
|
|
|
},
|
|
|
+ goToWifi() {
|
|
|
+ route_util.jump("pages/setWifi/setWifi")
|
|
|
+ },
|
|
|
+ sendUrlData() {
|
|
|
+ let url = this.data.otaData.url ?? ""
|
|
|
+ let codeUrl = this.string2ListInt(url)
|
|
|
+ BtHelper.getInstance().otaUrl(codeUrl);
|
|
|
+ wx.showModal({
|
|
|
+ title: '发送成功',
|
|
|
+ content: '开始升级OTA,请等待设备升级成功',
|
|
|
+ showCancel: false,
|
|
|
+ success: (res) => {
|
|
|
+ if (res.confirm) {
|
|
|
+ route_util.goBack()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ int2Hex(num) {
|
|
|
+ return parseInt(num, 16);
|
|
|
+ },
|
|
|
+
|
|
|
+ // string转换为List<int>
|
|
|
+ string2ListInt(text) {
|
|
|
+ let code = Array.from(text).map(char => char.charCodeAt(0));
|
|
|
+ console.log("string转换为List<int>", code)
|
|
|
+ return code
|
|
|
+ },
|
|
|
+
|
|
|
+ // List<int>转换为string
|
|
|
+ listInt2String(data) {
|
|
|
+ return String.fromCharCode(...data);
|
|
|
+ },
|
|
|
+ // 读取文件废弃代码
|
|
|
startDownloadFile() {
|
|
|
|
|
|
var urlPath = this.data.otaData.url ?? "";
|
|
@@ -113,6 +159,8 @@ Page({
|
|
|
console.log(list, localFilePath)
|
|
|
|
|
|
let _this = this;
|
|
|
+ _this.setOtaStatus(2);
|
|
|
+
|
|
|
let localPath = `${wx.env.USER_DATA_PATH}/` + localFilePath
|
|
|
// 判断文件是否存在
|
|
|
fs.access({
|
|
@@ -125,7 +173,7 @@ Page({
|
|
|
_this.readFile(localPath);
|
|
|
|
|
|
} else {
|
|
|
-
|
|
|
+ _this.downloadOtaFile(urlPath, localPath)
|
|
|
}
|
|
|
}, fail(err) {
|
|
|
// 文件不存在或其他错误
|
|
@@ -149,41 +197,35 @@ Page({
|
|
|
// 下载成功,保存文件路径
|
|
|
const filePath = res.tempFilePath;
|
|
|
// _this.readFile(filePath);
|
|
|
- _this.readFile(filePath);
|
|
|
|
|
|
// 将下载的文件移动到本地路径
|
|
|
- // fs.rename({
|
|
|
- // oldPath: filePath,
|
|
|
- // newPath: localPath,
|
|
|
- // success: () => {
|
|
|
-
|
|
|
- // // this.setData({
|
|
|
- // // localFilePath: localFilePath
|
|
|
- // // });
|
|
|
-
|
|
|
- // // 调用 OTA 更新方法
|
|
|
- // // const btHelper = BtHelper.getInstance();
|
|
|
- // // btHelper.ota(localFilePath);
|
|
|
-
|
|
|
- // wx.showToast({
|
|
|
- // title: '文件下载成功',
|
|
|
- // });
|
|
|
- // _this.readFile(localPath);
|
|
|
- // },
|
|
|
- // fail: (err) => {
|
|
|
- // wx.showToast({
|
|
|
- // title: '下载文件失败,检查下手机内存吧',
|
|
|
- // });
|
|
|
- // console.error('文件移动失败:', err);
|
|
|
- // }
|
|
|
- // });
|
|
|
+ fs.rename({
|
|
|
+ oldPath: filePath,
|
|
|
+ newPath: localPath,
|
|
|
+ success: () => {
|
|
|
+ wx.showToast({
|
|
|
+ title: '文件下载成功',
|
|
|
+ });
|
|
|
+ _this.readFile(localPath);
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ _this.setOtaStatus(4);
|
|
|
+
|
|
|
+ wx.showToast({
|
|
|
+ title: '下载文件失败,检查下手机内存吧',
|
|
|
+ });
|
|
|
+ console.error('文件移动失败:', err);
|
|
|
+ }
|
|
|
+ });
|
|
|
} else {
|
|
|
+ _this.setOtaStatus(4);
|
|
|
wx.showToast({
|
|
|
title: '文件下载失败',
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
fail: (err) => {
|
|
|
+ _this.setOtaStatus(4);
|
|
|
wx.showToast({
|
|
|
title: '文件下载失败',
|
|
|
});
|
|
@@ -202,7 +244,6 @@ Page({
|
|
|
wx.showLoading({
|
|
|
title: '开始传输文件',
|
|
|
})
|
|
|
- this.setOtaStatus(2);
|
|
|
const fs = wx.getFileSystemManager();
|
|
|
|
|
|
let _this = this;
|
|
@@ -223,18 +264,20 @@ Page({
|
|
|
title: 'OTA文件下载失败',
|
|
|
});
|
|
|
console.error('文件读取失败:', err);
|
|
|
+ _this.setOtaStatus(4);
|
|
|
}
|
|
|
+
|
|
|
});
|
|
|
},
|
|
|
startSend(data) {
|
|
|
- const chunkSize = 20; // 每次发送的数据块大小
|
|
|
- const chunks = [];
|
|
|
- for (let i = 0; i < data.length; i += chunkSize) {
|
|
|
- chunks.push(data.slice(i, i + chunkSize));
|
|
|
- }
|
|
|
+ // const chunkSize = 20; // 每次发送的数据块大小
|
|
|
+ // const chunks = [];
|
|
|
+ // for (let i = 0; i < data.length; i += chunkSize) {
|
|
|
+ // chunks.push(data.slice(i, i + chunkSize));
|
|
|
+ // }
|
|
|
|
|
|
- this.data._chunks = chunks;
|
|
|
- this.endOta(1)
|
|
|
+ // this.data._chunks = chunks;
|
|
|
+ this.sendOtaCmd(1)
|
|
|
// this.startSendOtaData()
|
|
|
},
|
|
|
|
|
@@ -244,10 +287,10 @@ Page({
|
|
|
|
|
|
if (length === 0) {
|
|
|
wx.showToast({
|
|
|
- title: '图片裁剪失败',
|
|
|
+ title: '下载文件失败',
|
|
|
icon: 'none'
|
|
|
})
|
|
|
- _this.endOta(2)
|
|
|
+ _this.sendOtaCmd(2)
|
|
|
return;
|
|
|
}
|
|
|
_this.sendOtaData(this.data._chunks, 0)
|
|
@@ -256,7 +299,7 @@ Page({
|
|
|
let _this = this
|
|
|
|
|
|
if (index >= imageBuffer.length) {
|
|
|
- _this.endOta(0)
|
|
|
+ _this.sendOtaCmd(0)
|
|
|
return;
|
|
|
}
|
|
|
let chunkSize = 20;
|
|
@@ -265,23 +308,29 @@ Page({
|
|
|
let total = imageBuffer.length
|
|
|
let next = index + chunkSize;
|
|
|
const chunk = imageBuffer.slice(index, next);
|
|
|
- BtHelper.getInstance().wallPaperData(chunk, function (res) {
|
|
|
- console.log("发送OTA数据:", next)
|
|
|
- if (res) {
|
|
|
- _this.updateProgress(next, total);
|
|
|
-
|
|
|
- _this.sendOtaData(imageBuffer)
|
|
|
- } else {
|
|
|
- wx.showModal({
|
|
|
- title: 'OTA升级失败了',
|
|
|
- showCancel: false
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
+ // todo 改成设备wifi下载
|
|
|
+ // BtHelper.getInstance().wallPaperData(chunk, function (res) {
|
|
|
+ // console.log("发送OTA数据:", next)
|
|
|
+ // if (res) {
|
|
|
+ // _this.updateProgress(next, total);
|
|
|
+
|
|
|
+ // _this.sendOtaData(imageBuffer)
|
|
|
+ // } else {
|
|
|
+ // wx.showModal({
|
|
|
+ // title: 'OTA升级失败了',
|
|
|
+ // showCancel: false
|
|
|
+ // })
|
|
|
+ // }
|
|
|
+ // })
|
|
|
|
|
|
},
|
|
|
- endOta(value) {
|
|
|
+ sendOtaCmd(value) {
|
|
|
BtHelper.getInstance().otaCmd(value)
|
|
|
+ if (value == 0) {
|
|
|
+ this.setOtaStatus(0);
|
|
|
+ } else {
|
|
|
+ this.setOtaStatus(4);
|
|
|
+ }
|
|
|
},
|
|
|
|
|
|
startProgress() {
|
|
@@ -308,48 +357,83 @@ Page({
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
- /**
|
|
|
- * 生命周期函数--监听页面加载
|
|
|
- */
|
|
|
- onLoad(options) {
|
|
|
- let param = JSON.parse(options.param)
|
|
|
- console.log("OTA界面:", param)
|
|
|
- let otaData = param.otaData
|
|
|
- let device = param.device
|
|
|
- this.setData({
|
|
|
- otaData: otaData,
|
|
|
- device: device,
|
|
|
- isShowOta: device.clientType === 'MW-S2(BLE)' || device.clientType === 'MW-S2'
|
|
|
- })
|
|
|
-
|
|
|
+ addNotification() {
|
|
|
let _this = this;
|
|
|
EventManager.addNotification(CmdEvent.eventName, function (event) {
|
|
|
let name = event.cmdEvent;
|
|
|
- console.log("OTA页0:", name, EnumCmdEvent.otaCmd, EnumCmdEvent.otaCmd === name)
|
|
|
+ console.log("OTA页0:", event)
|
|
|
+ let kind = event.heiJiaoKind;
|
|
|
|
|
|
switch (name) {
|
|
|
case EnumCmdEvent.otaCmd:
|
|
|
let otaCmd = event.otaCmd;
|
|
|
- let kind = event.heiJiaoKind;
|
|
|
console.log("OTA页:", otaCmd, kind)
|
|
|
|
|
|
if (otaCmd === 1 && kind == 1) {
|
|
|
wx.hideLoading();
|
|
|
- // 开始发送
|
|
|
- _this.startSendOtaData()
|
|
|
- } else if (otaCmd === 0 && kind == 1) {
|
|
|
- // 发送结束
|
|
|
- _this.endOta(0)
|
|
|
+ // 设备收到开启OTA的回复,发送url
|
|
|
+ _this.sendUrlData()
|
|
|
+ } else if (otaCmd === 2 && kind == 1) {
|
|
|
+ wx.hideLoading();
|
|
|
+ // 去设置wifi界面
|
|
|
+ _this.goToWifi()
|
|
|
+ }
|
|
|
+ else if (otaCmd === 0 && kind == 1) {
|
|
|
+ // 设备回收到url,OTA结束了
|
|
|
+ // _this.sendOtaCmd(0)
|
|
|
+ var pages = getCurrentPages();
|
|
|
+ var length = pages.length;
|
|
|
+ var currentPage = pages[length - 1];
|
|
|
+ if (currentPage.route == 'pages/setWifi/setWifi') {
|
|
|
+ wx.navigateBack({
|
|
|
+ delta: 1
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ wx.hideLoading()
|
|
|
+ wx.showModal({
|
|
|
+ title: '等待设备升级中',
|
|
|
+ showCancel: false
|
|
|
+ })
|
|
|
} else if (kind == 0) {
|
|
|
wx.hideLoading()
|
|
|
wx.showModal({
|
|
|
+ title: 'WIFI连接失败了',
|
|
|
+ showCancel: false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case EnumCmdEvent.otaUrl:
|
|
|
+ let otaUrl = event.otaUrl;
|
|
|
+ if (otaUrl === 1) {
|
|
|
+ // 开始发送url
|
|
|
+ BtHelper.getInstance().wifiUrl(_this.string2ListInt(_this.data.otaData.url))
|
|
|
+ } else {
|
|
|
+ wx.hideLoading()
|
|
|
+ // wifi失败
|
|
|
+ wx.showModal({
|
|
|
title: 'OTA升级失败了',
|
|
|
showCancel: false
|
|
|
})
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
- }, this)
|
|
|
+ }, _this)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面加载
|
|
|
+ */
|
|
|
+ onLoad(options) {
|
|
|
+ let param = JSON.parse(options.param)
|
|
|
+ console.log("OTA界面:", param)
|
|
|
+ let otaData = param.otaData
|
|
|
+ let device = param.device
|
|
|
+ this.setData({
|
|
|
+ otaData: otaData,
|
|
|
+ device: device,
|
|
|
+ isShowOta: device.clientType === 'MW-S2(BLE)' || device.clientType === 'MW-S2'
|
|
|
+ })
|
|
|
+ this.addNotification()
|
|
|
},
|
|
|
onUnload() {
|
|
|
EventManager.removeNotification(CmdEvent.eventName, this)
|