📄 udp.c
字号:
/********************************************************************
* File: UDP.c
*
* Copyright: Peak Microtech Corporation
*
*******************************************************************/
#define UDP_GLOBALS
#include "net_cfg.h"
void Process_Udp()
{
union Ip_Address_Type ip;
uint ii;
U16 count;
if(VerifyUdpCrc())
{
if (converU16(RxdNetBuff.UdpFrame.DestPort) == 1025)
{
UartPrintfCh1("\r\nUDP: SourceIP=");
ip.words[0] = RxdNetBuff.IpFrame.SourceIp[0];
ip.words[1] = RxdNetBuff.IpFrame.SourceIp[1];
Printf_IPStr(ip);
UartPrintfCh1(" DestIP=");
ip.words[0] = RxdNetBuff.IpFrame.DestId[0];
ip.words[1] = RxdNetBuff.IpFrame.DestId[1];
Printf_IPStr(ip);
UartPrintfCh1("\r\nUDP: DestPort=");
Printf_PortStr(converU16(RxdNetBuff.UdpFrame.DestPort));
UartPrintfCh1(" SourcePort=");
Printf_PortStr(converU16(RxdNetBuff.UdpFrame.SourcePort));
UartPrintfCh1(" Length=");
count = converU16(RxdNetBuff.UdpFrame.length);
Printf_PortStr(count);
UartPrintfCh1("\r\nUDP: Data=");
for (ii = 0; ii < converU16(RxdNetBuff.UdpFrame.length) - 8; ii++)
//8 bytes udp head
{
UartTxCharCh1(RxdNetBuff.UdpFrame.udpdata[ii]);
}
}
}
}
void Udp_Request(ulong ip_address, uint portnumber)
{
uchar i;
uint ii;
uint datalength;
for (i = 0; i < 3; i++)
{
TxdNetBuff.EtherFrame.DestMacId[i] = Ping_MAC.words[i];
}
TxdNetBuff.EtherFrame.NextProtocal = 0x0008; //IP protocol ID
TxdNetBuff.UdpFrame.SourcePort = converU16(MY_UDP_PORT); // default udp prot: 1025
TxdNetBuff.UdpFrame.DestPort = converU16(portnumber);
TxdNetBuff.IpFrame.DestId[0] = ip_address &0xffff;
TxdNetBuff.IpFrame.DestId[1] = ip_address >> 16;
TxdNetBuff.IpFrame.SourceIp[0] = My_Ip_Address.words[0];
TxdNetBuff.IpFrame.SourceIp[1] = My_Ip_Address.words[1];
TxdNetBuff.IpFrame.ttl = 0;
TxdNetBuff.IpFrame.NextProtocal = 17; // UDP protocol code = 17
datalength = Command_Buf[1] *256+Command_Buf[2];
for (ii = 0, i = Command_Buf[0]; ii < datalength; ii++)
{
TxdNetBuff.UdpFrame.udpdata[ii] = Command_Buf[ii + i];
}
datalength = datalength + 8;
TxdNetBuff.IpFrame.Crc = datalength << 8;
TxdNetBuff.UdpFrame.length = converU16(datalength);
TxdNetBuff.UdpFrame.Crc = 0;
TxdNetBuff.UdpFrame.Crc = CreateUdpCrc();
Create_Ip_Frame(datalength, ip_address &0xffff, ip_address >> 16, 17);
}
void Process_Udp_Command()
{
if (Udp_Count > 0)
{
Udp_Count--;
if (Udp_Count > 0)
{
if (Ping_IP_TTL > 0)
{
// IP address has been parse
Udp_Request(Ping_Ip_Address.dwords, RemotePort.word);
Udp_Count = 0;
}
else
{
Arp_Request(Ping_Ip_Address.dwords);
}
if (Ping_Ip_Address.dwords == My_Ip_Address.dwords)
{
// Ping IP == MY IP
UartPrintfCh1("\r\nError! Cannot connect Local,Please Try Other IP");
Udp_Count = 0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -