Browse Source

feature:增加黑胶的wifi解析指令功能

zeng.chen 7 months ago
parent
commit
4fd9211ff7
5 changed files with 77 additions and 25 deletions
  1. 7 1
      devices/bluetooth/bt_cmd.js
  2. 2 2
      devices/bluetooth/bt_parse.js
  3. 4 0
      devices/bt_helper.js
  4. 8 0
      devices/cmd_key_event.js
  5. 56 22
      pages/ota/ota.js

+ 7 - 1
devices/bluetooth/bt_cmd.js

@@ -261,7 +261,12 @@ class BtCmd {
     // OTA指令 1开始, 0结束
     static otaCmd(value) {
         return this._build(CmdBase.heiJiaoOta, [value]);
-    } static otaData(value) {
+    }
+    //
+    static wifiUrl(value) {
+        return this._build(CmdBase.heiJiaoOta, [value]);
+    }
+    static otaData(value) {
         return this._build(CmdBase.heiJiaoOtaData, [value], true, false);
     }
     /// 获取设备型号指令
@@ -334,6 +339,7 @@ class BtCmd {
                 }
             } else {
                 cmd.concat(otherCmd);
+                console.log(`打印其他命令:${cmd}`);
             }
         }
 

+ 2 - 2
devices/bluetooth/bt_parse.js

@@ -499,10 +499,10 @@ class BtParse {
 
                 break;
             case CmdBase.heijiaoBackImg:
-                // [84, 68, 68, 72, 1, 10, 54, 2, 0, 1] 
+                // [54:44:44:48:01:0A:74:01:01:00]
                 {
                     let kind = cmd[9]
-                    EventManager.fire(CmdEvent.otaCmd({ value: value, kind: kind }));
+                    EventManager.fire(CmdEvent.otaUrl({ value: value, kind: kind }));
 
                 }
 

+ 4 - 0
devices/bt_helper.js

@@ -770,6 +770,10 @@ class BtHelper {
   otaCmd(value) {
     this.send(BtCmd.otaCmd(value));
   }
+  // OTA指令
+  wifiUrl(value) {
+    this.send(BtCmd.otaCmd(value));
+  }
   otaData(value, callback) {
     BtHelper.sendCallBack(BtCmd.otaData(value), callback);
   }

+ 8 - 0
devices/cmd_key_event.js

@@ -47,6 +47,7 @@ const EnumCmdEvent = {
     authSleepStatus: 'authSleepStatus',
     btMac: 'btMac',
     otaCmd: 'otaCmd',
+    otaUrl: 'otaUrl',
     wallpaper: 'wallpaper'
 };
 
@@ -124,6 +125,7 @@ class CmdEvent {
         this.btMac = null;
         this.deviceMode = null;
         this.otaCmd = null;
+        this.otaUrl = null;
         this.heiJiaoKind = null;
         this.wallpaper = null;
     }
@@ -338,6 +340,12 @@ class CmdEvent {
         event.heiJiaoKind = kind;
         return event;
     }
+    static otaUrl({ value, kind }) {
+        const event = new CmdEvent({ cmdEvent: EnumCmdEvent.otaUrl });
+        event.otaUrl = value;
+        event.heiJiaoKind = kind;
+        return event;
+    }
     static wallpaper({ value, kind }) {
         const event = new CmdEvent({ cmdEvent: EnumCmdEvent.wallpaper });
         console.log("wallpaper:", value, kind)

+ 56 - 22
pages/ota/ota.js

@@ -1,6 +1,6 @@
 const { BtHelper } = require("../../devices/bt_helper");
 import { EnumCmdEvent, CmdEvent } from '../../devices/cmd_key_event';
-import EventManager from '../../utils/event_bus'
+import EventManager, { addNotification } from '../../utils/event_bus'
 // pages/OTA/ota.js
 Page({
 
@@ -112,6 +112,14 @@ Page({
   sendWiFiInfo(wifiName, pwd) {
     // [0x22, (wifiList.length + pwdList.length + 6), 0x33, (wifiList.length), (wifiList), 0x44, (pwdList)];
 
+    if (!wifiName || !pwd) {
+      wx.showToast({
+        title: '请输入正确的账号密码',
+      })
+      wx.hideLoading()
+      return;
+    }
+
     let result = [];
 
     // 字母*6 +
@@ -160,6 +168,11 @@ Page({
     console.log("string转换为List<int>", code)
     return code
   },
+
+  // List<int>转换为string
+  listInt2String(data) {
+    return String.fromCharCode(...data);
+  },
   startDownloadFile() {
 
     var urlPath = this.data.otaData.url ?? "";
@@ -371,48 +384,69 @@ 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()
+            // 设备收到开启OTA的回复,开始发送wifi信息
+            _this.sendWiFiInfo()
           } else if (otaCmd === 0 && kind == 1) {
-            // 发送结束
-            _this.endOta(0)
+            // 设备回收到url,OTA结束了
+            // _this.endOta(0)
+            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)