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;
    }
}

3. 错误码

错误码参见android-sdk-error-code