| /** | 
 | * @file upi_public.h | 
 | * @brief ¹«¹²½Ó¿Ú¼°ÐÅÏ¢ | 
 | * | 
 | * Copyright (C) 2017 Sanechips Technology Co., Ltd. | 
 | * @author | 
 | * | 
 | */ | 
 |  | 
 | #ifndef _UPI_PUBLIC_H | 
 | #define _UPI_PUBLIC_H | 
 |  | 
 | /******************************************************************************* | 
 |  *                           Include header files                              * | 
 |  ******************************************************************************/ | 
 | #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include <unistd.h> | 
 | #include <string.h> | 
 | #include <errno.h> | 
 | #include <sys/types.h> | 
 | #include <sys/stat.h> | 
 |  | 
 |  | 
 |  | 
 | /******************************************************************************* | 
 |  *                             Macro definitions                               * | 
 |  ******************************************************************************/ | 
 | //ÄÚ´æ¼ì²â¿ª¹Ø | 
 | //#define FOTA_MEM_DEBUG | 
 |  | 
 |  | 
 | #ifndef FOTA_MEM_DEBUG | 
 | #define upi_free(ptr)      if(NULL != ptr) {free(ptr); ptr = NULL;} | 
 | #define upi_malloc(size)   malloc(size) | 
 | #define upi_strdup(str)    strdup(str) | 
 | #define upi_realloc(ptr, size) realloc(ptr, size) | 
 | #else | 
 | void* realloc_debug(void *ptr, size_t size, const char*func, long line); | 
 |  | 
 | void* malloc_debug(size_t bytes, const char* func, long line); | 
 | void* free_debug(void*p, const char* func, long line); | 
 | char* strdup_debug(const char* str, const char* func, long line); | 
 |  | 
 | #define upi_free(ptr) if(NULL != ptr){free_debug(ptr, __FUNCTION__, __LINE__); ptr=NULL;} | 
 | #define upi_malloc(size) malloc_debug(size, __FUNCTION__, __LINE__) | 
 | #define upi_strdup(str) strdup_debug(str, __FUNCTION__, __LINE__) | 
 | #define upi_realloc(ptr, size) realloc_debug(ptr, size, __FUNCTION__, __LINE__) | 
 |  | 
 |  | 
 | #endif | 
 |  | 
 | #define MAX_PATH_LEN							(256) | 
 | #define SHA512_LEN								(64) | 
 | #define HASH_MAX_LEN							(64) | 
 |  | 
 | #define PARTITION_NAME_LEN						(32) | 
 | #define EXTRA_NAME_LEN							(32) | 
 |  | 
 |  | 
 |  | 
 | #define FOTA_AB_UPGRADE_STATUS           "fota_ab_upgrade_status" | 
 |  | 
 | #define FOTA_AB_UPGRADE_TOTAL_SIZE       "fota_ab_upgrade_total_size" | 
 |  | 
 | #define FOTA_AB_UPGRADE_UPDATED_SZIE     "fota_ab_upgrade_updated_size" | 
 |  | 
 | #define FOTA_AB_AA_SYNC_STATUS			 "fota_ab_aa_sync_status" | 
 |  | 
 |  | 
 | #define PARTITION_NAME_FOTA_FLAG         "flags" | 
 | #define PARTITION_NAME_ROOTFS_1          "rootfs" | 
 | #define PARTITION_NAME_ROOTFS_2          "rootfs2" | 
 | #define SYSTEM_INDEX_1                   (1) | 
 | #define SYSTEM_INDEX_2                   (2) | 
 | #define SYSTEM_INDEX_UNKNOWN             (-1) | 
 |  | 
 |  | 
 |  | 
 | #define FILE_PATH_PROC_MTD              "/proc/mtd" | 
 | #define FILE_PATH_PROC_CMDLINE          "/proc/cmdline" | 
 |  | 
 |  | 
 | #define SYSTEM_UPGRADE_PARTITION_INFO_HEAD_MAGIC		("SUPI") | 
 | #define SYSTEM_UPGRADE_PARTITION_INFO_HEAD_MAGIC_LEN	(4) | 
 |  | 
 | #define SYSTEM_PARTITION_FILE ("/etc_ro/systemPartitionInfo.conf") | 
 |  | 
 | #define PLATFORM_PARTITION_NUM_MAX (7) | 
 | #define OEM_PARTITION_NUM_MAX (7) | 
 |  | 
 | /******************************************************************************* | 
 |  *                             Type definitions                                * | 
 |  ******************************************************************************/ | 
 |  | 
 | typedef enum | 
 | { | 
 |     HASH_TYPE_SHA_512 = 0, | 
 |     HASH_TYPE_SHA_256 | 
 | } Hash_type_s; | 
 |  | 
 |  | 
 | /** | 
 | * @brief							ϵͳ·ÖÇøÐÅϢͷ | 
 | * @param	magic					ħÊõ×Ö | 
 | * @param	plat					ƽ̨: 0 - V3T, 1 - 8501 | 
 | * @param	plat_partition_num		ƽ̨·ÖÇøÊý | 
 | * @param	oem_partition_num		oem·ÖÇøÊý | 
 | */ | 
 | typedef struct | 
 | { | 
 |     char				magic[SYSTEM_UPGRADE_PARTITION_INFO_HEAD_MAGIC_LEN]; | 
 |     int					plat; | 
 |     int					plat_partition_num; | 
 |     int					oem_partition_num; | 
 | } system_partition_info_head_t; | 
 |  | 
 |  | 
 | /** | 
 | * @brief						ƽ̨ϵͳ·ÖÇøÐÅÏ¢ | 
 | * @param	name				·ÖÇøÃû | 
 | * @param	system_type			ËùÊôϵͳÀàÐÍ - 0 ƽ̨ÀàÐÍ, 1 oem | 
 | * @param	partition_type		·ÖÇøÀàÐÍ | 
 | */ | 
 | typedef struct | 
 | { | 
 |     char				name[PARTITION_NAME_LEN]; | 
 |     int					system_type; | 
 |     int					partition_type; | 
 | } platform_partition_info_t; | 
 |  | 
 |  | 
 | /** | 
 | * @brief						oem·ÖÇøÐÅÏ¢ | 
 | * @param	name				·ÖÇøÃû | 
 | * @param	system_type			ËùÊôϵͳÀàÐÍ - 0 ƽ̨ÀàÐÍ, 1 oem | 
 | * @param	partition_type		·ÖÇøÀàÐÍ | 
 | */ | 
 | typedef struct | 
 | { | 
 |     char				name[PARTITION_NAME_LEN]; | 
 |     int					system_type; | 
 |     int					partition_type; | 
 | } oem_partition_info_t; | 
 |  | 
 |  | 
 | /** | 
 | * @brief									ϵͳ¿ÉÉý¼¶·ÖÇøÐÅÏ¢ | 
 | * @param	platform_partition_info			ƽ̨¿ÉÉý¼¶·ÖÇøÐÅÏ¢ | 
 | * @param	oem_partition_info				oem¿ÉÉý¼¶·ÖÇøÐÅÏ¢ | 
 | */ | 
 | typedef struct | 
 | { | 
 |     system_partition_info_head_t system_partition_info_head; | 
 |     platform_partition_info_t *platform_partition_info; | 
 |     oem_partition_info_t *oem_partition_info; | 
 | } system_upgrade_partition_info_t; | 
 |  | 
 |  | 
 | /******************************************************************************* | 
 |  *                       Global variable declarations                          * | 
 |  ******************************************************************************/ | 
 | extern char FOTA_PACKAGE_FILE[128]; | 
 |  | 
 |  | 
 | /******************************************************************************* | 
 |  *                       Global function declarations                          * | 
 |  ******************************************************************************/ | 
 | int upi_delete_folder(const char* folderpath); | 
 | int upi_create_folder(const char* folderpath); | 
 | int upi_check_file_existence(const char* filepath); | 
 | char * get_log_root_path(); | 
 | char * get_temp_path(); | 
 |  | 
 | int hash_copy(char *dst, char *src, int type); | 
 | int hash_compare(char *str1, char *str2, int type); | 
 | void show_hash_hex(int type, const char* title, char *hash); | 
 |  | 
 |  | 
 | void upi_set_upgrade_status(int status); | 
 | void upi_set_upgrade_total_size(int total_size); | 
 | void upi_set_upgrade_updated_size(int updated_size); | 
 | void upi_set_sync_status(int sync_status); | 
 |  | 
 | int upi_get_upgrade_status(); | 
 | int upi_get_upgrade_total_size(); | 
 | int upi_get_upgrade_updated_size(); | 
 | int upi_get_sync_status(); | 
 |  | 
 | int upi_get_current_system(); | 
 | int upi_get_target_upgrade_system(); | 
 | int upi_get_target_sync_system(int *target_system_index, int *target_system); | 
 |  | 
 | ssize_t upi_readn(int fd, void *vptr, size_t n); | 
 |  | 
 | int upi_init_system_partition_info(system_upgrade_partition_info_t *system_partition_info); | 
 | void upi_deinit_system_partition_info(system_upgrade_partition_info_t *system_partition_info); | 
 |  | 
 |  | 
 | /******************************************************************************* | 
 |  *                      Inline function implementations                        * | 
 |  ******************************************************************************/ | 
 |  | 
 |  | 
 |  | 
 |  | 
 | #endif // _UPI_PUBLIC_H | 
 |  |