mcu_hi3321_watch/tjd/ble/protocol/ble_file_trans.h
2025-05-26 20:15:20 +08:00

134 lines
4.2 KiB
C

/**************************************************************************************************
* 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