📄 tcptask.h
字号:
#include <stdlib.h>
#include "xlcd.h"
#include "Compiler.h"
#include "mac2.h"
#include "usart.h"
#include "delays.h"
#define MCHP_C18
#define USE_DEMO
#define TICK_H
#define ARP_H
#define IP_H
#define ICMP_H
#define MAC_H
#define BAUD_RATE (19200) // bps
#define TICKS_PER_SECOND (100)
#define TICK_PRESCALE_VALUE (256)
#define ARP_REPLY (0x00)
#define ARP_REQUEST (0x01)
#define ARP_UNKNOWN (0x02)
#define IP_PROT_ICMP (1)
#define IP_PROT_TCP (6)
#define IP_PROT_UDP (17)
#define CLOCK_FREQ (20000000)
#define MAC_IP (0)
#define MAC_ARP (0x6)
#define MAC_UNKNOWN (0x0ff)
#define MAX_ICMP_DATA (32)
#define MAX_ICMP_DATA_LEN (32)
#if !defined(STACK_USE_SLIP)
#define MAC_TX_BUFFER_SIZE (1024)
#define MAC_TX_BUFFER_COUNT (1)
#else
#define MAC_TX_BUFFER_SIZE (250)
#define MAC_TX_BUFFER_COUNT (1)
#endif
#define MAC_RX_BUFFER_SIZE (MAC_TX_BUFFER_SIZE)
#if (MAC_TX_BUFFER_SIZE <= 0 || MAC_TX_BUFFER_SIZE > 1500 )
#error Invalid MAC_TX_BUFFER_SIZE value specified.
#endif
#if ( (MAC_TX_BUFFER_SIZE * MAC_TX_BUFFER_COUNT) > (4* 1024) )
#error Not enough room for Receive buffer.
#endif
#define MY_DEFAULT_IP_ADDR_BYTE1 (192)
#define MY_DEFAULT_IP_ADDR_BYTE2 (168)
#define MY_DEFAULT_IP_ADDR_BYTE3 (23)
#define MY_DEFAULT_IP_ADDR_BYTE4 (98)
#define MY_DEFAULT_MASK_BYTE1 (0xff)
#define MY_DEFAULT_MASK_BYTE2 (0xff)
#define MY_DEFAULT_MASK_BYTE3 (0xff)
#define MY_DEFAULT_MASK_BYTE4 (0)
#define MY_DEFAULT_MAC_BYTE1 (0x00)
#define MY_DEFAULT_MAC_BYTE2 (0x04)
#define MY_DEFAULT_MAC_BYTE3 (0xa3)
#define MY_DEFAULT_MAC_BYTE4 (0x00)
#define MY_DEFAULT_MAC_BYTE5 (0x09)
#define MY_DEFAULT_MAC_BYTE6 (0x53)
#define MY_IP_BYTE1 MY_DEFAULT_IP_ADDR_BYTE1
#define MY_IP_BYTE2 MY_DEFAULT_IP_ADDR_BYTE2
#define MY_IP_BYTE3 MY_DEFAULT_IP_ADDR_BYTE3
#define MY_IP_BYTE4 MY_DEFAULT_IP_ADDR_BYTE4
#define MY_MAC_BYTE1 MY_DEFAULT_MAC_BYTE1
#define MY_MAC_BYTE2 MY_DEFAULT_MAC_BYTE2
#define MY_MAC_BYTE3 MY_DEFAULT_MAC_BYTE3
#define MY_MAC_BYTE4 MY_DEFAULT_MAC_BYTE4
#define MY_MAC_BYTE5 MY_DEFAULT_MAC_BYTE5
#define MY_MAC_BYTE6 MY_DEFAULT_MAC_BYTE6
#define PARAM_SCLASS auto
#define Delay10us(us) Delay10TCYx(((CLOCK_FREQ/4000000)*us))
#define DelayMs(ms) Delay1KTCYx((((CLOCK_FREQ/1000)*ms)/4000))
#define TICK_SECOND ((TICK)TICKS_PER_SECOND)
void delay1kms();
#define TickGetDiff(a, b) (a-b)
#define MAX_SOCKETS (5)
#define INVALID_BUFFER (0xff)
#undef BOOL
#undef TRUE
#undef FALSE
#undef BYTE
#undef WORD
#undef DWORD
typedef enum _BOOL { FALSE = 0, TRUE } BOOL;
typedef unsigned char BYTE; // 8-bit
typedef unsigned short int WORD; // 16-bit
typedef unsigned short long SWORD; // 24-bit
typedef unsigned long DWORD; // 32-bit
typedef unsigned long TICK;
typedef BYTE BUFFER;
typedef union _BYTE_VAL
{
struct
{
unsigned int b0:1;
unsigned int b1:1;
unsigned int b2:1;
unsigned int b3:1;
unsigned int b4:1;
unsigned int b5:1;
unsigned int b6:1;
unsigned int b7:1;
} bits;
BYTE Val;
} BYTE_VAL;
typedef union _SWORD_VAL
{
SWORD Val;
struct
{
BYTE LSB;
BYTE MSB;
BYTE USB;
} bytes;
} SWORD_VAL;
typedef union _WORD_VAL
{
WORD Val;
struct
{
BYTE LSB;
BYTE MSB;
} byte;
BYTE v[2];
} WORD_VAL;
typedef union _DWORD_VAL
{
DWORD Val;
struct
{
BYTE LOLSB;
BYTE LOMSB;
BYTE HILSB;
BYTE HIMSB;
} byte;
struct
{
WORD LSW;
WORD MSW;
} word;
BYTE v[4];
} DWORD_VAL;
typedef struct _MAC_ADDR //存放物理地址的结构体
{
BYTE v[6];
} MAC_ADDR;
typedef union _IP_ADDR //存放IP地址的共用体
{
BYTE v[4];
DWORD Val;
} IP_ADDR;
typedef struct _NODE_INFO //NODE_INFO包括IP和MAC
{
MAC_ADDR MACAddr;
IP_ADDR IPAddr;
} NODE_INFO;
typedef struct _IP_HEADER
{
BYTE VersionIHL;
BYTE TypeOfService;
WORD TotalLength;
WORD Identification;
WORD FragmentInfo;
BYTE TimeToLive;
BYTE Protocol;
WORD HeaderChecksum;
IP_ADDR SourceAddress;
IP_ADDR DestAddress;
} IP_HEADER;
typedef struct _ICMP_PACKET
{
BYTE Type;
BYTE Code;
WORD Checksum;
WORD Identifier;
WORD SequenceNumber;
BYTE Data[MAX_ICMP_DATA];
} ICMP_PACKET;
typedef struct _RECEIVE_PACKET
{
NODE_INFO nodeinfo;
struct
{
unsigned int bislinking :1;
unsigned int untouch :1;
}flag;
}RECEIVE_PACKET;
typedef enum _ICMP_CODE
{
ICMP_ECHO_REPLY = 0,
ICMP_ECHO_REQUEST = 8
} ICMP_CODE, ICMP_REQUESTS;
BOOL ARPGet(NODE_INFO *remote, BYTE *opCode);
#define ARPIsTxReady() MACIsTxReady()
void ARPPut(NODE_INFO *remode, BYTE opCode);
void SwapICMPPacket(ICMP_PACKET* p);
#define IPPutArray(a, b) MACPutArray(a, b)
#define IPIsTxReady() MACIsTxReady()
WORD IPPutHeader(NODE_INFO *remote,BYTE protocol,WORD len);
BOOL IPGetHeader(IP_ADDR *localIP,NODE_INFO *remote,
BYTE *protocol,WORD *len);
#define IPSetTxBuffer(a, b) MACSetTxBuffer(a, b+sizeof(IP_HEADER))
#define IPSetRxBuffer(a) MACSetRxBuffer(a+sizeof(IP_HEADER))
void ICMPPut(NODE_INFO *remote,ICMP_CODE code,
BYTE *data,BYTE len,WORD id,WORD seq);
BOOL ICMPGet(ICMP_CODE *code,BYTE *data,
BYTE *len,WORD *id,WORD *seq);
void MACInit(void);
BOOL MACIsTxReady(void);
void MACSetTxBuffer(BUFFER buffer, WORD offset);
void MACSetRxBuffer(WORD offset);
void MACReserveTxBuffer(BUFFER buffer);
#define MACGetRxBuffer() (NICCurrentRdPtr)
#define MACGetTxBuffer() (NICCurrentTxBuffer)
#if !defined(THIS_IS_MAC_LAYER)
#if !defined(STACK_USE_SLIP)
extern BYTE NICCurrentTxBuffer;
extern BYTE NICCurrentRdPtr;
#else
#define NICCurrentTxBuffer (0)
#define NICCurrentRdPtr (0)
#endif
#endif
BYTE MACGet(void);
BOOL MACGetHeader(MAC_ADDR *remote, BYTE* type);
WORD MACGetArray(BYTE *val, WORD len);
void MACDiscardRx(void);
void MACDiscardTx(BUFFER buffer);
void MACPut(BYTE val);
void MACPutHeader(MAC_ADDR *remote,BYTE type,WORD dataLen);
void MACPutArray(BYTE *val, WORD len);
void MACFlush(void);
WORD swaps(WORD v);
DWORD swapl(DWORD v);
WORD CalcIPChecksum(BYTE* buffer, WORD count);
//void Delay10TCYx(PARAM_SCLASS unsigned char);
//void Delay1KTCYx(PARAM_SCLASS unsigned char);
void TickInit(void);
TICK TickGet(void);
void TickUpdate(void);
void IniPortA(void);
void InitializeBoard(void);
unsigned char woEERead(unsigned int add);
void woEEWrite(unsigned int add,unsigned char data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -