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