📄 udp.c
字号:
#include "main.h"
#include "rtl8019as.h"
#include "arp.h"
#include "ip.h"
#include "icmp.h"
#include "udp.h"
void udp_init(void)
{
udpbuffer_in_p=0;
udpbuffer_in_rp=0;
}
unsigned char udp_packhandle(unsigned char *udpbegin,unsigned int udplen)
{
unsigned char udp_ok=0;
unsigned int des_port=0;
unsigned int i=0;
to_udpport=*udpbegin;
to_udpport<<=8;
to_udpport|=*(udpbegin+1);
des_port=*(udpbegin+2);
des_port<<=8;
des_port|=*(udpbegin+3);
udpdatalen=*(udpbegin+4);
udpdatalen<<=8;
udpdatalen|=*(udpbegin+5);
udpdatalen-=8;
//*(udpbegin+6)=0;
//*(udpbegin+7)=0;
switch(des_port)
{
case localport_udp_port00: //端口0 使用内部RAM
if(udpdatalen>1024){return udp_ok;break;}
for(;i<udpdatalen;i++)
{
udpbuffer_in[udpbuffer_in_p]=*(udpbegin+8+i);
udpbuffer_in_p++;
if(udpbuffer_in_p>=1024){udpbuffer_in_p=0;}
}
udp_ok=1;
break;
case localport_udp_port01: //端口1 使用外部RAM
for(;i<udpdatalen;i++)
{
udpbuffer_ex[i]=*(udpbegin+8+i);
}
udp_ok=1;
break;
case localport_udp_port02: //端口2
led_cont(*(udpbegin+8));
break;
case localport_udp_port03: //端口3
break;
}
return udp_ok;
}
unsigned int udp_readdata(void)
{
unsigned int data=0;
if(udpbuffer_in_p==udpbuffer_in_rp){return 0;} //没有新数据则返回0
data=(udpbuffer_in[udpbuffer_in_rp]&0xFF);
data|=0x8000; //有新数据则置位最高位作为标记
udpbuffer_in_rp++;
if(udpbuffer_in_rp>=1024){udpbuffer_in_rp=0;}
return data;
}
void udp_buildpack(unsigned char *udpsendbuffer,
unsigned int len,
unsigned int localport,
unsigned int remoteport)
{
*udpsendbuffer=(localport>>8); //源端口
*(udpsendbuffer+1)=(localport&0xFF);
*(udpsendbuffer+2)=(remoteport>>8); //目的端口
*(udpsendbuffer+3)=(remoteport&0xFF);
//if(len&0x01) //如果长度为奇数字节则填充一字节
//{
// len++;
// *(udpsendbuffer+8+len)=0xFF;
//}
*(udpsendbuffer+4)=(len>>8);
*(udpsendbuffer+5)=(len&0xFF);
*(udpsendbuffer+6)=0x00; //不进行校验
*(udpsendbuffer+7)=0x00;
}
void udp_builddata(unsigned char *udpsendbuffer,unsigned char *udpsenddata,unsigned int len)
{
unsigned int i=8;
unsigned int i_d=0;
len+=8;
for(;i<len;i++)
{
*(udpsendbuffer+i)=*(udpsenddata+i_d);
i_d++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -