b_mod_iap

详细介绍:

https://gitee.com/notrynohigh/BabyOS/wikis/BabyOS固件升级功能

数据结构

/**
 * IAP状态,IAP介绍文档中有状态的切换路径
 */
#define B_IAP_STA_NULL (0)
#define B_IAP_STA_START (1)
#define B_IAP_STA_READY (2)
#define B_IAP_STA_FINISHED (3)
#define IS_IAP_STA(s)                                                                   \
    (((s) == B_IAP_STA_NULL) || ((s) == B_IAP_STA_START) || ((s) == B_IAP_STA_READY) || \
     ((s) == B_IAP_STA_FINISHED))

#define B_IAP_FILENAME_LEN (64)    // 固件名的长度限制
#define B_IAP_FAIL_COUNT (3)       // 固件失败的次数限制
#define B_IAP_BACKUP_EN (0x55)     // 备份固件功能启用的标志
#define B_IAP_BACKUP_VALID (0xAA)  // 存在有效备份固件的标志

typedef struct
{
    char     name[B_IAP_FILENAME_LEN];  // 固件名,限制在64个字符
    uint32_t version;                   // 固件版本号
    uint32_t len;                       // 固件长度
    uint32_t crc;                       // 固件数据的校验值
    uint32_t crc_type;                  // CRC类型,参考algorithm/inc/algo_crc.h
} bIapFwInfo_t;

typedef struct
{
    uint8_t  flag;    // 备份标志,0xAA表示存在有效备份
    uint32_t fcrc;    // 备份区固件的crc32校验值
    uint32_t second;  // 运行多少秒后进行备份
} bIapBackupInof_t;

typedef struct
{
    int              stat;
    int              fail_count;
    uint32_t         cache_dev;
    uint32_t         backup_dev;
    bIapFwInfo_t     info;
    bIapBackupInof_t backup;
    uint32_t         percentage;
    uint32_t         fcrc;       //crc
} bIapFlag_t;