#ifndef __TWAI_OTA_H #define __TWAI_OTA_H #include #include "esp_partition.h" #include "esp_ota_ops.h" #define CONFIG_EXAMPLE_GPIO_DIAGNOSTIC (3) #define OTA_BUFFSIZE (1024) #define HASH_LEN 32 /* SHA-256 digest length */ #define OTA_ERR_OFFSET 0xAA00 typedef enum { OTA_OK = 0, OTA_PARAM_ERROR = OTA_ERR_OFFSET | 1, OTA_GET_PARTITION_ERROR, OTA_HEADER_CHECK_ERROR, OTA_BEGIN_FUN_ERROR, OTA_WRITE_FUN_ERROR, OTA_END_FUN_ERROR, OTA_SET_BOOT_PARTITION_ERROR, } ota_err_t; typedef struct { esp_ota_handle_t update_handle; esp_partition_t *update_partition; bool image_header_was_checked; int img_header_size; int img_header_app_desc_offset; int buf_len; uint8_t buf[OTA_BUFFSIZE]; // buf的主要用途是:twai每次8个字节,在开始时因为需要进行校验,所以不能把读入的直接写入分区,应先存着进行校验 long long binary_file_length; } ota_ctrl_t; void ota_init(void); ota_err_t ota_enter_command(void); ota_err_t ota_image_header_check_and_start(void); ota_err_t ota_download_data_in(uint8_t *data, int len); ota_err_t ota_download_finish_command(void); char *ota_read_versions(void); #endif