用户可以参考使用OTA更新功能。
此演示工程展示以下功能:
1)OTA接口演示;
1)下载地址:工程:OTA_customer.rar
2)导入工程:下载后解压,再导入到ApusIDE工作空间打开,具体操作请参考“项目导入”。
3)同步项目头文件
1)在ARM下读取屏幕ota配置文件信息:
#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接口演示:
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:
IRuntime * runtime = getRuntime();
// 获取 OTAEvent 的单例实例
OTAEvent* OTA_handel= OTAEvent::getInstance(runtime);
通知ota进程更新配置信息Config_Event:
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:
/*手动更新*/
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:
pm->getMessageBox("正在检查更新...",MSGBOX_TYPE::TIP)->show();
otaEvent->Cancel_Event();//下载任务已取消
更新(重启)Upgrade_Event:
int otastatus = 0;
vm->getInt("$otastatus",otastatus);
if(otastatus==200){
pm->getMessageBox("_L(\"设备重启中..\")")->show();
OTA_handel->Upgrade_Event();//重启
return;
}
获取更新getUpgrade:
//一键更新
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();