菜单

OTA功能演示demo

下载

1 概述

用户可以参考使用OTA更新功能。

2 主要功能点

此演示工程展示以下功能:

1)OTA接口演示;

3 源码下载与导入

1)下载地址:工程:OTA_customer.rar

2)导入工程:下载后解压,再导入到ApusIDE工作空间打开,具体操作请参考“项目导入”。

3)同步项目头文件

4 源码解析

1)在ARM下读取屏幕ota配置文件信息:

C++ 复制代码
#include "util/StringUtil.h"
#include "util/FileUtil.h"
#include "op/EventMgr.h"
string sw,mode,nomen,url,uid,pwd,rule,current_version,upgrade_version;
IniFile* ini = iniFileUtil::load(OTA_CONFIG);
if(FileUtil::fileExists(OTA_CONFIG)){
  ini->readString(OTA_switch, sw, "0");
  ini->readString(OTA_nomen, nomen, "0");
  ini->readString(OTA_mode, mode, "0");
  ini->readString(OTA_url, url, "");
  ini->readString(OTA_uid, uid, "");
  ini->readString(OTA_pwd, pwd, "");
  ini->readString(OTA_rule, rule, "");
  ini->readString(Current_Version, current_version, "");
  ini->readString(Upgrade_Version, upgrade_version, "");
}else{
  sw = "0";
  mode = "0";
  nomen = "0";
  url = "";
  uid = "";
  pwd = "";
  rule = "";
  current_version = "";
  upgrade_version = "";
  ini->writeString(OTA_switch, sw);
  ini->writeString(OTA_nomen, nomen);
  ini->writeString(OTA_mode, mode);
  ini->writeString(OTA_url, url);
  ini->writeString(OTA_uid, uid);
  ini->writeString(OTA_pwd, pwd);
  ini->writeString(OTA_rule, rule);
  ini->writeString(Current_Version, current_version);
  ini->writeString(Upgrade_Version, upgrade_version);
}
iniFileUtil::free(ini);
vm->setChar("工程版本",current_version);
vm->setInt("OTA开启", stoi(sw));
vm->setChar("OTA服务器地址", url);
vm->setChar("OTA用户名", uid);
vm->setChar("OTA密码", pwd);
vm->setInt("自动更新模式", stoi(mode));

2)OTA接口演示:

C++ 复制代码
class OTAEvent{
public:
    /**
     * 获取定时任务管理器实例
     * @return
     */
    static OTAEvent* getInstance(stt::IRuntime * rt);
    //通知ota进程更新配置信息
    void Config_Event();
    //下载更新包
    void Download_Event();
    //更新(重启)
    void Upgrade_Event();
    //取消下载
    void Cancel_Event();
    /**
     * @LEVEL1
     * @brief 获取更新
     * @return 0:运行 -1:OTA开关未开 -2:服务器url为空
     */
    int getUpgrade();
...
};

获取定时任务管理器实例getInstance:

C++ 复制代码
IRuntime * runtime = getRuntime();
// 获取 OTAEvent 的单例实例
OTAEvent* OTA_handel= OTAEvent::getInstance(runtime);

通知ota进程更新配置信息Config_Event:

C++ 复制代码
IniFile* ini = iniFileUtil::load(OTA_CONFIG);
ini->writeString(OTA_switch, sw);
ini->writeString(OTA_url, url);
ini->writeString(OTA_uid, uid);
ini->writeString(OTA_pwd, pwd);
// ini->writeString(OTA_nomen, "0");
ini->writeString(OTA_mode, mode);
ini->writeString(OTA_rule, rule);
// ini->writeString(Current_Version,_Current_Version);
// ini->writeString(Upgrade_Version,"");
iniFileUtil::free(ini);
OTA_handel->Config_Event();

下载更新包Download_Event:

C++ 复制代码
/*手动更新*/
if (wMMSwitch1->getState()=="0"){
pm->getMessageBox("_L(\"OTA功能未开启\")")->show();
return;
}
int _OTAStatus;
vm->getInt(SysVar::OTAStatus, _OTAStatus);
if(_OTAStatus==200){
pm->getMessageBox("_L(\"设备重启中..\")")->show();
otaEvent->Upgrade_Event();//重启
return;
}
string url = wMText1->getText();
if (url.size()<1){
pm->getMessageBox("_L(\"服务器地址不能为空!\")")->show();
return;
}
pm->getMessageBox("正在检查更新...",MSGBOX_TYPE::TIP)->show();
otaEvent->Download_Event();//下载更新包

取消下载Cancel_Event:

C++ 复制代码
pm->getMessageBox("正在检查更新...",MSGBOX_TYPE::TIP)->show();
otaEvent->Cancel_Event();//下载任务已取消

更新(重启)Upgrade_Event:

C++ 复制代码
int otastatus = 0;
vm->getInt("$otastatus",otastatus);
if(otastatus==200){
    pm->getMessageBox("_L(\"设备重启中..\")")->show();
    OTA_handel->Upgrade_Event();//重启
    return;
}

获取更新getUpgrade:

C++ 复制代码
//一键更新
int r = OTA_handel->getUpgrade();
if(r==-1)
    pm->getMessageBox("OTA开关未开",MSGBOX_TYPE::TIP)->show();
else if(r==-2)
    pm->getMessageBox("服务器url为空",MSGBOX_TYPE::TIP)->show();
else
    pm->getMessageBox("正在检查更新...",MSGBOX_TYPE::TIP)->show();
上一个
双路视频流播放
下一个
曲线图显示波形
最近修改: 2025-06-30Powered by