mirror of
https://github.com/jialexd/sdk-ameba-v4.0c_180328.git
synced 2024-11-28 09:10:28 +00:00
210 lines
6.8 KiB
C
210 lines
6.8 KiB
C
|
/**
|
||
|
******************************************************************************
|
||
|
* @file rtl8710b_ota.h
|
||
|
* @author
|
||
|
* @version V1.0.0
|
||
|
* @date 2016-05-17
|
||
|
* @brief This file provides firmware functions to manage the OTA functions.
|
||
|
******************************************************************************
|
||
|
* @attention
|
||
|
*
|
||
|
* This module is a confidential and proprietary property of RealTek and
|
||
|
* possession or use of this module requires written permission of RealTek.
|
||
|
*
|
||
|
* Copyright(c) 2015, Realtek Semiconductor Corporation. All rights reserved.
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
|
||
|
#ifndef _RTL8710B_OTA_H_
|
||
|
#define _RTL8710B_OTA_H_
|
||
|
|
||
|
#include "basic_types.h"
|
||
|
|
||
|
/** @addtogroup AmebaZ_Platform
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
#define SINGLE_IMG_OTA_UPGRADE 1 /*single image method upgrade defination */
|
||
|
#define SERVER_TYPE SERVER_LOCAL /*configure OTA demo type*/
|
||
|
#define CONFIG_CUSTOM_SIGNATURE 1 /*custom signature used or not*/
|
||
|
|
||
|
#define HTTP_OTA_UPDATE //if define, using http protocol, if not, will use socket
|
||
|
#ifdef HTTP_OTA_UPDATE
|
||
|
#define HEADER_BAK_LEN 32
|
||
|
|
||
|
typedef struct {
|
||
|
uint32_t status_code;
|
||
|
uint32_t header_len;
|
||
|
uint8_t *body;
|
||
|
uint32_t body_len;
|
||
|
uint8_t *header_bak;
|
||
|
uint32_t parse_status;
|
||
|
} http_response_result_t;
|
||
|
#endif
|
||
|
/** @defgroup OTA
|
||
|
* @brief OTA driver modules
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/* Exported Types --------------------------------------------------------*/
|
||
|
/** @defgroup OTA_Exported_Types OTA Exported Types
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
#if SINGLE_IMG_OTA_UPGRADE
|
||
|
|
||
|
/**
|
||
|
* @brief OTA firmware file header structure definition
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
u32 FwVer; /*!< Specifies the OTA firmware verision.
|
||
|
This parameter is in first Dword in the firmware file. */
|
||
|
u32 HdrNum;/*!< Specifies the OTA firmware header number.
|
||
|
This parameter indicates how many headers in firmware file. */
|
||
|
}update_file_hdr;
|
||
|
|
||
|
/**
|
||
|
* @brief OTA firmware file image header structure definition
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
u8 ImgId[4]; /*!< Specifies the OTA image ID.
|
||
|
This parameter is used to identify the OTA header needed. */
|
||
|
u32 ImgHdrLen; /*!< Specifies the OTA image header length.
|
||
|
This parameter indicates the Image Header Length. */
|
||
|
u32 Checksum; /*!< Specifies the OTA image checksum.
|
||
|
This parameter is used to judge whether the image received is correct. */
|
||
|
u32 ImgLen; /*!< Specifies the OTA image length. */
|
||
|
u32 Offset; /*!< Specifies the the location in the total firmware file. */
|
||
|
u32 FlashOffset; /*!< Specifies the flash offset address of the corresponding image. */
|
||
|
}update_file_img_hdr;
|
||
|
|
||
|
/**
|
||
|
* @brief OTA firmware file download information structure definition
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
u32 ImgId; /*!< Specifies the Image ID.*/
|
||
|
|
||
|
u32 FlashAddr; /*!< Specifies the Flash Address.
|
||
|
This parameter is used to write the Image to the flash. */
|
||
|
u32 ImgOffset; /*!< Specifies the Image location in Firmware header.
|
||
|
This parameter indicates the Image location in firmware file. */
|
||
|
u32 ImageLen; /*!< Specifies the OTA image length. */
|
||
|
}update_dw_info;
|
||
|
|
||
|
/**
|
||
|
* @brief OTA target image header structure definition
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
update_file_hdr FileHdr; /*!< Specifies the firmware file header. */
|
||
|
update_file_img_hdr FileImgHdr; /*!< Specifies the target OTA image firmware file header. */
|
||
|
update_file_img_hdr FileRdpHdr; /*!< Specifies the target RDP image firmware file header. */
|
||
|
u32 RdpStatus;
|
||
|
}update_ota_target_hdr;
|
||
|
|
||
|
/**
|
||
|
* @brief OTA image ID header structure definition
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
u8 ImgId[5]; /*!< Specifies the image ID strings. */
|
||
|
}update_file_img_id;
|
||
|
|
||
|
#endif
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Exported constants --------------------------------------------------------*/
|
||
|
|
||
|
/** @defgroup OTA_Exported_Constants OTA Exported Constants
|
||
|
* @{
|
||
|
*/
|
||
|
/** @defgroup OTA_system_parameter_definitions
|
||
|
* @{
|
||
|
*/
|
||
|
#define OFFSET_DATA FLASH_SYSTEM_DATA_ADDR /*system data offset address*/
|
||
|
#define BACKUP_SECTOR (FLASH_SYSTEM_DATA_ADDR - 0x1000) /*back up system data offset address*/
|
||
|
#define OTA1_ADDR 0x0800B000 /*the OTA1 start address*/
|
||
|
#define OTA2_ADDR 0x08080000 /*the OTA2 start address*/
|
||
|
#define BUF_SIZE 512 /*the size of the buffer used for receiving firmware data from server*/
|
||
|
#define RDP_FLASH_ADDR 0x080FF000 /*the flash addresss for RDP image*/
|
||
|
|
||
|
#define OTA_IMAG 0 /*identify the OTA image*/
|
||
|
#define RDP_IMAG 1 /*identify the RDP image*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup OTA_Index_definitions
|
||
|
* @{
|
||
|
*/
|
||
|
#define OTA_INDEX_1 0
|
||
|
#define OTA_INDEX_2 1
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Exported functions --------------------------------------------------------*/
|
||
|
/** @defgroup OTA_Exported_Functions OTA Exported Functions
|
||
|
* @{
|
||
|
*/
|
||
|
u32 OTA_Change(u32 OTAIdx);
|
||
|
|
||
|
void* ota_update_malloc(unsigned int size);
|
||
|
void ota_update_free(void *buf);
|
||
|
|
||
|
#if (SERVER_TYPE == SERVER_LOCAL)
|
||
|
void ota_platform_reset(void);
|
||
|
int ota_write_ota2_addr(uint32_t ota_addr);
|
||
|
u32 ota_get_cur_index(void);
|
||
|
#if SINGLE_IMG_OTA_UPGRADE
|
||
|
u32 recv_file_info_from_server(u8 * Recvbuf, u32 len, int socket);
|
||
|
u32 recv_ota_file_hdr(u8 * Recvbuf, u32 * len, update_ota_target_hdr * pOtaTgtHdr, int socket);
|
||
|
u32 get_ota_tartget_header(u8* buf, u32 len, update_ota_target_hdr * pOtaTgtHdr, u8 * ImgId);
|
||
|
void erase_ota_target_flash(u32 addr, u32 len);
|
||
|
s32 download_new_fw_from_server(u32 addr, int socket, update_ota_target_hdr * pOtaTgtHdr, u8 * signature);
|
||
|
u32 verify_ota_checksum(u32 addr, u32 len, u8 * signature, update_ota_target_hdr * pOtaTgtHdr);
|
||
|
u32 change_ota_signature(u32 addr, u8 * signature, u32 ota_target_index);
|
||
|
u32 get_ota_address(u32 ota_target_index, u32 * new_addr, update_ota_target_hdr * pOtaTgtHdr);
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
#ifdef HTTP_OTA_UPDATE
|
||
|
int parse_http_response(uint8_t *response, uint32_t response_len, http_response_result_t *result);
|
||
|
int update_ota_http_connect_server(int server_socket, char *host, int port);
|
||
|
int http_read_socket( int socket, uint8_t *recevie_buf, int buf_len );
|
||
|
|
||
|
/*************************************************************************************************
|
||
|
** Function Name : http_update_ota
|
||
|
** Description : The process of OTA updating through http protocol
|
||
|
** Input : cfg:struct update_cfg_local_t
|
||
|
** Return : NULL
|
||
|
**************************************************************************************************/
|
||
|
int http_update_ota(char *host, int port, char *resource);
|
||
|
#endif
|
||
|
|
||
|
#endif //_RTL8710B_OTA_H_
|
||
|
/******************* (C) COPYRIGHT 2016 Realtek Semiconductor *****END OF FILE****/
|