Files
RCU_C1P_Module/NetLib/net_function.h
caocong cc8783e9f8 feat:新增TFTP IAP升级功能
修改事项:
1、新增TFTP IAP升级功能,只是代码移植完毕,没有测试使用
2、代码空间编译优化,零等待区域空间已满,而应用层代码已全部挪移到非零等待区域中,但还是会增加零等待区的空间占用。 待优化
2025-12-10 14:06:45 +08:00

166 lines
6.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* net_function.h
*
* Created on: May 21, 2025
* Author: cc
*/
#ifndef NET_FUNCTION_H_
#define NET_FUNCTION_H_
#include "ch564.h"
#include "eth_driver.h"
#include "net_config.h"
#include "debug.h"
#define KEEPALIVE_ENABLE 0 //Enable keep alive function 使能TCP保活功能
#define NET_Socket_Num_Max 4 //允许应用层最多创建4个套接字 套接字上限:WCHNET_MAX_SOCKET_NUM
#define DOMAINNAME_MAX 64 //域名最长长度
#define SERVER_NAME_DNS "www.boonlive-rcu.com" //云端服务器 - 默认使用域名
#define TFTPSERVER_NAME_DNS "blv-tftp-log.blv-oa.com" //TFTP日志服务器 - 默认使用域名
#define SERVER_COMM_Port 3339
//套接字数组存储下标
#define SocketIdnex_BLVSeriver 0x00 //BLV通讯服务 - 套接字数组存储下标
#define SocketIdnex_TFTPCMD 0x01 //TFTP命令 - 套接字数组存储下标
#define SocketIdnex_TFTPDATA 0x02 //TFTP数据 - 套接字数组存储下标
#define Net_DNS_Port 53 //DNS服务器端口
typedef enum
{
NET_INIT = 0,
NET_PHY_WAIT,
NET_DHCP,
NET_DHCP_WAIT,
NET_TFTP,
NET_DNS,
NET_DNS_WAIT,
NET_WAIT,
NET_COMPLETE,
NET_WAIT_MAC_RESTART,
//NET_START_TO_INIT,
NET_CON_WAIT,
NET_SOCKET_WAIT,
}NET_STA;
enum UDP_INTERNAL_STA{
STA_INIT = 0,
STA_INIT_WAIT = 1,
STA_INIT_IDLE = 2,
STA_Realy_Upgrade = 3,
STA_INIT_CONNECT,
STA_LOG,
STA_SEND_WAIT,
STA_SEND_LOG,
STA_SEND_RETRY,
STA_END,
};
typedef struct
{
uint8_t device_ip[4]; // 设备 IP
uint8_t gateway[4]; // 网关地址
uint8_t subnet[4]; // 子网掩码
uint8_t mac_addr[6]; // 主机使用的MAC地址
uint8_t dns_server_ip[4]; // DNS服务器IP地址
uint8_t dns_server2_ip[4]; // DNS服务器IP地址
uint8_t SocketId[NET_Socket_Num_Max];
}WCHNET_INFO_T;
typedef struct
{
uint8_t init_flag:1; //初始化完成标志位
uint8_t register_flag:1; //注册标志位
uint8_t search_ack_flag:1; //发送标志位
uint8_t dhcp_en:1; //DHCP是否启用
uint8_t dns_sta:4; //DNS状态
uint8_t dhcp_flg:1; //DHCP分配ip成功标志
uint8_t dns_flg:1; //DNS获取ip成功标志
uint8_t Udp_Internal_sta:4; //UDP状态机状态
uint8_t PHY_State:2; //NET PHY状态 0x00:当前网络未连接0x01:当前网络已连接DNS状态
uint8_t register_num:4; //注册计数
uint8_t dns_fail:4; //DNS失败计数用于切换DNS服务器使用
uint8_t server_dns_flag:1; //DNS成功解析服务器域名
uint8_t tftp_dns_flag:1; //DNS成功解析tftp服务器域名
uint8_t mqtt_dns_flag:1; //MQTT成功解析域名标志位
uint8_t online_state:3; //网络连接状态 0:离线 1:局域网在线 2:本地服务器在线 3:云端服务器在线
uint8_t sync_tick:2; //同步时间标记
uint8_t udp_dns_flag:1; //udp服务器解析域名标志位
uint8_t server_select:1; //服务器选择 0x00:默认云端服务器,0x01:本地服务器
uint8_t net_retry_flag:1; //网络重试标志位 -
uint8_t net_retry_num:5; //网络重试次数 - 比如DHCP重试次数DNS重试次数
uint8_t con_flag:1; //直连标记
uint8_t rcu_reboot_flag:1; //RCU重启标志位
uint8_t udp_scan_cnt:6; //udp扫描计数
uint8_t active_cmd_flag; //主动发送命令标志位
uint8_t net_sta; //网络状态机当前状态
uint8_t udp_sta; //UDP任务状态机
uint8_t ServerDename[DOMAINNAME_MAX]; //服务器域名
uint8_t dis_ip[4]; //云端服务器ip地址
uint8_t tftp_ip[4]; //TFTP服务器
uint8_t goal_ip[4]; //目标ip,
uint8_t udp_send_flag; //发送标记
uint8_t udp_retry_cnt; //重发次数
uint8_t udp_retry_num; //重发次数
uint16_t local_port; //本地端口
uint16_t goal_port; //目标port
uint16_t dis_port; //云端服务器端口
uint16_t frame_no; //发送的帧号
uint16_t ack_frame; //ACK帧号
uint16_t udp_timesync_cnt; //时间同步次数 - 1s一次
uint16_t udp_periodic_cnt; //定期上报次数 - 1s一次
uint16_t udp_periodic_time; //定期上报时间间隔 - 单位:S
uint32_t udp_retry_tick; //重发超时时间戳
uint32_t udp_retry_time; //重发超时时间
uint32_t con_tick; //直连时间戳 2023-05-27
uint32_t udp_idle_tick; //UDP空闲时间戳
uint32_t udp_online_tick; //UDP离线时间戳
uint32_t udp_online_time; //UDP离线判定时间
uint32_t wait_cot; //等待计数
uint32_t register_tick; //注册计时
uint32_t search_ack_tick; //发送计时
}DEVICE_NET_APPINFO;
/*TFTP 传输LOG相关定义*/
#define TFTP_Destination_Port 69 //TFTP服务端口
#define TFTP_LOG_Local_Port 65500 //TFTP LOG传输本地端口
typedef struct
{
uint16_t Port; //TFTP LOG传输本地端口
uint16_t Time; //日志上报时间
uint8_t DN_Lens; //TFTP日志服务器域名长度
char DomainName[DOMAINNAME_MAX]; //TFTP日志服务器域名
}TFTP_LOG;
extern WCHNET_INFO_T g_netinfo;
extern DEVICE_NET_APPINFO server_info;
uint8_t WCHNET_LIB_Init(void);
void WCHNET_HandleGlobalInt(void);
uint8_t WCHNET_Get_PHY_Linked_Status(void);
void WCHNET_CreateUdpSocket(uint8_t* S, uint16_t SourPort, pSockRecv cb);
void NetWork_Task(void);
#endif /* NET_FUNCTION_H_ */