OTA服务

更新时间:2018-05-02 10:20:40

FOTA服务支持mqtt、coap、alink等协议连接阿里云,使用fota之前请确保至少启动了mqtt、coap、alink其中一种。

启动FOTA服务

启动FOTA服务无需其他的初始化代码,只需要在连接上阿里云之后,调用该函数启动FOTA服务即可。

aos_post_event(EV_SYS, CODE_SYS_ON_START_FOTA, 0u);

FOTA 回调函数

当启动了FOTA服务之后,系统会自动和云端交互。当有固件需要更新的时候,FOTA服务会自动从云端下载固件,然后通过FOTA的回调函数写入固件到flash中。
所以通过实现平台相关的的FOTA的回调函数就可以对接上FOTA功能。FOTA回调函数的实现代码位于platform/mcu/xxx/hal/ota_port.c中。

FOTA回调函数的声明:

struct hal_ota_module_s {
    hal_module_base_t base;

    /* Link to HW */
    int (*init)(hal_ota_module_t *m, void *something);
    int (*ota_write)(hal_ota_module_t *m, volatile uint32_t *off_set,
                     uint8_t *in_buf , uint32_t in_buf_len);
    int (*ota_read)(hal_ota_module_t *m,  volatile uint32_t *off_set,
                    uint8_t *out_buf , uint32_t out_buf_len);
    int (*ota_set_boot)(hal_ota_module_t *m, void *something);
};

这些回调函数一般在platform/mcu/xxx/hw.c中的hw_start_hal()函数中注册到ota服务中:

hal_ota_register_module(&esp8266_ota_module);

其中esp8266_ota_module类型为struct hal_ota_module_s.


init

函数原型 int (*init)(hal_ota_module_t *m, void *something);
描述 当已经从服务器获取到最新固件,需要写入到flash时,会调用该函数进行一些平台相关的flash初始化,系统更新准备等操作。

请求参数

参数
类型
描述
备注
m
hal_ota_module_t *
hal_module_base_t 结构体句柄
something
void *
传递特定的参数
根据不同的平台,传递不同的参数

返回值

描述
0
初始化成功
-1
初始化失败

ota_write

| 函数原型 | int (*ota_write)(hal_ota_module_t *m, volatile uint32_t *off_set, uint8_t *in_buf , uint32_t in_buf_len);
|
| :--- | :--- |
| 描述 | 写入固件到flash |

请求参数

参数
类型
描述
备注
m
hal_ota_module_t *
hal_module_base_t 结构体句柄
off_set
volatile uint32_t *
指定flash地址的偏移量(offset)
in_buf
uint8_t *
需要写入的数据
in_buf_len
uint32_t
需要写入的数据长度

返回值

描述
0
写入数据成功
-1
写入数据失败

ota_read

FOTA一般情况下不会调用该回调函数从flash中读取固件数据

函数原型 int (*ota_read)(hal_ota_module_t *m, volatile uint32_t *off_set,uint8_t *out_buf , uint32_t out_buf_len);
描述 从flash中读取数据到buffer中

请求参数

参数
类型
描述
备注
m
hal_ota_module_t *
hal_module_base_t 结构体句柄
off_set
volatile uint32_t *
指定flash地址的偏移量(offset)
out_buf
uint8_t *
读取flash数据到该buf中
out_buf_len
uint32_t
需要读取的数据长度

返回值

描述
0
读取数据成功
-1
读取数据失败

ota_set_boot

函数原型 int (*ota_set_boot)(hal_ota_module_t *m, void *something);
描述 设置启动参数

请求参数

参数
类型
描述
备注
m
hal_ota_module_t *
hal_module_base_t 结构体句柄
something
void *
更新完成参数
推荐的更新完成参数请参考下面的说明

更新完成参数

推荐的更新完成参数的结构体定义如下:

typedef struct  {
    OTA_ENUM_UPDATE_TYPE update_type;
    OTA_ENUM_RESULT_TYPE result_type ;
} ota_finish_param_t;

详细说明:

update_type
OTA_KERNEL
更新内核
OTA_APP
更新app
OTA_ALL
更新内核和app
result_type
OTA_FINISH
更新完成
OTA_BREAKPOINT
更新中断

返回值

描述
0
设置成功
-1
设置失败

results matching ""

    No results matching ""