修改事项: 1、新增TFTP IAP升级功能,只是代码移植完毕,没有测试使用 2、代码空间编译优化,零等待区域空间已满,而应用层代码已全部挪移到非零等待区域中,但还是会增加零等待区的空间占用。 待优化
104 lines
2.8 KiB
C
104 lines
2.8 KiB
C
/*
|
||
* tftp_function.h
|
||
*
|
||
* Created on: Dec 6, 2025
|
||
* Author: cc
|
||
*/
|
||
|
||
#ifndef NETLIB_TFTP_FUNCTION_H_
|
||
#define NETLIB_TFTP_FUNCTION_H_
|
||
|
||
#include "ch564.h"
|
||
#include "eth_driver.h"
|
||
#include "net_config.h"
|
||
#include "debug.h"
|
||
|
||
#define TFTP_Destination_Port 69 //TFTP服务端口
|
||
#define TFTP_DTAT_Local_Port 65535 //TFTP 数据传输本地端口
|
||
#define TFTP_LOG_Local_Port 65500 //TFTP LOG传输本地端口
|
||
#define TFTP_DATA_LEN_MAX 517
|
||
#define TFTP_DATA_PKT_HDR_LEN 4 //TFTP数据包头长度
|
||
#define TFTP_ACK_PKT_LEN 4 //TFTP应答数据包长度
|
||
|
||
#define TFTP_IAP_Task_Timeout 30000 //TFTP IAP任务超时时间
|
||
|
||
#define TFTP_File_Name_Size 128 //TFTP传输文件名最大128Byte
|
||
|
||
#define TFTP_LOG_Exceed_Size 4096 //日志上报条件1 - 限定大小
|
||
#define TFTP_LOG_Exceed_Time 7200 //日志上报条件2 - 限定时间
|
||
|
||
#define TFTP_IAP_Start 0x01 //TFTP IAP升级开始
|
||
#define TFTP_IAP_Finish 0x02 //TFTP IAP升级完成
|
||
#define TFTP_IAP_Timeout 0x03 //TFTP IAP升级超时
|
||
|
||
#define TFTP_FUNTYPE_LocalIAP 0x01 //本地IAP升级(局域网升级)
|
||
#define TFTP_FUNTYPE_CloudIAP 0x02 //云端IAP升级(远程升级)
|
||
#define TFTP_FUNTYPE_LogUpload 0x03 //LOG上传
|
||
|
||
#define TFTP_IAP_DataType_APP 0x01 //IAP升级 - APP固件
|
||
#define TFTP_IAP_DataType_CONFIG 0x02 //IAP升级 - 配置文件
|
||
|
||
|
||
typedef enum {
|
||
TFTP_RRQ = 1,
|
||
TFTP_WRQ = 2,
|
||
TFTP_DATA = 3,
|
||
TFTP_ACK = 4,
|
||
TFTP_ERROR = 5,
|
||
TFTP_OPTION = 6,
|
||
}TFTP_OPCODE;
|
||
|
||
typedef struct
|
||
{
|
||
uint8_t IapFileType; //升级文件类型 就两种,0是固件 1是配置
|
||
uint8_t enable; //TFTP 功能使能状态 0X01:使能,0x00:没使能
|
||
uint8_t FunType; //升级类型 0x01:本地IAP升级,0x02:云端IAP升级,0x03:LOG日志上传
|
||
|
||
uint8_t NewIapFlag; //新升级流程标志位 - 2022-01-05
|
||
|
||
uint8_t IapErrFlag; //升级数据传输错误标志
|
||
|
||
uint8_t status; //状态机
|
||
uint8_t IapPercent; //升级占用的百分比
|
||
|
||
uint8_t FtpFileNameLen; //文件名长度
|
||
|
||
uint8_t FtpFileName[TFTP_File_Name_Size]; //文件名
|
||
uint8_t Md5[16]; //MD5值
|
||
|
||
uint16_t TFTP_Port;
|
||
|
||
uint16_t BlockSize; //块大小
|
||
uint16_t Write_Block; //写入块号
|
||
|
||
uint32_t FlashWriteAddress; //升级写入的地址
|
||
uint32_t TotalCount; //文件总大小
|
||
uint32_t WriteCount; //文件写入大小
|
||
|
||
uint32_t processing_tick; //处理时间戳
|
||
}IAPVarTypeStruct;
|
||
|
||
typedef struct
|
||
{
|
||
uint8_t op; /*WRQ */
|
||
|
||
uint8_t data[TFTP_DATA_LEN_MAX];
|
||
|
||
uint8_t to_ip[4];
|
||
uint8_t retry_num;
|
||
|
||
uint16_t data_len;
|
||
uint16_t to_port;
|
||
|
||
uint16_t block;
|
||
|
||
uint16_t tot_bytes;
|
||
|
||
uint32_t last_time;
|
||
}tftp_connection_args;
|
||
|
||
|
||
void Internal_TFTP_Task(void);
|
||
|
||
#endif /* NETLIB_TFTP_FUNCTION_H_ */
|