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.1.7'
 implementation 'com.sifli:sifliotasdk:2.0.8'

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.otaManager.init(this.getApplication());
     	 ...
    }

2.2 资源传输

调用otaManager如下方法

/**
     * 资源传输接口
     * @param mac 蓝牙设备地址
     * @param otaV3Type 0-表盘,1-多语言,2-背景图,3-自定义,4-音乐,5-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;
    /**偏移地址*/
    private String hexOffset;

    public OtaV3BinFileInfo(int fileType, String filePath, int imageId) {
        super(fileType, filePath);
        this.imageId = imageId;
    }
    public OtaV3BinFileInfo(int fileType, String filePath, int imageId,String hexOffset) {
        super(fileType, filePath);
        this.imageId = imageId;
        this.hexOffset = hexOffset;
    }

    public int getImageId() {
        return imageId;
    }

    public String description(){
        return String.format("{path=%s,imageID=%d}",this.getFilePath(),this.getImageId());
    }

    public String getHexOffset() {
        return hexOffset;
    }
}

3.错误码

错误码参见上一级 OTA V3 错误码