📄 udp.h
字号:
/***********************************************************************
Date: 2007 09 21
************************************************************************/
#ifndef UDP_H_
#define UDP_H_
#define HTYPE 0x01 /* 以太网类型 */
#define PTYPE 0x0800 /* IPV4类型 */
#define HLEN 0x06 /* 以太网硬件类型 */
#define PLEN 0x04 /* IPV4长度 */
#define OPER_REQUEST 0x01 /* ARP请求 */
#define OPER_APLY 0x02 /* ARP应答 */
//#define MORE_FRAGMENT 0x2000
#define NOD_ID_LENGTH 6 /* MAC地址长度 */
#define PACKET_LENGTH 1510 /* 数据长度,留出一些余量在计算校验和时防止数组越界 */
#define ETHER_HEAD_LEN 14 /* 以太网头 */
#define SEGMENT_DATA 2000 /* 分片数据缓冲大小 */
#define NET_SEND_BUFF 1510 /* 发送缓冲大小 */
#define IP_LEN 4
#define MAC_LEN 6
typedef struct
{
UWORK32 ulEthernetSendFrame; /* 以太网卡发送成功的帧数 */
UWORK32 ulEthernetSendDiscardFrame; /* 以太网卡发送丢弃的帧数 */
UWORK32 ulEthernetSendRepeat; /* 以太网发包的重发总次数 */
UWORK32 ulEthernetHardError; /* 接收时硬件出现错误 */
UWORK32 ulEthernetNextRegError; /* 读取下一页寄存器时出现错误 */
UWORK32 ulEthernetBnryRegError; /* Bnry寄存器出错 */
UWORK32 ulEthernetRcvFrame; /* 以太网卡接收的帧数 */
UWORK32 ulEthernetRcvBuffExhauste; /* 以太网接收缓冲用完次数 */
UWORK32 ulEthernetRcvBuffOverFlow; /* 以太网接收缓冲溢出 */
UWORK32 ulEthernetRcvError; /* 接收错误统计 */
UWORK32 ulEthernetCNTOverFlow; /* 计数器溢出 */
UWORK32 ulEthernetexcError1; /* 异常错误1 */
UWORK32 ulEthernetexcError2; /* 异常错误2 */
UWORK32 ulEthernetexcError3; /* 异常错误3 */
}ST_ETHERNET_STATISTICS;
/*************************************************************************************/
#define ARP_OLD_NUM 3 /* 老化后,ARP 3次不成功就要复位ARP */
/* 接收的以太网帧结构 */
typedef struct
{
UWORK8 ucaDestNodID[NOD_ID_LENGTH]; /* 目的网卡地址 */
UWORK8 ucaSourceNodID[NOD_ID_LENGTH]; /* 原网卡地址 */
UWORK16 usprotocol; /* 下一层协议 */
UWORK8 ucaPacket[PACKET_LENGTH]; /* 接收以太网包的内容 */
}ST_RECEIVE_ETHERNET;
#define HTTP_PORT 80
/*************************************************************************************/
/* ICMP报文头结构 */
typedef struct
{
UWORK8 ucType;
UWORK8 ucCode;
UWORK16 usCheckSum;
UWORK16 usID;
UWORK16 usSeqNum;
}ST_ICMP_HEAD_FORMAT;
#define ICMP_ECHO 8 /* 回送请求 */
#define ICMP_ECHO_REPLY 0 /* 回送回答 */
#define ICMP_ROUTER_RE 10 /* 路由询问 */
#define ICMP_ROUTER_REPLY 9 /* 路由通告 */
#define ICMP_ROUTER_CHANGE 5 /* 路由改变 */
#define ICMP_PORT_UNREACHABLE 3 /* 目的端口不可达 */
#define ICMP_SOURCE_QUENCH 4 /* 源端抑制 */
/* 目的端口不可达类型 */
#define NET_UNREACHABLE 0
#define HOST_UNREACHABLE 1
#define PROTOCAL_UNREACHABLE 2
#define PORT_UNREACHABLE 3
#define NET_UNKNOW 6
#define HOST_UNKNOW 7
#define NET_UNPEMETED 9
#define HOST_UNPEMETED 10
#define HOST_UNREACHABLE13 13
#define HOST_UNREACHABLE14 14
#define HOST_UNREACHABLE15 15
#define SOUECE_RESTRAIN_DELAY 3 /* 收到源端抑制后需要延时发送周期数 */
/*************************************************************************************/
#define CONFIG_PORT 65534 /* 广播配置端口 */
#define UDP_DATA_START 28 /* 28 = 20(IP头) + 8(UDP头) */
/* UDP报文头结构 */
typedef struct
{
UWORK16 usSourcePort;
UWORK16 usDesPort;
UWORK16 usTotalLen;
UWORK16 usCheckSum;
}ST_UDP_HEAD_FORMAT;
typedef struct
{
UWORK32 ulUDPSendDataNum; /* UDP发送的数据个数 */
UWORK32 ulUDPReceiveDataNum; /* UDP接收的数据个数 */
UWORK32 ulUDPPortError; /* UDP报文中端口号错误次数 */
UWORK32 ulUDPCheckSumError; /* UDP报文中校验和错误次数 */
}ST_UDP_STATISTICS;
/*************************************************************************************/
#define COMMAND_START_ADDR 60 /* 配置报文命令位置 */
#define SAVE_OK 61 /* 保存成功 */
#define EQUNAME_LEN 61 /* 1个字节,名字长度 */
#define EUQ_NAME 62 /* 15个字节作为名字空间 */
#define IP_MODE 77 /* 1个字节,IP模式 */
#define MAC_ADDR 78 /* 6个字节,MAC地址 */
#define IP_ADDR 84 /* 4个字节,本地IP地址 */
#define NET_MASK 88 /* 4个字节,子网掩码 */
#define GATE_WAY 92 /* 4个字节,网关 */
#define REMOTE_IPADDR1 96 /* 4个字节,远程IP1 */
#define LOCAL_PORT 100 /* 2个字节,本地端口号 */
#define REMOTE_PORT1 102 /* 2个字节,远程端口号1 */
/* 保留64个字节 */
#define BAUND_RATE 168 /* 1个字节,波特率 */
/* 保留32个字节 */
#define RUN_DAYS 201 /* 2个字节,运行天数 */
#define RUN_HOURS 203 /* 1个字节,小时数 */
#define RUN_MINUTES 204 /* 1个字节,分钟数 */
#define RUN_SECONDS 205 /* 1个字节,秒数 */
#define UDP_RCV_BYTES 206 /* 4个字节,UDP接收字节数 */
#define UDP_SEND_BYTES 210 /* 4个字节,UDP发送字节数 */
#define UART_RCV_BYTES 214 /* 4个字节,串口接收字节数 */
#define UART_SEND_BYTES 218 /* 4个字节,串口发送字节数 */
#define UART_RCV_SOFT_OVERFLOW 222 /* 4个字节,串口接收软件溢出 */
#define UART_SEND_SOFT_OVERFLOW 226 /* 4个字节,串口发送软件溢出 */
#define HARD_SOFT_EIDTION 230 /* 7个字节版本号,ASCII码 */
/* 保留100个字节 */
#define END_PARA 300 /* */
/* 收到配置软件的参数配置请求命令 */
#define BROADCAST_SEARCH 0x00 /* 广播搜索 */
#define CONFIG_REQUEST 0x02 /* 请求配置 */
#define SAVE_NET_CONFIG 0x04 /* 保存网口配置 */
#define REFLESH_STATISTIC 0x06 /* 刷新统计信息 */
#define CLEAR_STATISTIC 0x08 /* 清零统计信息请求 */
#define RESET_SYSTEM 0x0a /* 复位系统 */
/* 发给配置软件的命令 */
#define REPLY_BROADCAST 0x01 /* 广播搜索回应 */
#define REPLY_CONFIG 0x03 /* 配置请求回应 */
#define REPLY_SAVE_NETCONFIG 0x05 /* 保存网口配置回应 */
#define REPLY_FLESH 0x07 /* 刷新应答 */
#define REPLY_CLEAR_STATISTIC 0x09 /* 清零统计信息应答 */
extern xdata UWORK8 MAC_Remote_buf[ETHER_HEAD_LEN]; // 以太网头(目的MAC,源MAC,协议)
extern xdata UWORK8 NetSend_buf[NET_SEND_BUFF]; // 以太网发送缓冲
extern bit EthernetBuf0DataFlag; // 以太网卡缓冲0已有数据 */
extern bit EthernetLinkFlag; /* 以太网是否LINK上 */
extern bit EthernetNoDataFlag; /* 以太网芯片中没有数据 */
extern UWORK16 RTL8019asRcvNum; /* 在缓存中以太网包的个数,16K存满64页,每页256字节 */
extern xdata ST_RECEIVE_ETHERNET gstaRevEthernet; /* 接收以太网包 */
extern xdata ST_ETHERNET_STATISTICS gstEthernetStatistics; /* 以太网卡收发统计 */
extern xdata UWORK8 gucaTmacSmacType[ETHER_HEAD_LEN]; /* 以太网头(目的MAC,源MAC,协议) */
extern xdata UWORK8 gucaNetSendBuff[NET_SEND_BUFF]; /* 以太网发送缓冲 */
extern xdata UWORK8 gucaSegTemp[SEGMENT_DATA]; /* 分片数据 */
/************************************************************************/
extern UWORK8 IpModeNum; /* 在不同模式下IP数据不一样 */
extern UWORK8 ArpCachePoniter; /* ARP高速缓存指针 */
extern xdata UWORK8 gucARPOddNum; /* 老化后,ARP完不成的次数 */
/************************************************************************/
extern xdata UWORK16 LocalIpID; /* 本地IP的ID号 */
extern xdata UWORK16 RevIpID; /* 接收的ID号 */
extern bit gbMoreSegFlag; /* 还有更多的分片标志 */
extern bit gbHaveFragment; /* 有分片标志 */
/***********************************************************************/
extern xdata UWORK8 SetupIP_RcvSignal[32]; /* 接收前导和标志信号 */
extern xdata UWORK8 SetupIP_SendSignal[32]; /* 发送前导和标志信号 */
extern xdata ST_UDP_STATISTICS gstUDPStatistics; /* UDP统计 */
extern void UDPConfigSend(UWORK16 usUdpDataLen);
extern void UdpReceive(void);
extern void UdpSend(UWORK8 *pucAddr,UWORK16 usLen);
#endif
/*************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -