Files
BLV_C1F_Module/BasicCode/Drive/NET/net.h

220 lines
7.5 KiB
C
Raw Normal View History

#ifndef _DHCP_H_
#define _DHCP_H_
#include <stdio.h>
#include <string.h>
#include "CH57x_common.h"
#include "CH57xNET.H"
#include "DNS.h"
#include "BLV_NET_Function.h"
#define KEEPLIVE_ENABLE 1 /* <20><><EFBFBD><EFBFBD>KEEPLIVE<56><45><EFBFBD><EFBFBD> */
#define RECE_BUF_LEN 536 /* <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С */
#define Net_NO_SERVER 0x00 //<2F>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>
#define Net_LOCAL_SERVER 0x01 //<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define Net_CLOUD_SERVER 0x02 //<2F>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD>
#define INTERRUPT_RECV_EN 0 //<2F><><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#define APPCALLBACK_RECV_EN 1 //ʹ<>ܻص<DCBB><D8B5><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#define USE_AUTO_OBTAIN_IP 0 //DHCP<43>Զ<EFBFBD><D4B6><EFBFBD>ȡip 0<><30>DHCP<43>Զ<EFBFBD><D4B6><EFBFBD>ȡ; 1<><31><EFBFBD>ֶ<EFBFBD><D6B6>޸<EFBFBD>
#define USE_BLE_OBTAIN_IP 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡip
#define User_NET_DNS_EN 1 //NET DNSʹ<53><CAB9>
#define SOCKET_TYPE_TCP 1 //<2F><><EFBFBD><EFBFBD>TCP<43><50><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
#define SOCKET_TYPE_MQTT 2 //<2F><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
#define SOCKET_TYPE_UDP 3 //<2F><><EFBFBD><EFBFBD>UDP<44><50><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
#define NET_RESEND_TIMES 3 /*<2A>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ7<D6B5><37>ʵ<EFBFBD><CAB5><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>+1 */
#define USER_NET_Register_Timeout 30 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ʱ,<2C><>λ<EFBFBD><CEBB>S
#define USER_NET_Send_Timeout 20 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵȴ<DDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>λ<EFBFBD><CEBB>S
#define USER_NET_Register_Times 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
#define USER_NET_Send_Times 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
typedef void (*AppCallBack)(struct _SCOK_INF *,UINT32 ,UINT16 ,UINT8 *,UINT32 ); /* <20><><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>*/
typedef enum
{
NET_INIT = 0,
NET_PHY_WAIT,
NET_DHCP,
NET_DHCP_WAIT,
NET_TFTP,
NET_DNS,
NET_DNS2,
NET_WAIT,
NET_COMPLETE,
NET_MQTT_DNS,
NET_MQTT_INIT,
NET_MQTT_WAIT,
NET_WAIT_MAC_RESTART,
NET_START_TO_INIT,
NET_CON_WAIT,
NET_SOCKET_WAIT,
}NET_STA;
typedef enum
{
MQTT_DNS = 0,
MQTT_INIT,
MQTT_WAIT,
MQTT_COMPLETE,
MQTT_RCON,
MQTT_FAIL,
}MQTT_STA; //2023-03-17
typedef enum
{
SOCKET_SEND,
SOCKET_RESEND,
SOCKET_COMPLETE,
}SOCKET_STA;
typedef enum
{
NET_STATUS_INIT = 0, //δ<><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NET_STATUS_PHY_DISCONN, //<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD> <20><> PHYЭ<59><D0AD>ʧ<EFBFBD><CAA7>
NET_STATUS_IP_CONFLI, //IP<49><50>ͻ
NET_STATUS_UNREACH, //<2F><><EFBFBD>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD><EFBFBD>
NET_STATUS_NORMAL, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}NET_STATUS;
#pragma pack(1)
typedef struct
{
UINT8 local_ip[4]; //<2F><><EFBFBD><EFBFBD>ip<69><70>ַ
UINT8 gwip_addr[4]; //<2F><><EFBFBD><EFBFBD>
UINT8 mask[4]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 SocketId[4]; //<2F><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 ServerDename[64]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2025-10-11
}NET_INFO;
typedef struct
{
uint8_t init_flag:1; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
uint8_t register_flag:1; //ע<><D7A2><EFBFBD><EFBFBD>־λ
uint8_t search_ack_flag:1; //<2F><><EFBFBD>ͱ<EFBFBD>־λ
uint8_t dhcp_en:1; //DHCP<43>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
uint8_t dns_sta:4; //DNS״̬
uint8_t dhcp_flg:1; //DHCP<43><50><EFBFBD><EFBFBD>ip<69>ɹ<EFBFBD><C9B9><EFBFBD>־
uint8_t dns_flg:1; //DNS<4E><53>ȡip<69>ɹ<EFBFBD><C9B9><EFBFBD>־
uint8_t Udp_Internal_sta:4; //UDP״̬<D7B4><CCAC>״̬
uint8_t PHY_State:2; //NET PHY״̬ 0x00:<3A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>ӣ<EFBFBD>0x01:<3A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DNS״̬
uint8_t register_num:4; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t dns_fail:4; //DNSʧ<53>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
uint8_t server_dns_flag:1; //DNS<4E>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t tftp_dns_flag:1; //DNS<4E>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>tftp<74><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t mqtt_dns_flag:1; //MQTT<54>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint8_t online_state:3; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ 0:<3A><><EFBFBD><EFBFBD> 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2:<3A><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3:<3A>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t sync_tick:2; //ͬ<><CDAC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t udp_dns_flag:1; //udp<64><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint8_t server_select:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1> 0x00:Ĭ<><C4AC><EFBFBD>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD>,0x01:<3A><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
uint8_t net_retry_flag:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>־λ -
uint8_t net_retry_num:5; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD> - <20><><EFBFBD><EFBFBD>DHCP<43><50><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>DNS<4E><53><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
uint8_t con_flag:1; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t rcu_reboot_flag:1; //RCU<43><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint8_t udp_scan_cnt:6; //udpɨ<70><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t active_cmd_flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint8_t net_sta; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ǰ״̬
uint8_t dis_ip[4]; //<2F>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD>ip<69><70>ַ
uint8_t tftp_ip[4]; //TFTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t udp_ip[4]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t goal_ip[4]; //Ŀ<><C4BF>ip,
uint16_t local_port; //<2F><><EFBFBD>ض˿<D8B6>
uint16_t goal_port; //Ŀ<><C4BF>port
uint16_t dis_port; //<2F>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
uint16_t frame_no; //<2F><><EFBFBD>͵<EFBFBD>֡<EFBFBD><D6A1>
uint32_t wait_cot; //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
uint32_t register_tick; //ע<><D7A2><EFBFBD><EFBFBD>ʱ
uint32_t search_ack_tick; //<2F><><EFBFBD>ͼ<EFBFBD>ʱ
uint8_t udp_sta; //UDP<44><50><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
uint8_t udp_send_flag; //<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>
uint8_t udp_retry_cnt; //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
uint8_t udp_retry_num; //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
uint16_t ack_frame; //ACK֡<4B><D6A1>
uint16_t udp_timesync_cnt; //ʱ<><CAB1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 1sһ<73><D2BB>
uint16_t udp_periodic_cnt; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> - 1sһ<73><D2BB>
uint16_t udp_periodic_time; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>λ:S
uint32_t udp_retry_tick; //<2F>ط<EFBFBD><D8B7><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD>
uint32_t udp_retry_time; //<2F>ط<EFBFBD><D8B7><EFBFBD>ʱʱ<CAB1><CAB1>
uint32_t con_tick; //ֱ<><D6B1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> 2023-05-27
#if TFTP_GET_IP
uint8_t tftpip_gflag; //TFTP_IP<49>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
#endif
uint32_t udp_idle_tick; //UDP<44><50><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint32_t udp_online_tick; //UDP<44><50><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint32_t udp_online_time; //UDP<44><50><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
}__attribute__ ((__packed__)) NET_SERVER_INFO;
#pragma pack()
extern uint32_t SysTick_10ms;
extern NET_INFO net_info;
extern NET_SERVER_INFO server_info;
extern UINT8 MACAddr[6]; /* CH579MAC<41><43>ַ */
extern UINT8 SocketRecvBuf[RECE_BUF_LEN];
extern TFTP_LOG tftp_log;
extern uint8_t Global_Large_Buff[1100];
#if USE_INTERRUPT_RECV
extern UINT8 MyBuf[RECE_BUF_LEN];
#endif
void mStopIfError(UINT8 iError);
void CH57xNET_CreatTcpSocket(void);
void CH57xNET_CreatTcpSocket_2(UINT8* S);
UINT8 CH57xNET_LibInit(/*const*/ UINT8 *ip,/*const*/ UINT8 *gwip,/*const*/ UINT8 *mask,/*const*/ UINT8 *macaddr);
void CH57xNET_HandleSockInt(UINT8 sockeid,UINT8 initstat);
void CH57xNET_HandleGlobalInt(void);
//void UDPSocketParamInit(UINT8 S,UINT8 *addr,UINT16 SourPort,UINT16 DesPort );
//void UDPSocketParamInit1(UINT8 S,UINT8 *addr,UINT16 SourPort,UINT16 DesPort );
//void UDPSocketParamInit2(UINT8* S,UINT8 *addr,UINT16 SourPort,UINT16 DesPort );
void UDPSocketParamInit2(UINT8* S, UINT16 SourPort, AppCallBack cb);
UINT8 DNS_SocketParamInit(UINT8* S,UINT8 *addr,UINT16 SourPort,UINT16 DesPort );
void Timer0Init(UINT32 time);
UINT8 CH57xNET_DHCPCallBack(UINT8 status,void *arg);
void SystemClock_UART1_init(void);
void GetMacAddr(UINT8 *pMAC);
UINT8 Ethernet_Send_Start(UINT8 socketid, UINT8* buff, UINT16 len, UINT8* ip, UINT16 port); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>׽<EFBFBD><D7BD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 DNS_Restart(void); //DNSʧ<53><CAA7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DNS
UINT8 UDP_Socket_Creat(void); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>UDP<44>׽<EFBFBD><D7BD>֣<EFBFBD><D6A3><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>NetWork_Task״̬<D7B4><CCAC><EFBFBD><EFBFBD>NET_SOCKET<45><54><EFBFBD><EFBFBD>
void NetWork_Parameter_Get(void);
void NetWork_Task(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t Data_Conver_To_Uint16(uint8_t *data);
void UDPSocket1_AppCallBack(struct _SCOK_INF * SocketInf,UINT32 ipaddr,UINT16 port,UINT8 *buff,UINT32 len);
void UDPSocket2_AppCallBack(struct _SCOK_INF * SocketInf,UINT32 ipaddr,UINT16 port,UINT8 *buff,UINT32 len);
void UDPSocket3_AppCallBack(struct _SCOK_INF * SocketInf,UINT32 ipaddr,UINT16 port,UINT8 *buff,UINT32 len);
void UDPSocket4_AppCallBack(struct _SCOK_INF * SocketInf,UINT32 ipaddr,UINT16 port,UINT8 *buff,UINT32 len);
#endif