IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 小程序_OTA升级的一些情况说明 -> 正文阅读

[移动开发]小程序_OTA升级的一些情况说明

序:由于蓝牙设备产品已经成型,不可能再将产品中的蓝牙设备拆开来拿去烧录升级,所以只能通过小程序蓝牙连接设备再进行OTA升级。

一、设备分两种模式:APP模式,OTA模式;

二、升级的流程(肯定有差别,但是大同小异)

1、一般会先连接目标设备,根据对应服务(一个设备一般会有两个服务通道:server1server2)获取对应的特征(一个服务一般有两个特征,打印一下就知道了),正常情况下,我们一般会用的一个 server1?和其对应的特征去读写数据、监听数据,那么另一个 server2 和其对应的特征一般就是进入OTA模式读写数据、监听数据的;

2、从APP模式进入OTA模式之前,要根据设备文档来,最好要问设备那边需不需要密码,要的话,输入密码、进入OTA模式的协议也要问明白,肯定是走 server2 写入数据到设备的;

3、要问清进入OTA模式的设备名称是什么,进入OTA模式后,一般会断开连接,可能 设备名称 和 设备的MAC地址 或者 uuid 都会发生改变(看设备那边),重新搜索根据设备名过滤再重新连接上;

4、固件包大致有几种格式:zip、bin、hex,hex16 等等…,这些固件包的格式并不适合小程序使用,所以就需要后端整理数据了,这个是麻烦事,都要用到后端,第一种,包比较小的,可以从后端整理数据后生成一个 xxx.js 的文件(300K之内),第二种,从后端传文件整理后的数据;

5、比如:xxx.hex16 文件下某个数据段,这个并不是蓝牙可需要的数据,标红的是摘取的数据段拼接成一个partition,还要计算长度,根据 run_address 和长度的规则计算出 flash_address,拼接成 一条指令,是在发partition 数据之前;这些都是在后端操作;

:1000C00003B40148019001BD691F000003B4014859

6、然后就是往设备写数据了,整个文件分5个partition,发送partition数据前,计算长度和校验等发送一条指令;发送一段20个字节的数据,一段一段的传,发完16段 监听回应匹配数据,发完一个partition 监听回应匹配数据;发完匹配对应的参数就清楚是哪里,什么时候是完成了;

7、升级完成,设备会断开连接或需要重新启动;如果过程中升级失败,设备会回到升级前版本并退出升级模式或会停留在OTA模式,这个看设备那边怎么定的;

例子:在 wx.onBluetoothDeviceFound() 这里获取对应的设备数据 判断是否升级 (获取当前的 MAC +1 与进入ota模式的 MAC 是否匹配,判断是否进入ota模式,可要可不要)

scanDevices() {
  let that = this;
  const data = {};
  wx.onBluetoothDeviceFound((res) => {
    res.devices.forEach(device => {
      if (!device.name && !device.localName) { return; } // 过滤命名为空的数据
      // 设备过滤
      if(device.name.indexOf("XXXX") != -1){
        let values = new Uint8Array(device.advertisData);
        // values[num] 要与设备的软件工程师沟通
        if(values[12] != 1){
          var otaMacArray = new Uint8Array(6);  // 进入OTA模式时,目标MAC地址+1
          for(var i = 0; i < 6; i++){
            otaMacArray[i] = values[i+2];
            if(i==5){
              otaMacArray[i] = (values[i+2]+1)%256;
            }
          }
          app.globalData.otaModelMac = otaMacArray; // 存放到去全局
          that.setData({
            deviceNeedOTA: true, // 需要升级
          })
        }else{
          app.globalData.otaModelMac = "";
          that.setData({
            deviceNeedOTA: false, // 不需要升级
          })
        }
        const foundDevices = this.data.deviceList;
        const idx = inArray(foundDevices, 'deviceId', device.deviceId);
        if (idx === -1) {
          data[`deviceList[${foundDevices.length}]`] = device
        } else {
          data[`deviceList[${idx}]`] = device
        }
        that.setData(data);
      }
    })
  })
}
function inArray(arr, key, val) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i][key] === val) {
      return i;
    }
  }
  return -1;
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:53:18  更:2022-10-08 20:55:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 4:08:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码