7 Star 3 Fork 3

yocop/fota

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

空中下载软件服务(FOTA)

概述

YoC定义了一个FOTA任务用于维护FOTA新版本检测、状态机转换维护和下载控制,抽象了netio用于固件包的下载保存。即:

  1. 新版本检测
  2. 新版本固件包(差分、全量)下载

FOTA流程与状态

FOTA模块设计了4个状态转化:

  • FOTA_INIT

  • FOTA_DOWNLOAD

  • FOTA_STOP

  • FOTA_FINISH

用户启动FOTA后状态为FOTA_INIT,当检测到新版本时,转入FOTA_DOWNLOAD状态,并开始下载固件包。下载失败之后会重新下载或者复位下载流程,取决于重试次数(retry count)。 用户可以通过自定义的方式(添加fota_event_cb回调函数)来根据FOTA在各个阶段报出的事件来执行相应的动作(fota event层),事件回调函数返回值代表不同的含义:

  • 0: 处理完用户事件后继续原先的默认流程;

  • 非零: 处理完用户事件后不会继续原先的默认流程,此时用户需要定义自己的流程去向。

用户定义代码示例如下:

static int fota_event_cb(void *arg, fota_event_e event) //return 0: still do the default handle      not zero: only do the user handle
{
    fota_t *fota = (fota_t *)arg;
    switch (event) {
        case FOTA_EVENT_VERSION:
            LOGD(TAG, "FOTA VERSION :%x", fota->status);
            break;

        case FOTA_EVENT_START:
            LOGD(TAG, "FOTA START :%x", fota->status);
            break;

        case FOTA_EVENT_FAIL:
            LOGD(TAG, "FOTA FAIL :%x", fota->status);
            break;

        case FOTA_EVENT_FINISH:
            LOGD(TAG, "FOTA FINISH :%x", fota->status);
            break;

        default:
            break;
    }
    return 0;
}

FOTA 平台对接

FOTA框架支持接入不同的FOTA云平台。如: COP、COAP 不同的FOTA平台需要通过对接fota_cls,实现该结构体的操作。

typedef struct fota_cls {
const char *name;
int (*init)(void);
int (*version_check)(fota_info_t *info);
int (*finish)(void);
int (*fail)(void);
} fota_cls_t;

通过int fota_register(const fota_cls_t *cls)接口注册。

FOTA 下载

FOTA框架对FOTA下载和存放进行了抽象,形成netio 类,用于可通过netio类来对接不同的下载和存放方式,例如对接ftp下载方式,对接新的 uart 存放方式等。 通过实现结构体 netio_cls 来对接

struct netio_cls {
const char *name;
int (*open)(netio_t *io, const char *path);
int (*close)(netio_t *io);
int (*read)(netio_t *io, uint8_t *buffer, int length, int timeoutms);
int (*write)(netio_t *io, uint8_t *buffer, int length, int timeoutms);
int (*remove)(netio_t *io);
int (*seek)(netio_t *io, size_t offset, int whence);
};

用户需要实现 netio_cls 接口的 open、close、read、write、remove、seek接口,并通过netio_register接口注册进FOTA。

FOTA 升级

固件下载完毕之后会设备会重启进入固件升级模式,等待升级完毕之后设备正常启动。一个完整的FOTA流程结束。

组件安装

yoc init
yoc install fota

配置

无。

接口列表

函数 说明
fota_do_check 强制检测版本
fota_start 创建FOTA服务
fota_stop 停止FOTA功能,退出FOTA服务
fota_config 配置FOTA参数
fota_set_auto_check 设置是否自动不断检测服务器固件版本并升级的功能
fota_get_auto_check 获取是否自动检测判断
fota_get_status 获取升级状态
fota_open fota初始化
fota_close 关闭FOTA功能,释放所有资源
fota_register_cop 注册为cop平台,即从cop平台下载固件
fota_register 注册平台接口

接口详细说明

fota_do_check

void fota_do_check(fota_t *fota);

  • 功能描述:

    • 强制检测版本。
  • 参数:

    • fota: fota 句柄。
  • 返回值:

    • 0: 检测成功。
    • 1: 检测失败。

fota_start

int fota_start(fota_t *fota);

  • 功能描述:

    • 创建FOTA服务。
  • 参数:

    • fota:fota 句柄。
  • 返回值:

    • 0: 创建FOTA服务成功。
    • 1: 创建FOTA服务失败。

fota_stop

int fota_stop(fota_t *fota);

  • 功能描述:

    • 停止FOTA功能,退出FOTA服务。
  • 参数:

    • fota: fota 句柄。
  • 返回值:

    • 0: 成功。
    • 1: 失败。

fota_config

void fota_config(fota_t *fota, fota_config_t *config);

  • 功能描述:

    • 配置FOTA参数。
  • 参数:

    • fota: fota 句柄。
    • config: 配置数据。
  • 返回值:无

fota_set_auto_check

void fota_set_auto_check(fota_t *fota, int enable);

  • 功能描述:

    • 设置是否自动不断检测服务器固件版本并升级的功能。
  • 参数:

    • fota: fota 句柄。
    • enable: 使能标记。
  • 返回值:无。

fota_get_auto_check

int fota_get_auto_check(fota_t *fota);

  • 功能描述:

    • 获取是否自动检测判断。
  • 参数:

    • fota: fota 句柄。
  • 返回值:

    • 0: 表示不自动检测。
    • 1: 表示自动检测。

fota_get_status

fota_status_e fota_get_status(fota_t *fota);

  • 功能描述:

    • 获取升级状态。
  • 参数:

    • fota: fota 句柄。
  • 返回值:

    • fota_status_e类型。

fota_open

fota_t *fota_open(const char *fota_name, const char *dst, fota_event_cb_t event_cb);

  • 功能描述:

    • fota初始化。
  • 参数:

    • fota_name:FOTA平台名字,比如"cop"。
    • dst:差分包存储url。
    • event_cb:用户事件回调。
  • 返回值:

    • 非空: fota句柄。
    • NULL: 失败。

fota_close

int fota_close(fota_t *fota);

  • 功能描述:

    • 关闭FOTA功能,释放所有资源。
  • 参数:

    • fota:fota 句柄。
  • 返回值:

    • 0: 关闭FOTA成功。
    • 1: 关闭FOTA失败。

fota_register_cop

int fota_register_cop(void);

  • 功能描述:

    • 注册为cop平台,即从cop平台下载固件。
  • 参数:

    • 无。
  • 返回值:

    • 0: 注册cop成功。
    • 1: 注册cop失败。

fota_register

int fota_register(const fota_cls_t *cls);

  • 功能描述:

    • 注册平台接口。
  • 参数:

    • cls:不同平台实现的接口集合,具体实现接口见fota_cls_t
  • 返回值:

    • 0: 注册平台接口成功。
    • 1: 注册平台接口失败。

示例

FOTA初始化示例

cop平台FOTA模块的初始化过程:

void app_fota_init(void)
{
    int ret;
    LOGI(TAG, "======> %s\r\n", aos_get_app_version());
    int fota_en = 1;
    ret = aos_kv_getint(KV_FOTA_ENABLED, &fota_en);
    if (ret == 0 && fota_en == 0) {
        return;
    }

    fota_register_cop();
    netio_register_http();
    netio_register_flash();
    g_fota_handle = fota_open("cop", "flash://misc", fota_event_cb);
    g_fota_handle->auto_check_en = 1;
    g_fota_handle->sleep_time = 60000;
    g_fota_handle->timeoutms = 10000;
    g_fota_handle->retry_count = 0;
    fota_start(g_fota_handle);
    }

诊断错误码

无。

运行资源

无。

依赖资源

  • csi
  • aos

组件参考

无。

空文件

简介

空中下载软件服务 展开 收起
C
取消

发行版 (2)

全部
4年前

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yocop/fota.git
git@gitee.com:yocop/fota.git
yocop
fota
fota
master

搜索帮助