4G_module/include/cmiot/cm_fota.h

220 lines
11 KiB
C
Raw Normal View History

2024-09-02 17:54:29 +08:00
/**
* @file cm_fota.h
* @brief FOTA
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
* @author
* @date
*
* @defgroup fota fota
* @ingroup FOTA
* @{
*/
/*----------------------------------------------------------------------------*
** Dependencies *
**----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*
** Mcaro Definitions *
**----------------------------------------------------------------------------*/
#define CM_FOTA_STRING_LEN 48
#define CM_FOTA_LONG_STRING_LEN 256
#define CM_FOTA_FIXED_RESERVED_LEN (512 - 8 - CM_FOTA_LONG_STRING_LEN - 2 * CM_FOTA_STRING_LEN)
/*----------------------------------------------------------------------------*
** Data Structures *
**----------------------------------------------------------------------------*/
/**
* FOTA相关结构体
*/
typedef enum
{
CM_FOTA_CMIOT_ERROR_UNKNOW = 850,
CM_FOTA_CMIOT_ERROR_CONFIG_FILE,
CM_FOTA_CMIOT_ERROR_URL_TYPE,
CM_FOTA_CMIOT_ERROR_WRITE_CONFIG,
CM_FOTA_CMIOT_ERROR_UPDATE,
CM_FOTA_CMIOT_ERROR_DOWNLOAD,
CM_FOTA_CMIOT_ERROR_DOWNLOAD_MAX_RETRY,
CM_FOTA_CMIOT_ERROR_NO_NETWORK
} cm_fota_error_e;
typedef enum
{
CM_FOTA_ASR_PLAN_INVALID = 0, /*!< 不可用 */
CM_FOTA_ASR_PLAN_MINI_INTEGRATE, /*!< ASR 整包 mini FOTA方案推荐用户使用该方案 */
CM_FOTA_ASR_PLAN_MINI, /*!< ASR 2包 mini FOTA方案兼容老用户方案新用户不建议使用该方案 */
CM_FOTA_ASR_PLAN_PRO /*!< ASR PRO FOTA方案不支持 */
} cm_fota_asr_plan_e;
typedef enum
{
CM_FOTA_TYPE_INVALID = 0,
CM_FOTA_TYPE_FTP,
CM_FOTA_TYPE_HTTP_HTTPS
} cm_fota_url_type_e;
typedef enum
{
CM_FOTA_STAGE_NONE = 0, /*!< 无FOTA */
CM_FOTA_STAGE_START, /*!< 开始阶段,准备下载bin1文件 */
CM_FOTA_STAGE_BIN1_OTA, /*!< bin1文件下载完成,准备bootloader ota */
CM_FOTA_STAGE_BIN1_SUCC, /*!< bootloader ota完成,准备下载bin2文件 */
CM_FOTA_STAGE_ERR_ALLOW_RETRY, /*!< FOTA失败,重启后运行再次尝试,一般是下载出错,可能与网络相关 */
CM_FOTA_STAGE_SUCC, /*!< FOTA完成 */
CM_FOTA_INTEGRATE_STAGE_START, /*!< FOTA mini整包升级方案开始 */
CM_FOTA_INTEGRATE_STAGE_BIN2, /*!< FOTA mini整包升级方案开始下载bin2 */
CM_FOTA_STAGE_ERR /*!< FOTA失败 */
} cm_fota_stage_e;
/** 重启时间结构体类型
* FOTA机制为分别升级最小系统和应用APPFOTA升级需要经历4次重启 \n
* FOTA过程中任一阶段失败或超时cm_fota_set_reboot_time() \n
* FOTA的开始时间FOTA失败的时间158:30FOTA8:35FOTA失败8:45 \n
* 56 \n
* {510, 20, 30, 40, 50120}FOTA失败的场景下5FOTA1020304050120120120...
*/
typedef struct
{
int first_timeout; /*!< 单位分钟范围3分钟至3天3~3*24*60含义一次升级期间任一阶段升级失败或超时未完成时第一次尝试重启的超时时间 */
int second_timeout; /*!< 单位分钟范围3分钟至3天3~3*24*60含义一次升级期间任一阶段升级失败或超时未完成时第二次尝试重启的超时时间 */
int third_timeout; /*!< 单位分钟范围3分钟至3天3~3*24*60含义一次升级期间任一阶段升级失败或超时未完成时第三次尝试重启的超时时间 */
int fourth_timeout; /*!< 单位分钟范围3分钟至3天3~3*24*60含义一次升级期间任一阶段升级失败或超时未完成时第四次尝试重启的超时时间 */
int fifth_timeout; /*!< 单位分钟范围3分钟至3天3~3*24*60含义一次升级期间任一阶段升级失败或超时未完成时第五次尝试重启的超时时间 */
int sixth_timeout; /*!< 单位分钟范围3分钟至3天3~3*24*60含义一次升级期间任一阶段升级失败或超时未完成时第六次尝试重启的超时时间 */
int constant_timeout; /*!< 单位分钟范围3分钟至3天3~3*24*60含义一次升级期间任一阶段升级失败或超时未完成时第七次及之后的尝试重启的超时时间 */
} cm_fota_reboot_time;
typedef struct
{
int isSetTimeout; /*!< 用户是否设置重启时间。非0用户已成功设置0用户未设置或设置不合法采用默认参数 */
int failure; /*!< 失败次数 */
cm_fota_reboot_time timeout; /*!< 用户配置时间参数 */
} cm_fota_extendible_info_t;
typedef struct
{
cm_fota_stage_e stage; /*!< FOTA升级进行状态 */
cm_fota_url_type_e fota_mode; /*!< fota升级模式 */
char url[CM_FOTA_LONG_STRING_LEN]; /*!< 服务器url */
char username[CM_FOTA_STRING_LEN]; /*!< 用户名*/
char passwd[CM_FOTA_STRING_LEN]; /*!< 密码 */
char reserved[CM_FOTA_FIXED_RESERVED_LEN];
} cm_fota_info_fixed_t;
typedef struct
{
cm_fota_info_fixed_t fixed_info; /*!< FOTA配置保存NV固定部分结构 */
cm_fota_extendible_info_t extend_info; /*!< FOTA配置保存NV可扩展部分结构 */
} cm_fota_info_t; /*!< FOTA配置相关结构体:FOTA固定配置部分+FOTA可扩展配置部分 */
/*----------------------------------------------------------------------------*
** Function Define *
**----------------------------------------------------------------------------*/
/**
* @brief fota结果回调函数
*
* @param [in] error
*
* @details mini FOTA方案下fota出现错误时才会回调
*/
typedef void (*cm_fota_result_callback)(cm_fota_error_e error);
/**
* @brief FOTA服务器url
*
* @param [in] url url
*
* @return
* = 0 - \n
* -
*
* @details HTTP服务器FTP服务器256url中必须指定协议类型"ftp://xxx.com:23/update1.bin_1""http://xxx.com:8080/update2.bin_1" \n
* ML307A-DCLN ML307A-GCLN ML305A-DC支持HTTPHTTPS无证书校验ML307A-DSLN ML307A-GSLN ML305A-DS支持HTTPHTTPS无证书校验FTP下载方式FTPS下载方式 \n
* 使url中下载的文件名必须以.bin_1结尾.bin_1与.bin_2文件的名称必须一致system_patch.bin_1和system_patch.bin_2 \n
* 使url中下载的文件名无要求 \n
* FTP下载不支持ipv6方式使ipv6地址 \n
* url须为可以直接访问的服务器地址
*/
int cm_fota_set_url(char *url);
/**
* @brief FOTA服务器登录名和密码FTP方式
*
* @param [in] username
* @param [in] passwd
*
* @return
* = 0 - \n
* -
*
* @details FTP下载方式适用HTTP下载方式不适用
*/
int cm_fota_set_auth(const char *username, const char *passwd);
/**
* @brief FOTA失败时的下一次重启时间
*
* @param [in] time cm_fota_reboot_time结构体定义
*
* @return
* = 0 - \n
* -
*
* @details FOTA过程会分别升级最小系统和应用APP \n
* FOTA升级的时间FOTA失败的时间158:30FOTA8:35FOTA失败8:45 \n
* {510, 20, 30, 40, 50120}
*/
int cm_fota_set_reboot_time(cm_fota_reboot_time *time);
/**
* @brief FOTA服务器配置
*
* @param [out] cfg
*
* @details fota_modeurlusernamepasswdstage及其他
*/
void cm_fota_read_config(cm_fota_info_t *cfg);
/**
* @brief FOTA OTA升级方案
*
* @param [in] ota_plan : CM_FOTA_ASR_PLAN_MINI_INTEGRATE - mini整包方案, CM_FOTA_ASR_PLAN_MINI - mini双包方案
*
* @details mini整包方案
*/
void cm_fota_set_ota_plan(cm_fota_asr_plan_e ota_plan);
/**
* @brief FOTA OTA升级方案
*
* @return OTA升级方案
*/
cm_fota_asr_plan_e cm_fota_get_ota_plan(void);
/**
* @brief SDK注册fota结果回调
*
* @return void
*
* @details FOTA升级任务预校验时将结果反馈给SDK用户应用程序,callback可由客户定制 \n
* mini FOTA方案CM_FOTA_ASR_PLAN_MINI_INTEGRATE2 mini FOTA方案
*/
void cm_fota_res_callback_register(cm_fota_result_callback cb);
/**
* @brief mini system执行fota升级
*
* @return
* = 0 - \n
* < 0 -
*
* @details FOTA期间模组会重启4次 \n
* OpenCPU程序运行5秒中后再执行该接口 \n
* fota升级前url会进行文件系统操作url可能会失败使fota功能的用户在文件系统中至少留有4096字节剩余空间cm_fs_getinfo()
*/
int cm_fota_exec_upgrade(void);