📄 main.c
字号:
/*
********************************************************************************
* Wiznet.
* 5F Simmtech Bldg., 228-3, Nonhyun-dong, Kangnam-gu,
* Seoul, Korea
*
* (c) Copyright 2002, Wiznet, Seoul, Korea
*
* Filename : main.c
* Programmer(s):
* Created : 2002/01/
* Modified :
* Description : 8051EVB侩 TCP server mode甫 捞侩茄 loopback program.
********************************************************************************
*/
#include "../atmel/at89x51.h" // 8051 SFR 沥狼 拳老
#include <stdio.h> // printf 荤侩阑 困窃
#include <string.h>
#include "serial.h" // serial 包访 窃荐甸
#include "socket.h" // W3100A driver 拳老
#define MAX_BUF_SIZE 2048 // 荐脚 滚欺狼 弥措 荤捞令
unsigned char xdata * sock_buf = 0x7000; // 荐脚 滚欺狼 困摹
xdata unsigned char sock_state[MAX_SOCK_NUM]; // socket 惑怕 包府 函荐
void Init8051(); // 8051 MCU 檬扁拳
void init_sock(unsigned char i); // 瘤沥等 channel阑 檬扁拳 窃
/*
********************************************************************************
* loopback 荐青阑 困茄 main 窃荐.
*
* Description: 8051 檬扁拳 棺 W3100A俊 措茄 檬扁拳 荐青 饶 peer肺何磐狼 楷搬 汲沥阑
* 扁促府哥 楷搬矫 荐脚 等 单捞磐甫 促矫 价脚窍绰 loopback 扁瓷 荐青.
* 楷搬 秦瘤 矫 促矫 盲澄阑 檬扁拳 窍咯 楷搬 汲沥阑 扁促覆.
* Arguments : None.
* Returns : None.
* Note :
********************************************************************************
*/
void main()
{
unsigned char i;
int xdata len;
unsigned char xdata ip[6];
int xdata scanf_ret;
unsigned char xdata ret;
unsigned char xdata uid[128], upw[128], pmac[6];
unsigned int xdata psid, idlen, pwlen;
T0 = 0;
T1 = 0;
Init8051();
printf("3150 LoopBack Program.(TCP Server mode)\r\n");
iinchip_init();
EA = 1; // 傈眉 interrupt enable
ip[0] = 0x00; ip[1] = 0x01; ip[2] = 0x02; ip[3] = 0x03; ip[4] = 0x04; ip[5] = 0x05;
setMACAddr(ip); // MAC 汲沥
ip[0] = 59; ip[1] = 150; ip[2] = 250; ip[3] = 1;
setgateway(ip); // gateway address 汲沥
ip[0] = 255; ip[1] = 255; ip[2] = 255; ip[3] = 0;
setsubmask(ip); // subnet mask 汲沥
ip[0] = 59; ip[1] = 150; ip[2] = 250; ip[3] = 69;
setIP(ip); // source IP 汲沥
sysinit(0x55,0x55); // network information 汲沥
//#ifdef _DEF_IINCHIP_PPP
printf("<<Select the number>>\r\n 1) Normal mode\r\n 2) PPPoE mode\r\n>> ");
scanf_ret = scanf("%c", &ret);
printf("\r\n");
if (ret != '1')
{
AUTH_FAIL:
printf("<<Setup PPPoE connection>>\r\n");
printf("Enter user id : ");
scanf_ret = scanf("%s", uid);
printf("Enter user password : ");
scanf_ret = scanf("%s", upw);
idlen = strlen(uid);
pwlen = strlen(upw);
i = 0;
while ((ret = pppinit(uid, idlen, upw, pwlen)) != 1)
{
//printf("%d %d",idlen,pwlen);
switch (ret)
{
case 2 : goto AUTH_FAIL; break;
default : break;
}
getDestMAC(0, pmac);
psid = getDestPort(0);
pppterm(pmac, psid);
i++;
if (i == 2) break;
}
if (i != 2)
{
ret = IINCHIP_READ(INT_REG); // remove already setted value of INT_REG
printf("<<PPP Connection established>>\r\n");
getDestMAC(0, pmac);
psid = getDestPort(0);
/*getLocalAddr(ip);
setIP(ip); // source IP 汲沥
printf("Received IP : %bu.%bu.%bu.%bu\r\n",ip[0],ip[1],ip[2],ip[3]);*/
}
else
{
IINCHIP_WRITE(TMODE,0x00);
}
}
//#endif
getLocalAddr(ip);
printf("-----------------------------\r\n");
printf("Current IP : %bu.%bu.%bu.%bu\r\n",ip[0],ip[1],ip[2],ip[3]);
printf("-----------------------------\r\n");
for (i = 0; i < MAX_SOCK_NUM; i++) { // socket 檬扁拳 棺 楷搬 措扁 惑怕肺 父店
init_sock(i);
}
while (1) {
for (i = 0; i < MAX_SOCK_NUM; i++)
{
if (sock_state[i] == SOCK_ESTABLISHED) {
switch (select(i, SEL_CONTROL))
{
case SOCK_ESTABLISHED: /* if connection is established */
if ((len = select(i, SEL_RECV)) > 0) /* check Rx data */
{
if (len > MAX_BUF_SIZE) len = MAX_BUF_SIZE; /* if Rx data size is lager than TX_RX_MAX_BUF_SIZE */
/* the data size to read is MAX_BUF_SIZE. */
len = recv(i, sock_buf, len); /* read the received data */
send(i, sock_buf, len); /* send the received data */
}
break;
case SOCK_CLOSE_WAIT: /* If the client request to close */
printf("%bd : CLOSE_WAIT\r\n", i);
disconnect(i);
break;
case SOCK_CLOSED: /* if a socket is closed */
printf("%bd : CLOSED\r\n", i);
init_sock(i);
break;
}
} else {
switch (select(i, SEL_CONTROL))
{
case SOCK_ESTABLISHED: /* if connection is established */
sock_state[i] = SOCK_ESTABLISHED; // 楷搬 汲沥.
printf("%bd : connected\r\n", i);
break;
case SOCK_CLOSE_WAIT: /* If the client request to close */
printf("%bd : CLOSE_WAIT\r\n", i);
disconnect(i);
break;
case SOCK_CLOSED: /* if a socket is closed */
close(i);
printf("%bd : CLOSED\r\n", i);
init_sock(i);
break;
}
}
} // for
} // while
}
/*
********************************************************************************
* 8051 檬扁拳 贸府 窃荐.
*
* Description:
* Arguments : None.
* Returns : None.
* Note :
********************************************************************************
*/
void Init8051(void)
{
EA = 0; // 傈眉 interrupt disable
IT0 = 0; // interrupt level trigger
EX0 = 1; // INT 0 enable
EX1 = 0; // INT 1 disable
InitSerial(); // Serial 器飘 檬扁拳 (力傍登绰 serial.c 颇老 曼炼)
}
/*
********************************************************************************
* 楷搬 秦瘤 等 盲澄俊 措茄 犁 檬扁拳 窃荐.
*
* Description: 楷搬捞 秦瘤 等 盲澄俊 措秦 close 棺 檬扁拳 荐青
* Arguments : None.
* Returns : None.
* Note :
********************************************************************************
*/
void init_sock(unsigned char i) {
unsigned char b;
printf("socket : ");
while ( (b = socket(i, SOCK_STREAM, 5000, 0)) == 0) ;
printf("%bd ok..\r\n", i);
printf("listen : ");
NBlisten(i);
printf("%bd ok..\r\n", i);
sock_state[i] = SOCK_LISTEN;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -