4-Sửa hàm IPProcess, thêm các lệnh gọi hàm của giao thức UDP, TCP vào: Code:

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 107 - 108)

- Còn dữ liệu ứng dụng trong gói TCP/UDP đương nhiên là chỉ do lớp ứng dụng tạo ra mà thôị Lỡ hẹn đã lâu, hôm nay tiếp tục với giao thức DHCP, còn thằng này với HTTP nữa là xong.

4-Sửa hàm IPProcess, thêm các lệnh gọi hàm của giao thức UDP, TCP vào: Code:

//--- // Writen by NTTam - PTITHCM

//--- #include "packet.h" #include "ip.h" #include "uart.h" #include "dhcp.h" //#define UDP_DEBUG //--- //Ham gui di mot goi UDP

void udpSend(unsigned long dstIp, unsigned int dstPort, unsigned int srcPort, unsigned int len, unsigned char* udpData)

{

struct ntUDPHeader* udpHeader;

udpHeader = (struct ntUDPHeader*)(udpData - UDP_HEADER_LEN); len += UDP_HEADER_LEN;

udpHeader->desPort = HTONS(dstPort); udpHeader->srcPort = HTONS(srcPort); udpHeader->Len = HTONS(len);

udpHeader->Checksum = 0;

ipSend(dstIp, IP_PROTO_UDP, len, (unsigned char*)udpHeader); }

//--- ---

//Ham xu ly goi UDP nhan duoc, duoc goi boi ham xu ly goi IP (IPProcess) // Hien chua co ung dung chay UDP nen ham nay trong

void UDPProcess(unsigned int len, struct ntIPHeader* packet) {

dhcpIn((len - IP_HEADER_LEN - UDP_HEADER_LEN), (struct netDhcpHeader*) ((char*)packet + IP_HEADER_LEN + UDP_HEADER_LEN));

#ifdef UDP_DEBUG

printf("Rx UDP Packet\r\n"); #endif

}

//--- ---

(Nhớ cập nhật khai báo hàm bên file header nha)

3-Thêm một số include (khi dịch báo lỗi thì các bạn cũng tự tìm ra mà thêm vào thôi, chỉ luôn cho đỡ mắc công kiếm): cho đỡ mắc công kiếm):

#include <avr/pgmspacẹh>//// vào “tcp.h”#include "dhcp.h"//// vào “ntAVRnet.h” #include "dhcp.h"//// vào “ntAVRnet.h”

#include "udp.h" và #include "icmp.h" vào “ip.h”

4-Sửa hàm IPProcess, thêm các lệnh gọi hàm của giao thức UDP, TCP vào:Code: Code:

void IPProcess(unsigned int len, struct ntIPHeader* packet) {

// check IP ađressing, stop processing if not for me and not a broadcast

(HTONL(packet->desIPAđr) != (ipGetConfig()->ip|ipGetConfig()- >netmask)) &&

(HTONL(packet->desIPAđr) != 0xFFFFFFFF) && (ipGetConfig()->ip != 0x00000000) )

return;

// handle ICMP packet

if( packet->Protocol == IP_PROTO_ICMP ) {

#ifdef IP_DEBUG

printf("IP->Rx: ICMP/IP packet\r\n"); //icmpPrintHeader((icmpip_hdr*)packet); #endif

icmpIpIn((struct ntIPHeader*)packet); }

else if( packet->Protocol == IP_PROTO_UDP ) {

#ifdef IP_DEBUG

printf("IP->Rx: UDP/IP packet\r\n");

//debugPrintHexTable(NetBufferLen-14, &NetBuffer[14]); #endif

UDPProcess(len, ((struct ntIPHeader*)packet) );//// }

else if( packet->Protocol == IP_PROTO_TCP ) {

#ifdef IP_DEBUG

printf("IP->Rx: TCP/IP packet\r\n"); #endif

TCPProcess((unsigned char *)packet,len-((packet->verHdrLen & 0x0F)<<2));//// } else { #ifdef IP_DEBUG printf("IP->Rx: IP packet\r\n"); #endif } } //--- ---

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 107 - 108)