فهرست منبع

feature:优化wifi连接流程

zeng.chen 6 ماه پیش
والد
کامیت
fff04803ef
5فایلهای تغییر یافته به همراه82 افزوده شده و 48 حذف شده
  1. 17 1
      devices/bluetooth/bt_cmd.js
  2. 2 1
      devices/cmd_key_event.js
  3. 3 16
      pages/ota/ota.js
  4. 35 11
      pages/piano/cropper/cropper.js
  5. 25 19
      pages/setWifi/setWifi.js

+ 17 - 1
devices/bluetooth/bt_cmd.js

@@ -189,6 +189,16 @@ class BtCmd {
         console.log("stringToUint8Array", code)
         return code
     }
+    static listInt2String(data) {
+        return String.fromCharCode(...data);
+    }
+    static intToHex(num) {
+        let value = num ?? 0;
+        let hexStr = value.toString(16).toUpperCase();
+        hexStr = hexStr.padStart(2, '0');
+        let hexNum = parseInt(hexStr, 16);
+        return hexNum;
+    }
 
     // 校验设备
     static checkDevice() {
@@ -246,6 +256,11 @@ class BtCmd {
         console.log("结束图片上传:", cmd);
         return cmd;
     }
+    static wallPaperMD5(value) {
+        let cmd = this._build(CmdBase.wallPaperMD5, value, true, false);
+        console.log("图片上传MD5:", cmd);
+        return cmd;
+    }
     // 壁纸指令 
     static wallPaperData(value) {
         let uint8Array = new Uint8Array(value);
@@ -265,7 +280,7 @@ class BtCmd {
     }
     // 发送OTA的URL
     static otaUrl(value) {
-        return this._build(CmdBase.heiJiaoOtaData, [value]);
+        return this._build(CmdBase.heiJiaoOtaData, value, true, false);
     }
     //暂时没用了
     static otaData(value) {
@@ -366,6 +381,7 @@ const CmdBase = {
     queryVolume: 0x32,
     setVolume: 0x33,
     wallPaper: 0x78,
+    wallPaperMD5: 0x80,
     wallPaperData: 0x79,
     heiJiaoOta: 0x074,
     heiJiaoOtaData: 0x75,

+ 2 - 1
devices/cmd_key_event.js

@@ -49,7 +49,8 @@ const EnumCmdEvent = {
     otaCmd: 'otaCmd',
     otaUrl: 'otaUrl',
     otaWifi: 'otaWifi',
-    wallpaper: 'wallpaper'
+    wallpaper: 'wallpaper',
+    wallpaperMD5: 'wallpaperMD5',
 };
 
 // 枚举定义

+ 3 - 16
pages/ota/ota.js

@@ -3,6 +3,7 @@ import { EnumCmdEvent, CmdEvent } from '../../devices/cmd_key_event';
 import EventManager from '../../utils/event_bus'
 import route_util from '../../utils/route_util';
 import route_constant from '../../utils/route_constant.js';
+import { BtCmd } from '../../devices/bluetooth/bt_cmd.js';
 
 // pages/OTA/ota.js
 Page({
@@ -123,7 +124,7 @@ Page({
   },
   sendUrlData() {
     let url = this.data.otaData.url ?? ""
-    let codeUrl = this.string2ListInt(url)
+    let codeUrl = BtCmd.stringToUint8Array(url)
     BtHelper.getInstance().otaUrl(codeUrl);
     wx.showModal({
       title: '发送成功',
@@ -136,21 +137,7 @@ Page({
       }
     })
   },
-  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() {
 
@@ -427,7 +414,7 @@ Page({
           let otaUrl = event.otaUrl;
           if (otaUrl === 1) {
             // 开始发送url
-            BtHelper.getInstance().wifiUrl(_this.string2ListInt(_this.data.otaData.url))
+            BtHelper.getInstance().wifiUrl(BtCmd.stringToUint8Array(_this.data.otaData.url))
           } else {
             wx.hideLoading()
             // wifi失败

+ 35 - 11
pages/piano/cropper/cropper.js

@@ -25,6 +25,7 @@ Page({
     progress: 0,
     _timer: null,
     _imgUrl: null,
+    _imgMD5: null,
   },
   cropper: null,
   callback() {
@@ -168,18 +169,27 @@ Page({
       filePath: url,
       encoding: '', // 不指定编码以获取原始二进制数据
       success: (obj) => {
-        console.log("加载文件成功:", obj.data.byteLength, obj.data.length)
 
-        let binData = obj.data;
-        _this.sliceDataIntoChunks(binData, 64);
+        fs.getFileInfo({
+          "filePath": url, "digestAlgorithm": "md5", success: (res) => {
+            console.log("md5:", res.digest)
+            console.log("加载文件成功:", obj.data.byteLength, obj.data.length, obj.getFileInfo)
 
-        console.log("加载文件成功2:", binData.byteLength, binData.length)
-        _this.data._imageBufferLength = binData.byteLength ?? binData.length
-        wx.hideLoading();
-        wx.showLoading({
-          title: '开始传输壁纸',
+            let binData = obj.data;
+            _this.sliceDataIntoChunks(binData, 64);
+
+            console.log("加载文件成功2:", binData.byteLength, binData.length)
+            _this.data._imageBufferLength = binData.byteLength ?? binData.length
+            wx.hideLoading();
+            wx.showLoading({
+              title: '开始传输壁纸',
+            })
+            _this.data._imgMD5 = res.digest
+            _this.startImage()
+          }
         })
-        _this.startImage()
+
+
       },
       fail: (err) => {
         console.error('读取 .bin 文件失败:', err);
@@ -390,7 +400,17 @@ Page({
     // }
     this.data._chunks = chunks;
   },
-
+  sendImageMD5() {
+    BtHelper.sendCallBack(BtCmd.wallPaperMD5(this.data._imgMD5), function (res) {
+      if (!res) {
+        wx.hideLoading()
+        wx.showToast({
+          title: '发送失败',
+          icon: 'none'
+        })
+      }
+    });
+  },
   async sendImage() {
     let _this = this
 
@@ -512,7 +532,8 @@ Page({
 
           if (otaCmd === 1 && kind == 1) {
             // 开始发送
-            _this.sendImage()
+            _this.sendImageMD5()
+            // _this.sendImage()
             _this.startProgress()
           } else if (otaCmd === 0 && kind == 1) {
             _this.setData({
@@ -536,6 +557,9 @@ Page({
             }
           }
           break;
+        case EnumCmdEvent.wallpaperMD5:
+
+          break;
         default:
           break;
       }

+ 25 - 19
pages/setWifi/setWifi.js

@@ -2,6 +2,8 @@
 const { BtHelper } = require("../../devices/bt_helper");
 import EventManager from '../../utils/event_bus'
 import { EnumCmdEvent, CmdEvent } from '../../devices/cmd_key_event';
+import store from '../../utils/store';
+import { BtCmd } from '../../devices/bluetooth/bt_cmd';
 Page({
   data: {
     wifiName: '',
@@ -11,7 +13,17 @@ Page({
 
   getConnectedWifi: function () {
     const that = this;
-
+    let wifiDic = store.getStore("wifiInfo")
+    let wifiName = wifiDic.wifiName
+    let pwd = wifiDic.wifiPassword
+    if (wifiName && pwd) {
+      console.log("获取Wi-Fi信息", wifiName, pwd);
+      that.setData({
+        wifiName: wifiName,
+        wifiPassword: pwd
+      });
+      return;
+    }
     wx.startWifi({
       success(res) {
         console.log(res.errMsg)
@@ -50,19 +62,6 @@ Page({
       wifiPassword: e.detail.value
     });
   },
-  // string转换为List<int>
-  string2ListInt(text) {
-    let code = Array.from(text).map(char => char.charCodeAt(0));
-    console.log("string转换为List<int>", text, code)
-    return code
-  },
-  _int2Hex(num) {
-    let value = num ?? 0;
-    let hexStr = value.toString(16).toUpperCase();
-    hexStr = hexStr.padStart(2, '0');
-    let hexNum = parseInt(hexStr, 16);
-    return hexNum;
-  },
   sendWiFiInfo(wifiName, pwd) {
     // [0x22, (wifiList.length + pwdList.length + 6), 0x33, (wifiList.length), (wifiList), 0x44, (pwdList)];
 
@@ -77,19 +76,20 @@ Page({
     let result = [];
 
     // 字母*6 +
-    let wifiList = this.string2ListInt(wifiName);
+    let wifiList = BtCmd.stringToUint8Array(wifiName);
 
     // 数字*3 +
-    let pwdList = this.string2ListInt(pwd);
+    let pwdList = BtCmd.stringToUint8Array(pwd);
     console.log("wifiList", wifiList, "pwdList", pwdList)
 
     // 16进制
     result.push(0x22);
-    result.push(this._int2Hex(wifiList.length + pwdList.length + 6));
+
+    result.push(BtCmd.intToHex(wifiList.length + pwdList.length + 6));
 
     // 账号
     result.push(0x33);
-    result.push(this._int2Hex(wifiList.length));
+    result.push(BtCmd.intToHex(wifiList.length));
 
     let p = result[3] + 4;
     let j = 0;
@@ -99,7 +99,7 @@ Page({
 
     // 密码
     result.splice(p, 0, 0x44);
-    result.splice(++p, 0, this._int2Hex(pwdList.length));
+    result.splice(++p, 0, BtCmd.intToHex(pwdList.length));
     p++;
     j = 0;
     for (let i = p; i < p + pwdList.length; i++) {
@@ -136,6 +136,12 @@ Page({
         title: toast,
         icon: 'none'
       })
+      if (name === EnumCmdEvent.otaWifi && value === 1) {
+        store.setStore("wifiInfo", {
+          wifiName: _this.data.wifiName,
+          wifiPassword: _this.data.wifiPassword
+        })
+      }
     }, _this)
   },
   onLoad: function (options) {