固件升级

更新时间:2021-11-26 09:21:22下载pdf

固件升级分为 设备升级MCU 升级 两种,固件升级主要用于迭代设备功能以及修复功能缺陷。

初始化固件信息

接口说明

Wi-Fi 设备、Zigbee 网关、摄像头等设备的固件初始化接口。

ITuyaOta newOTAInstance(String devId);

参数说明

参数 说明
devId 设备 ID

实例代码

ITuyaOta iTuyaOta = TuyaHomeSdk.newOTAInstance("devId");

初始化子设备固件信息

接口说明

ITuyaOta newOTAInstance(String meshId, String devId, String nodeId);

参数说明

参数 说明
meshId Zigbee 网关 ID
devId Zigbee 子设备 ID
nodeId Zigbee 子设备 Mac 地址,可以从子设备的 DeviceBean 查询

实例代码

ITuyaOta iTuyaOta = TuyaHomeSdk.newOTAInstance("meshId", "devId", "nodeId");

查询固件升级信息

接口说明

iTuyaOta.getOtaInfo(new IGetOtaInfoCallback({
	@Override
	void onSuccess(List<UpgradeInfoBean> list) {

	}
	@Override
	void onFailure(String code, String error) {

	}
});

UpgradeInfoBean 参数说明

字段 类型 描述
upgradeStatus int 升级状态
  • 0:无新版本
  • 1:有新版本
  • 2:在升级中
version String 最新版本
currentVersion String 当前版本
timeout int 超时时间,单位:秒
upgradeType int 升级方式
  • 0:App 提醒升级
  • 2:App 强制升级
  • 3:检测升级
type int 待升级设备
  • 0:Wi-Fi 设备
  • 1:蓝牙设备
  • 2:GPRS 设备
  • 3:Zigbee 设备
  • 9:MCU
typeDesc String 模块描述
lastUpgradeTime long 上次升级时间,单位:毫秒

添加固件升级监听

接口说明

iTuyaOta.setOtaListener(new IOtaListener() {
		@Override
		public void onSuccess(int otaType) {

		}

		@Override
		public void onFailure(int otaType, String code, String error) {

		}

		@Override
		public void onFailureWithText(int otaType, String code,
									OTAErrorMessageBean messageBean) {

		}

		@Override
		public void onProgress(int otaType, int progress) {

		}

		@Override
		public void onTimeout(int otaType) {

		}

		@Override
		public void onStatusChanged(int otaStatus, int otaType) {
			// 3.23.0 版本新增,针对于低功耗类设备会通过该方法返回设备等待唤
                        // 醒状态。此时 otaStatus 参数返回 5

		}
});

参数说明

参数 描述
otaType 升级的设备类型,参考 UpgradeInfoBean 中的 type 字段

开始升级

调用该方法开始升级,调用后注册的 OTA 监听会返回升级状态,以便您构建界面 UI。

接口说明

iTuyaOta.startOta();

结束升级

接口说明

离开升级页面后要结束进程,回收内存。

iTuyaOta.onDestory();

完整示例

本章节示例为常见的 Wi-Fi 设备固件升级流程,蓝牙单点及蓝牙 Mesh 请参考 蓝牙技术体系 中对应的章节。

private ITuyaOta iTuyaOta;
private String mDevId = "your_devId";

public void startOTA() {
		initOta();
		initListener();
		checkOTAInfo();
		}

//初始化固件信息
private void initOta() {
		iTuyaOta = TuyaHomeSdk.newOTAInstance(mDevId);
		}

//添加固件升级监听
private void initListener() {
		iTuyaOta.setOtaListener(new IOtaListener() {
@Override
public void onSuccess(int otaType) {
		iTuyaOta.onDestroy();
		Log.i(TAG, "upgrade success");
		}

@Override
public void onFailure(int otaType, String code, String error) {
		iTuyaOta.onDestroy();
		Log.i(TAG, "upgrade failure, errorCode = " + code
                        + ",errorMessage = " + error);
		}

@Override
public void onFailureWithText(int otaType, String code, OTAErrorMessageBean messageBean) {
		iTuyaOta.onDestroy();
		Log.i(TAG, "upgrade failure, errorCode = " + code
                        + ",errorMessage = " + messageBean.text);
		}

@Override
public void onProgress(int otaType, int progress) {
		Log.i(TAG, "upgrade progress = " + progress);
		}

@Override
public void onTimeout(int otaType) {
		iTuyaOta.onDestroy();
		Log.i(TAG, "upgrade timeout");
		}

@Override
public void onStatusChanged(int otaStatus, int otaType) {

		}
		});
		}

//查询固件升级信息
private void checkOTAInfo() {
		iTuyaOta.getOtaInfo(new IGetOtaInfoCallback() {
@Override
public void onSuccess(List<UpgradeInfoBean> upgradeInfoBeans) {
		if (hasHardwareUpdate(upgradeInfoBeans)) {
		//开始升级
		iTuyaOta.startOta();
		}
		}

@Override
public void onFailure(String code, String error) {
		Log.i(TAG, "Get OTA info failed,errorCode=" + code
                        + ",errorMessage=" + error);
		}
		});
		}

private boolean hasHardwareUpdate(List<UpgradeInfoBean> list) {
		if (null == list || list.size() == 0)
		return false;
		for (UpgradeInfoBean upgradeInfoBean : list) {
		if (upgradeInfoBean != null && upgradeInfoBean.getUpgradeStatus() == 1)
		return true;
		}
		return false;
		}