1096 lines
40 KiB
C
1096 lines
40 KiB
C
|
|
/*
|
|||
|
|
* net_function.c
|
|||
|
|
*
|
|||
|
|
* Created on: 2025<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>21<EFBFBD><EFBFBD>
|
|||
|
|
* Author: cc
|
|||
|
|
*/
|
|||
|
|
#include "includes.h"
|
|||
|
|
#include <string.h>
|
|||
|
|
#include <ctype.h>
|
|||
|
|
|
|||
|
|
uint8_t MACAddr[6]; //MAC address
|
|||
|
|
uint8_t IPAddr[4] = {172, 16, 4, 100}; //IP address
|
|||
|
|
uint8_t GWIPAddr[4] = {172, 16, 4, 254}; //Gateway IP address
|
|||
|
|
uint8_t IPMask[4] = {255, 255, 0, 0}; //subnet mask
|
|||
|
|
uint8_t DESIP[4] = {172, 16, 4, 55}; //destination IP address
|
|||
|
|
uint16_t desport = 1000; //destination port
|
|||
|
|
uint16_t srcport = 1000; //source port
|
|||
|
|
|
|||
|
|
uint8_t SocketId;
|
|||
|
|
uint8_t socket[WCHNET_MAX_SOCKET_NUM]; //Save the currently connected socket
|
|||
|
|
uint8_t SocketRecvBuf[WCHNET_MAX_SOCKET_NUM][RECE_BUF_LEN]; //socket receive buffer
|
|||
|
|
|
|||
|
|
//<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
WCHNET_INFO_T g_netinfo = {
|
|||
|
|
.device_ip = {192,168,1,200},
|
|||
|
|
.gateway = {192,168,1,1},
|
|||
|
|
.subnet = {255,255,0,0},
|
|||
|
|
.mac_addr = {0x34,0xD0,0xB8,0x11,0x11,0x11},
|
|||
|
|
.SocketId = {0,0,0,0},
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
DEVICE_NET_APPINFO server_info = {
|
|||
|
|
.net_sta = 0,
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
TFTP_LOG tftp_log;
|
|||
|
|
|
|||
|
|
void ETH_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
|||
|
|
void TIM2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : mStopIfError
|
|||
|
|
* Description : check if error.
|
|||
|
|
* Input :
|
|||
|
|
* iError - error constants.
|
|||
|
|
*******************************************************************************/
|
|||
|
|
void mStopIfError(uint8_t iError)
|
|||
|
|
{
|
|||
|
|
if (iError == WCHNET_ERR_SUCCESS) return;
|
|||
|
|
|
|||
|
|
printf("Error: %X\r\n", (uint16_t) iError);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : TIM2_Init
|
|||
|
|
* Description : Initializes TIM2.
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void TIM2_Init(void)
|
|||
|
|
{
|
|||
|
|
TMR2_ClrCurrentCount();
|
|||
|
|
R32_TMR2_CNT_END = SystemCoreClock / 1000 * WCHNETTIMERPERIOD;
|
|||
|
|
R8_TMR2_CTRL_MOD = RB_TMR_COUNT_EN;
|
|||
|
|
TMR2_ITCfg(ENABLE, RB_TMR_IE_CYC_END);
|
|||
|
|
NVIC_EnableIRQ(TIM2_IRQn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : ETH_IRQHandler
|
|||
|
|
* Description : This function handles ETH exception.
|
|||
|
|
*******************************************************************************/
|
|||
|
|
void ETH_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
WCHNET_ETHIsr();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : TIM2_IRQHandler
|
|||
|
|
* Description : This function handles TIM2 exception.
|
|||
|
|
*******************************************************************************/
|
|||
|
|
void TIM2_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
WCHNET_TimeIsr(WCHNETTIMERPERIOD);
|
|||
|
|
TMR2_ClearITFlag(RB_TMR_IF_CYC_END);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_CreateUdpSocket
|
|||
|
|
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
* S - socket<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
* SourPort - socketԴ<EFBFBD>˿<EFBFBD>
|
|||
|
|
* cb - socket<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Return : None
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void WCHNET_CreateUdpSocket(uint8_t* S, uint16_t SourPort, pSockRecv cb)
|
|||
|
|
{
|
|||
|
|
uint8_t i;
|
|||
|
|
SOCK_INF TmpSocketInf; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱsocket<65><74><EFBFBD><EFBFBD> */
|
|||
|
|
|
|||
|
|
memset((void *)&TmpSocketInf,0,sizeof(SOCK_INF)); /* <20><><EFBFBD>ڲ<EFBFBD><DAB2>Ὣ<EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
TmpSocketInf.IPAddr[0] = 0xFF;
|
|||
|
|
TmpSocketInf.IPAddr[1] = 0xFF;
|
|||
|
|
TmpSocketInf.IPAddr[2] = 0xFF;
|
|||
|
|
TmpSocketInf.IPAddr[3] = 0xFF;
|
|||
|
|
TmpSocketInf.DesPort = SourPort; /* <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6> */
|
|||
|
|
TmpSocketInf.SourPort = SourPort; /* <20><><EFBFBD><EFBFBD>Դ<EFBFBD>˿<EFBFBD> */
|
|||
|
|
TmpSocketInf.ProtoType = PROTO_TYPE_UDP; /* <20><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD> */
|
|||
|
|
TmpSocketInf.RecvBufLen = RECE_BUF_LEN; /* <20><><EFBFBD><EFBFBD>socket <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
TmpSocketInf.AppCallBack = cb; /* <20><><EFBFBD>ý<EFBFBD><C3BD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|
|||
|
|
i = WCHNET_SocketCreat(S, &TmpSocketInf); /* <20><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SocketId<49><64> */
|
|||
|
|
mStopIfError(i);
|
|||
|
|
WCHNET_ModifyRecvBuf(SocketId, (uint32_t) SocketRecvBuf[SocketId], RECE_BUF_LEN);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s - %d",__func__, *S);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_CreateTcpSocket
|
|||
|
|
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
* S - socket<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
* Return : None
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void WCHNET_CreateTcpSocket(uint8_t* S)
|
|||
|
|
{
|
|||
|
|
uint8_t i;
|
|||
|
|
SOCK_INF TmpSocketInf;
|
|||
|
|
|
|||
|
|
memset((void *) &TmpSocketInf, 0, sizeof(SOCK_INF));
|
|||
|
|
memcpy((void *) TmpSocketInf.IPAddr, DESIP, 4);
|
|||
|
|
TmpSocketInf.DesPort = desport;
|
|||
|
|
TmpSocketInf.SourPort = srcport;
|
|||
|
|
TmpSocketInf.ProtoType = PROTO_TYPE_TCP;
|
|||
|
|
TmpSocketInf.RecvStartPoint = (uint32_t) SocketRecvBuf[0];
|
|||
|
|
TmpSocketInf.RecvBufLen = RECE_BUF_LEN;
|
|||
|
|
i = WCHNET_SocketCreat(S, &TmpSocketInf);
|
|||
|
|
printf("TCP SocketId %d\r\n", *S);
|
|||
|
|
mStopIfError(i);
|
|||
|
|
i = WCHNET_SocketConnect(*S); //make a TCP connection
|
|||
|
|
mStopIfError(i);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void UDPSocket1_AppCallBack( struct _SOCK_INF * SocketInf,uint32_t ipaddr,uint16_t port,uint8_t *buff,uint32_t len)
|
|||
|
|
{
|
|||
|
|
uint8_t ip[4];
|
|||
|
|
|
|||
|
|
ip[0] = ipaddr;
|
|||
|
|
ip[1] = ipaddr>>8;
|
|||
|
|
ip[2] = ipaddr>>16;
|
|||
|
|
ip[3] = ipaddr>>24;
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"ip:%d.%d.%d.%d, port:%d",ip[0], ip[1], ip[2], ip[3], port);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Socket1 len:%ld",len);
|
|||
|
|
|
|||
|
|
Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"data :",buff,len);
|
|||
|
|
//Udp_Internal_Analysis(buff, len, ip, port);
|
|||
|
|
|
|||
|
|
if(buff[0] == 0xAA)
|
|||
|
|
{
|
|||
|
|
switch(buff[1])
|
|||
|
|
{
|
|||
|
|
case 0x55: //<2F>ɵķ<C9B5><C4B7><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
|
|||
|
|
//Udp_Internal_Analysis(buff, len, ip, port);
|
|||
|
|
break;
|
|||
|
|
case 0x66: //UDP<44><50><EFBFBD><EFBFBD>Э<EFBFBD><D0AD> - 2022-05-31
|
|||
|
|
//UDP_NetServer_Data_Analysis(buff, len, ip, port);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_DataLoopback
|
|||
|
|
* Description : Data loopback function.
|
|||
|
|
* Input :
|
|||
|
|
* id - socket id.
|
|||
|
|
* Return : None
|
|||
|
|
*******************************************************************************/
|
|||
|
|
void WCHNET_DataLoopback(uint8_t id)
|
|||
|
|
{
|
|||
|
|
uint8_t i;
|
|||
|
|
uint32_t len;
|
|||
|
|
uint32_t endAddr = SocketInf[id].RecvStartPoint + SocketInf[id].RecvBufLen; //Receive buffer end address
|
|||
|
|
|
|||
|
|
if ((SocketInf[id].RecvReadPoint + SocketInf[id].RecvRemLen) > endAddr) { //Calculate the length of the received data
|
|||
|
|
len = endAddr - SocketInf[id].RecvReadPoint;
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
len = SocketInf[id].RecvRemLen;
|
|||
|
|
}
|
|||
|
|
i = WCHNET_SocketSend(id, (uint8_t *) SocketInf[id].RecvReadPoint, &len); //send data
|
|||
|
|
if (i == WCHNET_ERR_SUCCESS) {
|
|||
|
|
WCHNET_SocketRecv(id, NULL, &len); //Clear sent data
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_HandleSockInt
|
|||
|
|
* Description : Socket Interrupt Handle
|
|||
|
|
* Input :
|
|||
|
|
* socketid - socket id.
|
|||
|
|
* intstat - interrupt status
|
|||
|
|
* Return : None
|
|||
|
|
*******************************************************************************/
|
|||
|
|
void WCHNET_HandleSockInt(uint8_t socketid, uint8_t intstat)
|
|||
|
|
{
|
|||
|
|
uint8_t i;
|
|||
|
|
|
|||
|
|
if (intstat & SINT_STAT_RECV) //receive data
|
|||
|
|
{
|
|||
|
|
WCHNET_DataLoopback(socketid); //Data loopback
|
|||
|
|
}
|
|||
|
|
if (intstat & SINT_STAT_CONNECT) //connect successfully
|
|||
|
|
{
|
|||
|
|
#if KEEPALIVE_ENABLE
|
|||
|
|
WCHNET_SocketSetKeepLive(socketid, ENABLE);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {
|
|||
|
|
if (socket[i] == 0xff) { //save connected socket id
|
|||
|
|
socket[i] = socketid;
|
|||
|
|
|
|||
|
|
//<2F><>Ҫע<D2AA><D7A2>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><D7BD><EFBFBD>ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷶Χ<E9B7B6>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// if(socketid < WCHNET_MAX_SOCKET_NUM)
|
|||
|
|
// {
|
|||
|
|
// WCHNET_ModifyRecvBuf(socketid, (uint32_t) SocketRecvBuf[socketid], RECE_BUF_LEN);
|
|||
|
|
// }
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
printf("TCP Connect Success\r\n");
|
|||
|
|
printf("socket id: %d\r\n", socket[i]);
|
|||
|
|
}
|
|||
|
|
if (intstat & SINT_STAT_DISCONNECT) //disconnect
|
|||
|
|
{
|
|||
|
|
for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) { //delete disconnected socket id
|
|||
|
|
if (socket[i] == socketid) {
|
|||
|
|
socket[i] = 0xff;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
printf("TCP Disconnect\r\n");
|
|||
|
|
}
|
|||
|
|
if (intstat & SINT_STAT_TIM_OUT) //timeout disconnect
|
|||
|
|
{
|
|||
|
|
for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) { //delete disconnected socket id
|
|||
|
|
if (socket[i] == socketid) {
|
|||
|
|
socket[i] = 0xff;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
printf("TCP Timeout\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_Get_PHY_Linked_Status
|
|||
|
|
* Description : <EFBFBD><EFBFBD>ȡPHY<EFBFBD><EFBFBD>·״̬
|
|||
|
|
* Return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PHY״̬<EFBFBD><EFBFBD> 0x00 - PHY Link Succ,0x01 - PHY Link Fail
|
|||
|
|
*******************************************************************************/
|
|||
|
|
uint8_t WCHNET_Get_PHY_Linked_Status(void)
|
|||
|
|
{
|
|||
|
|
uint16_t rev = 0;
|
|||
|
|
rev = WCHNET_GetPHYStatus();
|
|||
|
|
|
|||
|
|
if(rev & PHY_Linked_Status) return 0x00;
|
|||
|
|
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_HandleGlobalInt
|
|||
|
|
* Description : Global Interrupt Handle
|
|||
|
|
*******************************************************************************/
|
|||
|
|
void WCHNET_HandleGlobalInt(void)
|
|||
|
|
{
|
|||
|
|
uint8_t intstat;
|
|||
|
|
uint16_t i;
|
|||
|
|
uint8_t socketint;
|
|||
|
|
|
|||
|
|
intstat = WCHNET_GetGlobalInt(); //get global interrupt flag
|
|||
|
|
if (intstat & GINT_STAT_UNREACH) //Unreachable interrupt
|
|||
|
|
{
|
|||
|
|
printf("GINT_STAT_UNREACH\r\n");
|
|||
|
|
}
|
|||
|
|
if (intstat & GINT_STAT_IP_CONFLI) //IP conflict
|
|||
|
|
{
|
|||
|
|
printf("GINT_STAT_IP_CONFLI\r\n");
|
|||
|
|
}
|
|||
|
|
if (intstat & GINT_STAT_PHY_CHANGE) //PHY status change
|
|||
|
|
{
|
|||
|
|
i = WCHNET_GetPHYStatus();
|
|||
|
|
if (i & PHY_Linked_Status) Dbg_Println(DBG_BIT_NET_STATUS_bit,"PHY Link Success");
|
|||
|
|
else{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѱγ<D1B0>
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"PHY<EFBFBD>Ͽ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
server_info.init_flag = 0; //PHY<48>Ͽ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LOG_SYS_PHY_Change_Record(0x00); //<2F><><EFBFBD>߰γ<DFB0>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (intstat & GINT_STAT_SOCKET) { //socket related interrupt
|
|||
|
|
for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {
|
|||
|
|
socketint = WCHNET_GetSocketInt(i);
|
|||
|
|
if (socketint)
|
|||
|
|
WCHNET_HandleSockInt(i, socketint);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_DHCPCallBack
|
|||
|
|
* Description : DHCPCallBack
|
|||
|
|
* Input :
|
|||
|
|
status - status returned by DHCP
|
|||
|
|
arg - Data returned by DHCP
|
|||
|
|
* Return : DHCP status
|
|||
|
|
*******************************************************************************/
|
|||
|
|
uint8_t WCHNET_DHCPCallBack(uint8_t status, void *arg)
|
|||
|
|
{
|
|||
|
|
uint8_t *p;
|
|||
|
|
uint8_t tmp[4] = {0, 0, 0, 0};
|
|||
|
|
|
|||
|
|
if(!status)
|
|||
|
|
{
|
|||
|
|
p = arg;
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP Success");
|
|||
|
|
/*If the obtained IP is the same as the last IP, exit this function.*/
|
|||
|
|
if(!memcmp(g_netinfo.device_ip, p ,sizeof(IPAddr))) {
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP <20><>ȡIP<49>뵱ǰIP<49><50>ͬ!");
|
|||
|
|
return ETH_SUCCESS;
|
|||
|
|
}
|
|||
|
|
/*Determine whether it is the first successful IP acquisition*/
|
|||
|
|
if(memcmp(g_netinfo.device_ip, tmp ,sizeof(IPAddr))){
|
|||
|
|
/*The obtained IP is different from the last value,
|
|||
|
|
* then disconnect the last connection.*/
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP <20><>ȡIP<49>뵱ǰIP<49><50>ͬ <20>Ͽ<EFBFBD>TCP<43><50><EFBFBD><EFBFBD>\r\n");
|
|||
|
|
|
|||
|
|
WCHNET_SocketClose(SocketId, TCP_CLOSE_NORMAL); //<2F>ر<EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD>DHCP<43><50><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>йأ<D0B9>ɾ<EFBFBD><C9BE><EFBFBD>ᵼ<EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
|||
|
|
}
|
|||
|
|
memcpy(g_netinfo.device_ip, p, 4);
|
|||
|
|
memcpy(g_netinfo.gateway, &p[4], 4);
|
|||
|
|
memcpy(g_netinfo.subnet, &p[8], 4);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"IPAddr = %d.%d.%d.%d ", g_netinfo.device_ip[0], g_netinfo.device_ip[1], g_netinfo.device_ip[2], g_netinfo.device_ip[3]);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"GWIPAddr = %d.%d.%d.%d ", g_netinfo.gateway[0], g_netinfo.gateway[1], g_netinfo.gateway[2], g_netinfo.gateway[3]);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"IPMask = %d.%d.%d.%d ", g_netinfo.subnet[0], g_netinfo.subnet[1], g_netinfo.subnet[2], g_netinfo.subnet[3]);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS2: %d.%d.%d.%d ", p[16], p[17], p[18], p[19]);
|
|||
|
|
|
|||
|
|
WCHNET_DHCPStop(); //<2F>ر<EFBFBD>DHCP<43><50><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
server_info.net_retry_num = 0;
|
|||
|
|
|
|||
|
|
server_info.net_sta = NET_SOCKET_WAIT;
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
|
|||
|
|
return ETH_SUCCESS;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
/*DHCP<43><50>ȡʧ<C8A1><CAA7> */
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP Fail %02x ", status);
|
|||
|
|
/*Determine whether it is the first successful IP acquisition*/
|
|||
|
|
if(memcmp(IPAddr, tmp ,sizeof(IPAddr))){
|
|||
|
|
/*The obtained IP is different from the last value*/
|
|||
|
|
//WCHNET_SocketClose(SocketId, TCP_CLOSE_NORMAL);
|
|||
|
|
}
|
|||
|
|
return ETH_ERROR;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_DNSCallBack_1
|
|||
|
|
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
name - DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ipaddr - DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
|
|||
|
|
* Return : DHCP status
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void WCHNET_DNSCallBack_1(const char *name, uint8_t *ipaddr, void *callback_arg)
|
|||
|
|
{
|
|||
|
|
if(ipaddr == NULL)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num++;
|
|||
|
|
if(server_info.net_retry_num >= 3)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num = 0;
|
|||
|
|
server_info.net_sta = NET_TFTP; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
}
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DNS Fail\r\n");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server_info.dis_ip[0] = ipaddr[0];
|
|||
|
|
server_info.dis_ip[1] = ipaddr[1];
|
|||
|
|
server_info.dis_ip[2] = ipaddr[2];
|
|||
|
|
server_info.dis_ip[3] = ipaddr[3];
|
|||
|
|
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"Host Name = %s\r\n", name);
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"IP= %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
|
|||
|
|
|
|||
|
|
if(callback_arg != NULL)
|
|||
|
|
{
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"callback_arg = %02x\r\n", (*(uint8_t *)callback_arg));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
|
|||
|
|
server_info.server_dns_flag = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>־λ
|
|||
|
|
server_info.net_sta = NET_TFTP; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_DNSCallBack_2
|
|||
|
|
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TFTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
name - DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ipaddr - DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
|
|||
|
|
* Return : DHCP status
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void WCHNET_DNSCallBack_2(const char *name, uint8_t *ipaddr, void *callback_arg)
|
|||
|
|
{
|
|||
|
|
if(ipaddr == NULL)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num++;
|
|||
|
|
if(server_info.net_retry_num >= 3)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num = 0;
|
|||
|
|
server_info.net_sta = NET_COMPLETE;
|
|||
|
|
server_info.init_flag = 0x01;
|
|||
|
|
}
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DNS Fail\r\n");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server_info.tftp_ip[0] = ipaddr[0];
|
|||
|
|
server_info.tftp_ip[1] = ipaddr[1];
|
|||
|
|
server_info.tftp_ip[2] = ipaddr[2];
|
|||
|
|
server_info.tftp_ip[3] = ipaddr[3];
|
|||
|
|
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"Host Name = %s\r\n", name);
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"IP= %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
|
|||
|
|
if(callback_arg != NULL)
|
|||
|
|
{
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"callback_arg = %02x\r\n", (*(uint8_t *)callback_arg));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
|
|||
|
|
server_info.tftp_dns_flag = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>־λ
|
|||
|
|
server_info.net_sta = NET_COMPLETE;
|
|||
|
|
server_info.init_flag = 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_DNSCallBack_3
|
|||
|
|
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TFTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - TFTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
name - DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ipaddr - DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
|
|||
|
|
* Return : DHCP status
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void WCHNET_DNSCallBack_3(const char *name, uint8_t *ipaddr, void *callback_arg)
|
|||
|
|
{
|
|||
|
|
if(ipaddr == NULL)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num++;
|
|||
|
|
if(server_info.net_retry_num >= 3)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num = 0;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DNS Fail\r\n");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server_info.tftp_ip[0] = ipaddr[0];
|
|||
|
|
server_info.tftp_ip[1] = ipaddr[1];
|
|||
|
|
server_info.tftp_ip[2] = ipaddr[2];
|
|||
|
|
server_info.tftp_ip[3] = ipaddr[3];
|
|||
|
|
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"Host Name = %s\r\n", name);
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"IP= %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
|
|||
|
|
if(callback_arg != NULL)
|
|||
|
|
{
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"callback_arg = %02x\r\n", (*(uint8_t *)callback_arg));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
|
|||
|
|
server_info.tftp_dns_flag = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>־λ
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : is_valid_domain
|
|||
|
|
* Description : <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
domain - <EFBFBD><EFBFBD>Ҫ<EFBFBD>жϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Return : 0x00:<EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x01:<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t is_valid_domain(const char *domain)
|
|||
|
|
{
|
|||
|
|
const char *c = domain;
|
|||
|
|
int parts = 0;
|
|||
|
|
int dashes = 0;
|
|||
|
|
|
|||
|
|
//Dbg_Println(DBG_BIT_NET_STATUS_bit,"is_valid_domain_0:%s",domain);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
if (strstr(domain, "..") || strstr(domain, "--"))
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"is_valid_domain_1");
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ַ<EFBFBD>
|
|||
|
|
while (*c)
|
|||
|
|
{
|
|||
|
|
if (isalpha(*c) || isdigit(*c) || *c == '-' || *c == '.')
|
|||
|
|
{
|
|||
|
|
if (*c == '-')
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
if (c == domain || *(c + 1) == '\0' || dashes == 0)
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"is_valid_domain_2");
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
dashes = 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
dashes = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20>Ƿ<EFBFBD><C7B7>ַ<EFBFBD>
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"is_valid_domain_3:%c",*c);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (*c == '.')
|
|||
|
|
{
|
|||
|
|
parts++; // <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (c == domain || *(c + 1) == '\0')
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>Ϊ<EFBFBD><CEAA>
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"is_valid_domain_4");
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
c++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD> example.com<6F><6D>
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"is_valid_domain_5:%d",parts);
|
|||
|
|
|
|||
|
|
if(parts > 1)
|
|||
|
|
{
|
|||
|
|
return 0x00; //<2F>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}else {
|
|||
|
|
return 0x01; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : NetWork_Parameter_Get
|
|||
|
|
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input : None
|
|||
|
|
* Output : None
|
|||
|
|
* Return : None
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void NetWork_Parameter_Get(void)
|
|||
|
|
{
|
|||
|
|
uint8_t Arge_Flag = 0;
|
|||
|
|
uint32_t temp = 0;
|
|||
|
|
|
|||
|
|
/*<2A>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ΪĬ<CEAA><C4AC>IP<49><50>ַ*/
|
|||
|
|
Arge_Flag = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_NetInfo_EN_OFFSET + 1);
|
|||
|
|
if(Arge_Flag == 0x01)
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"NET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>PC<50><43><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>!");
|
|||
|
|
SRAM_DMA_Read_Buff(g_netinfo.device_ip, 4, SRAM_Register_Start_ADDRESS + Register_NetIP_OFFSET);
|
|||
|
|
SRAM_DMA_Read_Buff(g_netinfo.gateway,4,SRAM_Register_Start_ADDRESS + Register_NetGateway_OFFSET);
|
|||
|
|
SRAM_DMA_Read_Buff(g_netinfo.subnet,4,SRAM_Register_Start_ADDRESS + Register_NetMask_OFFSET);
|
|||
|
|
SRAM_DMA_Read_Buff(g_netinfo.dns_server_ip,4,SRAM_Register_Start_ADDRESS + Register_DNSServerIP_OFFSET);
|
|||
|
|
}else {
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"NET <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>!");
|
|||
|
|
//MCU<43><55>ʼ<EFBFBD><CABC>IP
|
|||
|
|
g_netinfo.device_ip[0] = 192;
|
|||
|
|
g_netinfo.device_ip[1] = 168;
|
|||
|
|
g_netinfo.device_ip[2] = MACAddr[4];
|
|||
|
|
g_netinfo.device_ip[3] = MACAddr[5];
|
|||
|
|
//MCU<43><55>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
g_netinfo.gateway[0] = 192;
|
|||
|
|
g_netinfo.gateway[1] = 168;
|
|||
|
|
g_netinfo.gateway[2] = MACAddr[4];
|
|||
|
|
g_netinfo.gateway[3] = 1;
|
|||
|
|
//MCU<43><55>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_netinfo.subnet[0] = 255;
|
|||
|
|
g_netinfo.subnet[1] = 255;
|
|||
|
|
g_netinfo.subnet[2] = 0;
|
|||
|
|
g_netinfo.subnet[3] = 0;
|
|||
|
|
//MCU DNS<4E><53>ַ
|
|||
|
|
g_netinfo.dns_server_ip[0] = 223;
|
|||
|
|
g_netinfo.dns_server_ip[1] = 5;
|
|||
|
|
g_netinfo.dns_server_ip[2] = 5;
|
|||
|
|
g_netinfo.dns_server_ip[3] = 5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*<2A><><EFBFBD><EFBFBD>DHCP*/
|
|||
|
|
if(SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_NetInfo_EN_OFFSET) != 0x02)
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>!");
|
|||
|
|
server_info.dhcp_en = 0x01;
|
|||
|
|
}else{ /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DHCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
|||
|
|
server_info.dhcp_en = 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*<2A>жϵ<D0B6>ǰʹ<C7B0>ñ<EFBFBD><C3B1>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
temp = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_NetInfo_EN_OFFSET + 2);
|
|||
|
|
|
|||
|
|
if(temp == 0x01) //ʹ<>ñ<EFBFBD><C3B1>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
server_info.server_select = 0x01;
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"ʹ<EFBFBD>ñ<EFBFBD><EFBFBD>ض˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
}else //ʹ<><CAB9><EFBFBD>ƶ˶˷<CBB6><CBB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
server_info.server_select = 0x00;
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"ʹ<EFBFBD><EFBFBD><EFBFBD>ƶ˶˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(&tftp_log,0,sizeof(TFTP_LOG));
|
|||
|
|
|
|||
|
|
SRAM_DMA_Read_Buff((uint8_t*)&tftp_log.Time,2,SRAM_Register_Start_ADDRESS + Register_TFTPLOGTime_OFFSET);
|
|||
|
|
SRAM_DMA_Read_Buff((uint8_t*)&tftp_log.Port,2,SRAM_Register_Start_ADDRESS + Register_TFTPLOGPort_OFFSET);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"tftp log port:%d time:%dh",tftp_log.Port,tftp_log.Time);
|
|||
|
|
|
|||
|
|
if((tftp_log.Port == 0xFFFF) || (tftp_log.Port == 0x00))
|
|||
|
|
{
|
|||
|
|
tftp_log.Port = TFTP_Destination_Port;
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"tftp log default port:%d",tftp_log.Port);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if((tftp_log.Time == 0x00) || (tftp_log.Time > 720))
|
|||
|
|
{
|
|||
|
|
tftp_log.Time = 720; //1<><31><EFBFBD><EFBFBD>
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"tftp log default time:%dh",tftp_log.Time);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tftp_log.DN_Lens = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_TFTPDmLens_OFFSET);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"tftp log domain name lens:%d",tftp_log.DN_Lens);
|
|||
|
|
if(tftp_log.DN_Lens < DOMAINNAME_MAX)
|
|||
|
|
{
|
|||
|
|
SRAM_DMA_Read_Buff((uint8_t*)tftp_log.DomainName,tftp_log.DN_Lens,SRAM_Register_Start_ADDRESS + Register_TFTPDmName_OFFSET);
|
|||
|
|
tftp_log.DomainName[tftp_log.DN_Lens] = '\0';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if((tftp_log.DN_Lens == 0x00) || (is_valid_domain(tftp_log.DomainName) != 0x00)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD><C4AC>
|
|||
|
|
{
|
|||
|
|
tftp_log.DN_Lens = sizeof(TFTPSERVER_NAME_DNS);
|
|||
|
|
if(tftp_log.DN_Lens < DOMAINNAME_MAX)
|
|||
|
|
{
|
|||
|
|
memcpy(tftp_log.DomainName,(char*)TFTPSERVER_NAME_DNS,sizeof(TFTPSERVER_NAME_DNS));
|
|||
|
|
tftp_log.DomainName[tftp_log.DN_Lens] = '\0';
|
|||
|
|
}
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"tftp domain name err,use default:%s",tftp_log.DomainName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
server_info.udp_online_time = SRAM_Read_DW(SRAM_Register_Start_ADDRESS + Register_NetOfflineTime_OFFSET);
|
|||
|
|
if( (server_info.udp_online_time < 1000) || (server_info.udp_online_time > 7200000) )
|
|||
|
|
{
|
|||
|
|
server_info.udp_online_time = 600000;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡUDP <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
temp = SRAM_Read_DW(SRAM_Register_Start_ADDRESS + Register_UDPPeriodicTime_OFFSET);
|
|||
|
|
if( (temp < 10000) || (temp > 7200000) )
|
|||
|
|
{
|
|||
|
|
server_info.udp_periodic_time = 60;
|
|||
|
|
}else {
|
|||
|
|
server_info.udp_periodic_time = temp / 1000;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
temp = SRAM_Read_DW(SRAM_Register_Start_ADDRESS + Register_WebServerPort_OFFSET);
|
|||
|
|
if( (temp == 0x00) || (temp >= 0xFFFF) )
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڲ<CBBF><DAB2>Ϸ<EFBFBD><CFB7><EFBFBD>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD>϶˿<CFB6> 3339
|
|||
|
|
server_info.dis_port = SERVER_COMM_Port;
|
|||
|
|
}else {
|
|||
|
|
server_info.dis_port = temp & 0xFFFF;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_BLVServerDmName_OFFSET);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"BLVServerDmName lens:%d",temp);
|
|||
|
|
if(temp < DOMAINNAME_MAX)
|
|||
|
|
{
|
|||
|
|
memset(server_info.ServerDename,0,sizeof(server_info.ServerDename));
|
|||
|
|
SRAM_DMA_Read_Buff((uint8_t*)server_info.ServerDename,temp,SRAM_Register_Start_ADDRESS + Register_BLVServerDmName_OFFSET);
|
|||
|
|
server_info.ServerDename[temp] = '\0';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if((temp == 0x00) || (is_valid_domain((char *)server_info.ServerDename) != 0x00)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD><C4AC>
|
|||
|
|
{
|
|||
|
|
temp = sizeof(SERVER_NAME_DNS);
|
|||
|
|
if(temp < DOMAINNAME_MAX)
|
|||
|
|
{
|
|||
|
|
memcpy(server_info.ServerDename,(char*)SERVER_NAME_DNS,sizeof(SERVER_NAME_DNS));
|
|||
|
|
server_info.ServerDename[temp] = '\0';
|
|||
|
|
}
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"BLVServerDmName err,use default:%s",server_info.ServerDename);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MCU<EFBFBD><EFBFBD>ʼIP<EFBFBD><EFBFBD>ַ : %d.%d.%d.%d",g_netinfo.device_ip[0],g_netinfo.device_ip[1],g_netinfo.device_ip[2],g_netinfo.device_ip[3]);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MCU<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %d.%d.%d.%d",g_netinfo.gateway[0],g_netinfo.gateway[1],g_netinfo.gateway[2],g_netinfo.gateway[3]);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MCU<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %d.%d.%d.%d",g_netinfo.subnet[0],g_netinfo.subnet[1],g_netinfo.subnet[2],g_netinfo.subnet[3]);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"MCU DNS<4E><53>ַ : %d.%d.%d.%d",g_netinfo.dns_server_ip[0],g_netinfo.dns_server_ip[1],g_netinfo.dns_server_ip[2],g_netinfo.dns_server_ip[3]);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"TFTP Log Domain name:%s ",tftp_log.DomainName);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"BLVServerDmName : %s:%d ",server_info.ServerDename,server_info.dis_port);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"online_time:%d periodic_time:%d",server_info.udp_online_time,server_info.udp_periodic_time);
|
|||
|
|
LOG_SYS_NET_Argc_Init_Record(g_netinfo.device_ip,g_netinfo.gateway,g_netinfo.subnet,g_netinfo.dns_server_ip,Arge_Flag,server_info.dhcp_en,server_info.server_select);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_SocketInf_Printf
|
|||
|
|
* Description : WCH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ӡ
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void WCHNET_SocketInf_Printf(void)
|
|||
|
|
{
|
|||
|
|
for(uint8_t i=0;i<WCHNET_MAX_SOCKET_NUM;i++){
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"***************************");
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"ID:%d SocketID:%d ProtoType:%d Port:%d",i,SocketInf[i].SockIndex,SocketInf[i].ProtoType,SocketInf[i].DesPort);
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"***************************");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : WCHNET_LIB_Init
|
|||
|
|
* Description : WCH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t WCHNET_LIB_Init(void)
|
|||
|
|
{
|
|||
|
|
uint8_t rev = 0;
|
|||
|
|
|
|||
|
|
server_info.init_flag = 0; //<2F><><EFBFBD>翪ʼ<E7BFAA><CABC>ʼ<EFBFBD><CABC>
|
|||
|
|
server_info.register_num = 0;
|
|||
|
|
|
|||
|
|
server_info.dhcp_flg = 0;
|
|||
|
|
server_info.server_dns_flag = 0;
|
|||
|
|
server_info.tftp_dns_flag = 0;
|
|||
|
|
server_info.mqtt_dns_flag = 0;
|
|||
|
|
server_info.udp_sta = 0x01;
|
|||
|
|
server_info.Udp_Internal_sta = STA_INIT; //UDP<44><EFBFBD><D7BD><EFBFBD>״̬
|
|||
|
|
server_info.online_state = 0; //2023-10-07
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"WCHNET version:%x\n", WCHNET_GetVer());
|
|||
|
|
if (WCHNET_LIB_VER != WCHNET_GetVer()) {
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"version error.\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡоƬ<D0BE>Դ<EFBFBD><D4B4><EFBFBD>MAC <20><>ַ
|
|||
|
|
// GetMACAddress(MACAddr);
|
|||
|
|
// Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit, "NET MAC:", MACAddr, 6);
|
|||
|
|
|
|||
|
|
NetWork_Parameter_Get();
|
|||
|
|
|
|||
|
|
TIM2_Init();
|
|||
|
|
rev = ETH_LibInit(g_netinfo.device_ip, g_netinfo.gateway, g_netinfo.subnet, g_netinfo.mac_addr); //Ethernet library initialize
|
|||
|
|
mStopIfError(rev);
|
|||
|
|
if (rev != WCHNET_ERR_SUCCESS) {
|
|||
|
|
printf("WCHNET_LibInit Fail\r\n");
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("WCHNET_LibInit Success\r\n");
|
|||
|
|
|
|||
|
|
#if KEEPALIVE_ENABLE //Configure keep alive parameters
|
|||
|
|
{
|
|||
|
|
struct _KEEP_CFG cfg;
|
|||
|
|
|
|||
|
|
cfg.KLIdle = 20000;
|
|||
|
|
cfg.KLIntvl = 15000;
|
|||
|
|
cfg.KLCount = 9;
|
|||
|
|
WCHNET_ConfigKeepLive(&cfg);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
server_info.con_tick = SysTick_1s;
|
|||
|
|
|
|||
|
|
server_info.udp_sta = 0x01;
|
|||
|
|
server_info.register_num = 0x00;
|
|||
|
|
server_info.udp_timesync_cnt = 0x00;
|
|||
|
|
server_info.udp_periodic_cnt = 0x00;
|
|||
|
|
server_info.udp_idle_tick = SysTick_1ms;
|
|||
|
|
server_info.udp_send_flag = 0x00;
|
|||
|
|
|
|||
|
|
server_info.net_sta = NET_PHY_WAIT;
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
__attribute__((section(".non_0_wait"))) void NetWork_Task(void)
|
|||
|
|
{
|
|||
|
|
switch(server_info.net_sta)
|
|||
|
|
{
|
|||
|
|
case NET_INIT:
|
|||
|
|
/*WCH<43><48> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAC,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴθ<D9B4>λMAC*/
|
|||
|
|
WCHNET_LIB_Init();
|
|||
|
|
break;
|
|||
|
|
case NET_PHY_WAIT: //<2F>ȴ<EFBFBD>PHYЭ<59>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD>̲<EFBFBD><CCB2>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>罫<EFBFBD><E7BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if( WCHNET_Get_PHY_Linked_Status() == 0x01 )
|
|||
|
|
{
|
|||
|
|
if(SysTick_1ms - server_info.wait_cot > 30000)
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PHYЭ<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
server_info.net_sta = NET_WAIT_MAC_RESTART;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}else {
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѳ<EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
|
|||
|
|
WCHNET_CreateUdpSocket(&g_netinfo.SocketId[SocketIdnex_BLVSeriver], 3341, UDPSocket1_AppCallBack); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
server_info.online_state = 1; //2023-10-07
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
server_info.net_sta = NET_CON_WAIT;
|
|||
|
|
LOG_SYS_PHY_Change_Record(0x01); //<2F><><EFBFBD>߲<EFBFBD><DFB2><EFBFBD>
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case NET_WAIT_MAC_RESTART:
|
|||
|
|
if(SysTick_1ms - server_info.wait_cot > 2000)
|
|||
|
|
{
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
server_info.net_sta = NET_INIT;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case NET_CON_WAIT:
|
|||
|
|
if(SysTick_1ms - server_info.wait_cot > 200)
|
|||
|
|
{
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
if(server_info.dhcp_en == 0x01)
|
|||
|
|
{
|
|||
|
|
server_info.net_sta = NET_DHCP;
|
|||
|
|
}else {
|
|||
|
|
server_info.net_sta = NET_DNS;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case NET_DHCP: //<2F><><EFBFBD><EFBFBD>DHCP<43><50><EFBFBD><EFBFBD>ip
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DHCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
|
|||
|
|
|
|||
|
|
WCHNET_DHCPSetHostname("BLV_RCU");
|
|||
|
|
WCHNET_DHCPStart(WCHNET_DHCPCallBack); /* <20><><EFBFBD><EFBFBD>DHCP */
|
|||
|
|
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
server_info.net_sta = NET_DHCP_WAIT;
|
|||
|
|
break;
|
|||
|
|
case NET_DHCP_WAIT:
|
|||
|
|
if(SysTick_1ms - server_info.wait_cot >= 20000)
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP <20><>ʱ<EFBFBD><CAB1>%dms", SysTick_1ms - server_info.wait_cot);
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP<EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD>!");
|
|||
|
|
WCHNET_DHCPStop();
|
|||
|
|
server_info.net_retry_num++;
|
|||
|
|
server_info.net_sta = NET_DHCP;
|
|||
|
|
|
|||
|
|
if(server_info.net_retry_num >= 3)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num = 0;
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DHCP<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
|||
|
|
server_info.net_sta = NET_INIT; //DHCP<43><50><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
|
|||
|
|
WCHNET_SocketClose(g_netinfo.SocketId[SocketIdnex_BLVSeriver],0x00);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4>ڼ<EFBFBD><DABC>γ<EFBFBD><CEB3><EFBFBD><EFBFBD>ߣ<EFBFBD>PHY<48><59><EFBFBD>ӶϿ<D3B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪֹͣDHCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* */
|
|||
|
|
break;
|
|||
|
|
case NET_SOCKET_WAIT:
|
|||
|
|
if(SysTick_1ms - server_info.wait_cot >= 200)
|
|||
|
|
{
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DHCP<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
|||
|
|
WCHNET_CreateUdpSocket(&g_netinfo.SocketId[SocketIdnex_BLVSeriver], 3341, UDPSocket1_AppCallBack); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WCHNET_SocketInf_Printf();
|
|||
|
|
server_info.net_sta = NET_DNS;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case NET_DNS:
|
|||
|
|
if(server_info.server_select == 0x00)
|
|||
|
|
{
|
|||
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%s Flag:%d...\n",server_info.ServerDename,server_info.net_retry_flag);
|
|||
|
|
|
|||
|
|
//Set DNS server IP address, and DNS server port is 53
|
|||
|
|
if(server_info.net_retry_flag == 0x00) {
|
|||
|
|
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d.%d.%d.%d\n",g_netinfo.dns_server_ip[0],\
|
|||
|
|
g_netinfo.dns_server_ip[1],\
|
|||
|
|
g_netinfo.dns_server_ip[2],\
|
|||
|
|
g_netinfo.dns_server_ip[3]);
|
|||
|
|
|
|||
|
|
WCHNET_InitDNS(g_netinfo.dns_server_ip, Net_DNS_Port);
|
|||
|
|
}else if(server_info.net_retry_flag == 0x01) {
|
|||
|
|
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d.%d.%d.%d\n",g_netinfo.dns_server2_ip[0],\
|
|||
|
|
g_netinfo.dns_server2_ip[1],\
|
|||
|
|
g_netinfo.dns_server2_ip[2],\
|
|||
|
|
g_netinfo.dns_server2_ip[3]);
|
|||
|
|
|
|||
|
|
WCHNET_InitDNS(g_netinfo.dns_server2_ip, Net_DNS_Port);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server_info.dns_sta = 0x01;
|
|||
|
|
WCHNET_HostNameGetIp(server_info.ServerDename, RemoteIp, WCHNET_DNSCallBack_1, NULL); //Start DNS
|
|||
|
|
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
server_info.net_sta = NET_DNS_WAIT;
|
|||
|
|
}else if(server_info.server_select == 0x01)
|
|||
|
|
{
|
|||
|
|
/*<2A><><EFBFBD>ñ<EFBFBD><C3B1>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD> - ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>ʱû<CAB1><C3BB><EFBFBD><EFBFBD>*/
|
|||
|
|
|
|||
|
|
server_info.dis_ip[0] = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_WebServerIP_OFFSET + 0);
|
|||
|
|
server_info.dis_ip[1] = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_WebServerIP_OFFSET + 1);
|
|||
|
|
server_info.dis_ip[2] = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_WebServerIP_OFFSET + 2);
|
|||
|
|
server_info.dis_ip[3] = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_WebServerIP_OFFSET + 3);
|
|||
|
|
|
|||
|
|
server_info.server_dns_flag = 0x00;
|
|||
|
|
server_info.net_sta = NET_TFTP;
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d.%d.%d.%d",server_info.dis_ip[0],server_info.dis_ip[1],server_info.dis_ip[2],server_info.dis_ip[3]);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case NET_TFTP:
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%s Flag:%d...\n",tftp_log.DomainName,server_info.net_retry_flag);
|
|||
|
|
|
|||
|
|
//Set DNS server IP address, and DNS server port is 53
|
|||
|
|
if(server_info.net_retry_flag == 0x00) {
|
|||
|
|
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d.%d.%d.%d\n",g_netinfo.dns_server_ip[0],\
|
|||
|
|
g_netinfo.dns_server_ip[1],\
|
|||
|
|
g_netinfo.dns_server_ip[2],\
|
|||
|
|
g_netinfo.dns_server_ip[3]);
|
|||
|
|
|
|||
|
|
WCHNET_InitDNS(g_netinfo.dns_server_ip, Net_DNS_Port);
|
|||
|
|
}else if(server_info.net_retry_flag == 0x01) {
|
|||
|
|
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d.%d.%d.%d\n",g_netinfo.dns_server2_ip[0],\
|
|||
|
|
g_netinfo.dns_server2_ip[1],\
|
|||
|
|
g_netinfo.dns_server2_ip[2],\
|
|||
|
|
g_netinfo.dns_server2_ip[3]);
|
|||
|
|
|
|||
|
|
WCHNET_InitDNS(g_netinfo.dns_server2_ip, Net_DNS_Port);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server_info.dns_sta = 0x02;
|
|||
|
|
WCHNET_HostNameGetIp(tftp_log.DomainName, RemoteIp, WCHNET_DNSCallBack_2, NULL); //Start DNS
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
server_info.net_sta = NET_DNS_WAIT;
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
case NET_DNS_WAIT:
|
|||
|
|
if(SysTick_1ms - server_info.wait_cot >= 5000)
|
|||
|
|
{
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
|
|||
|
|
switch(server_info.dns_sta)
|
|||
|
|
{
|
|||
|
|
case 0x01:
|
|||
|
|
if(server_info.net_retry_num >= 3)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num = 0;
|
|||
|
|
|
|||
|
|
if(server_info.net_retry_flag == 0x00)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
|
server_info.net_retry_flag = 0x01;
|
|||
|
|
server_info.net_sta = NET_DNS;
|
|||
|
|
}else {
|
|||
|
|
//<2F><><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
|
server_info.net_retry_flag = 0x00;
|
|||
|
|
server_info.net_sta = NET_TFTP;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
}else {
|
|||
|
|
server_info.net_retry_num++;
|
|||
|
|
server_info.net_sta = NET_DNS;
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 0x02:
|
|||
|
|
if(server_info.net_retry_num >= 3)
|
|||
|
|
{
|
|||
|
|
server_info.net_retry_num = 0;
|
|||
|
|
|
|||
|
|
if(server_info.net_retry_flag == 0x00)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
|
server_info.net_retry_flag = 0x01;
|
|||
|
|
server_info.net_sta = NET_TFTP;
|
|||
|
|
}else {
|
|||
|
|
//<2F><><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
server_info.net_retry_flag = 0x00;
|
|||
|
|
server_info.net_sta = NET_COMPLETE;
|
|||
|
|
server_info.init_flag = 0x01;
|
|||
|
|
WCHNET_SocketInf_Printf();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
}else {
|
|||
|
|
server_info.net_retry_num++;
|
|||
|
|
server_info.net_sta = NET_TFTP;
|
|||
|
|
|
|||
|
|
WCHNET_DNSStop(); //stop DNS,and release socket
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4>ڼ<EFBFBD><DABC>γ<EFBFBD><CEB3><EFBFBD><EFBFBD>ߣ<EFBFBD>PHY<48><59><EFBFBD>ӶϿ<D3B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪֹͣDNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* */
|
|||
|
|
break;
|
|||
|
|
case NET_COMPLETE:
|
|||
|
|
|
|||
|
|
|
|||
|
|
//Udp_Internal_Task(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
|||
|
|
|
|||
|
|
if(SysTick_1s - server_info.con_tick > 10)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
|
server_info.con_tick = SysTick_1s;
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>紦<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// if(server_info.con_flag==0x01) //2023-05-27
|
|||
|
|
// {
|
|||
|
|
// if(SysTick_1s - server_info.con_tick > 10)
|
|||
|
|
// {
|
|||
|
|
// server_info.con_flag = 0x00;
|
|||
|
|
// server_info.con_tick = SysTick_1s;
|
|||
|
|
// server_info.init_flag = 0x00;
|
|||
|
|
// Dbg_Print(DBG_BIT_NET_STATUS_bit,"ֱ<><D6B1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
if(server_info.init_flag == 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
{
|
|||
|
|
Dbg_Print(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>MAC\n");
|
|||
|
|
|
|||
|
|
server_info.online_state = 0;
|
|||
|
|
server_info.wait_cot = SysTick_1ms;
|
|||
|
|
server_info.net_sta = NET_WAIT_MAC_RESTART;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD><D7BD><EFBFBD>*/
|
|||
|
|
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
WCHNET_SocketClose(g_netinfo.SocketId[SocketIdnex_BLVSeriver],0x00);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|