OTA V3 android SDK¶
1. 集成¶
1.1 Gradle拉取配置¶
allprojects {
repositories {
maven {
url 'https://maven.aliyun.com/repository/public'
}
maven {
credentials {
username '65a890ad4f41789f56425965'
password 'Y-kxYEyTl5)['
}
url 'https://packages.aliyun.com/maven/repository/2457536-release-P0YgD8/'
}
}
}
1.2 sdk集成¶
implementation 'com.sifli:siflicore:1.2.21'
implementation 'com.sifli:siflisol2model:2.2.19'
implementation 'com.sifli:sifliotasdk:2.3.0'
2. 接口调用¶
2.1 接口初始化¶
初始化 SFOtaV3Manager以及回调
private SFOtaV3Manager otaManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_otav3);
...
this.otaManager = SFOtaV3Manager.getInstance();
this.otaManager.setCallback(this);
this.init(context,SFTransmissionMode.TRANSMISSION_MODE_BLE);
...
}
2.2 资源传输¶
调用otaManager如下方法
/**
* 资源传输接口
* @param mac 蓝牙设备地址
* @param otaV3Type 0-表盘, 1-多语言, 2-背景图, 3-自定义, 4-音乐, -JS, 8-4G模块, 9-GUIBuilder 表盘
12-GUIBuilder App, 13-GUIBuilder扩展资源。其它类型查阅文档
* @param resourceFile 资源文件信息
* @param tryResume 尝试重传
* */
public void startOtaV3(String mac,
int otaV3Type,
OtaV3ResourceFileInfo resourceFile,
boolean tryResume)
OtaV3ResourceFileInfo 资源文件结构
public abstract class OtaV3FileInfo {
private String filePath;
private int fileType;
protected OtaV3FileInfo(int fileType, String filePath){
this.fileType = fileType;
this.filePath = filePath;
}
public int getFileType() {
return fileType;
}
public String getFilePath() {
return filePath;
}
public boolean isFilePathNullOrEmpty(){
return StringUtil.isNullOrEmpty(this.filePath);
}
}
public class OtaV3ResourceFileInfo extends OtaV3FileInfo {
/**是否需要字节对齐&添加crc*/
private boolean withByteAlign;
public OtaV3ResourceFileInfo(int fileType,
String filePath,
boolean withByteAlign) {
super(fileType, filePath);
this.withByteAlign = withByteAlign;
}
public boolean isWithByteAlign() {
return withByteAlign;
}
}
2.3 固件传输¶
调用如下方法
/**
* 固件升级
* @param mac 设备地址
* @param resourceFile 差分包文件描述信息
* @param imageFiles image file,包含ctrlpacket.bin在内。
* @param tryResume 是否为续传
* */
public void startOtaV3(String mac,
OtaV3ResourceFileInfo resourceFile,
ArrayList<OtaV3BinFileInfo> imageFiles,
boolean tryResume){
OtaV3BinFileInfo 固件升级文件信息
public class OtaV3BinFileInfo extends OtaV3FileInfo {
/**
* @see com.sifli.sifliotasdk.modules.nand.model.NandImageID
* @see com.sifli.sifliotasdk.modules.nor.NorImageID
* */
private int imageId;
/**
*新地址(十六进制字符串,大端书写,即人类习惯的地址值)
*
* 填写规则:
* - 按地址值的大端书写习惯填入,例如地址 0x87654321 填 @"87654321";
* - 不要带 "0x" 前缀、空格或分隔符,仅 0-9A-Fa-f;
* - 建议正好 8 位(不足 8 位 SDK 会自动左补 0,超过 8 位报错);
* - 留空/nil 表示地址 0。
*
* 说明:SDK 内部会将此大端书写值转换为小端序写入通信包(wire 字节为
* 0x21 0x43 0x65 0x87),MCU 侧可直接按 uint32 读取得到 0x87654321。
* */
private String hexNewAddr;
public OtaV3BinFileInfo(int fileType, String filePath, int imageId) {
super(fileType, filePath);
this.imageId = imageId;
}
public OtaV3BinFileInfo(int fileType, String filePath, int imageId,String hexNewAddr) {
super(fileType, filePath);
this.imageId = imageId;
this.hexNewAddr = hexNewAddr;
}
public int getImageId() {
return imageId;
}
public String description(){
return String.format("{path=%s,imageID=%d}",this.getFilePath(),this.getImageId());
}
public String getHexOffset() {
return hexNewAddr;
}
}