/************************************************************************************************** * Copyright (c) Fenda Technologies Co., Ltd. 2020-2021. All rights reserved. * Description: 蓝牙文件传输中间层,供蓝牙调用 * Author: leon.sunzhen * Create: 2020-12-24 ************************************************************************************************/ #ifndef _FILE_TRANS_H #define _FILE_TRANS_H #include "stdint.h" #include "stdbool.h" #define FILE_TRANS_PKG_SIZE 4096 #define FILE_TRANS_OVERTIME_MS 10000 #define FILE_UPLOAD_FRAME_SIZE 4096 #define FILE_HEAD_INFO_IEN 512 #define FILE_WRITE_PKG_COMPLETE 0 #define FILE_WRITE_PKG_NO_REQUEST -1 #define FILE_WRITE_PKG_FILE_ERR -2 #define FILE_ILLEGAL_ERR -3 #define FILE_TEMP_MEM_APY_ERR -4 #define FILE_NO_DIFF_CONTENT_TRANS -5 typedef enum { FILE_TRANS_STATE_IDLE = 0, FILE_TRANS_STATE_START, FILE_TRANS_STATE_TRANS, FILE_TRANS_STATE_WAIT, FILE_TRANS_STATE_CANCEL, } FileTransStateType; typedef enum { OTA_UI_TRANS_FIRMWARE = 0, OTA_UI_TRANS_IMAGE, OTA_UI_TRANS_FONT, OTA_UI_TRANS_WATCHFACE, OTA_UI_INSTALL_FIRMWARE, OTA_UI_INSTALL_IMAGE, OTA_UI_INSTALL_FONT, OTA_UI_INSTALL_WATCHFACE, OTA_UI_UNKNOWN_TYPE } OtaUiMsgType; typedef enum { FILE_ACTION_GPS = 1, //GPS星历文件 FILE_ACTION_WATCHFACE, //表盘资源文件 FILE_ACTION_LOG, //LOG文件 FILE_ACTION_IMAGE, //IMAGE资源文件 FILE_ACTION_FONT, //FONT资源文件 FILE_ACTION_MCU_FIRMWARE, //MCU固件 FILE_ACTION_NXP_FIRMWARE = 10, //NXP固件 FILE_ACTION_GPS_FIRMWARE, //GPS固件 FILE_ACTION_NFC_FIRMWARE, //NFC固件 FILE_ACTION_TP_FIRMWARE, //TP固件 FILE_ACTION_BTL_FIRMWARE, //BOOTLOADER固件 FILE_ACTION_SYS_WATCHFACE, //系统表盘 FILE_ACTION_DUMP_FILE = 20, //DUMP文件(dump目录) FILE_ACTION_RUNNING, //RUNNING文件 FILE_ACTION_DUMP_INNERFLASH, //DUMP信息(片内FLASH) //FILE_ACTION_HEAP_MONITOR, //heap monitor文件 FILE_ACTION_TRAINING, //运动记录文件 FILE_ACTION_BASICS, //基础功能文件 FILE_ACTION_ERR_OTA_FILE, //OTA出错文件 FILE_ACTION_ANY_FILE, //任意文件 FILE_ACTION_DATA_EXERCISE = 50, FILE_ACTION_DATA_SLEEP, FILE_ACTION_DATA_MIN, FILE_ACTION_DATA_DAY, FILE_ALL = 100, // 所有文件 } FileActionType; enum{ STORAGE_IN_ADDR = 1, STORAGE_IN_FILE, }; typedef struct { FileTransStateType state; uint32_t fileId; int32_t fsfd; char fileName[128]; uint32_t fileSize; uint32_t fileAction; OtaUiMsgType type; uint32_t offset; uint32_t lastOffset; uint32_t nextPkgSize; uint32_t crc32; uint8_t md5[16]; uint16_t psn; uint8_t file_storage_cs; uint32_t file_resume_crc32; uint32_t file_resume_offset; uint32_t file_resume_size; } FileTransCtrlBlock_t; typedef struct { char filePathName[128]; uint32_t fileSize; uint32_t fileFrames; uint32_t fileId; } FileTransUploadFileInfo_t; void FileTransInit(void); bool file_trans_busy(void); void file_trans_start(uint32_t id, char *name, uint32_t size, FileActionType action); void FileTransSetCrc(uint32_t crc); void FileTransSetMd5(uint8_t *md5); void file_trans_set_diff_content_trans_flag(bool flag); bool file_trans_get_diff_content_trans_flag(void); uint8_t* file_trans_get_temp_buff_para(uint16_t* buff_size_p); int32_t file_trans_write_pkg(uint8_t *data, uint32_t length); FileTransCtrlBlock_t* file_trans_get_ctrl_block_ptr(void); void file_trans_get_ctrl_block(FileTransCtrlBlock_t *ctrl); void file_trans_succ(void); void FileTransOver(void); void file_trans_break(bool save_flag); void FileTransDisconn(void); uint8_t GetFileListByAction(FileActionType action, FileTransUploadFileInfo_t **pFileList); #endif