📄 main.c
字号:
/**---------------------版权 (c)----------------------------------------------------------***
*** 作者:颜章健 ***
*** 邮件:jenkinyan@163.com ***
*** ***
***---------------------File Info---------------------------------------------------------***
*** 创 建 人: 颜章健 ***
*** 创建日期: ***
*** 创建版本: ***
*** 文件描述: 颜章健毕业设计演示程序: 访问学校主页以及新浪网 ***
***---------------------------------------------------------------------------------------***
*** 修 订 人: ***
*** 修订日期: ***
*** 修订版本: ***
*** 修订描述: ***
***---------------------------------------------------------------------------------------**/
#include "config.h"
//#include <stdlib.h>
#define URL_BUF_LEN 256
static char URL[URL_BUF_LEN];
static uint32 UrlLen = 0;
static TCP_SOCKET HttpSocket;
const char Welcome[]=
{
"\r\n"
"\r\n"
"\r\n"
" ***** *** *** *** ***** *** \r\n"
" *** *** *** *** *** *** *** *** 指导:李政林 \r\n"
" *** *** *** *** *** *** *** *** 设计:颜章健 \r\n"
" *** *** *** *** *** *** *** *** *** \r\n"
" *** *** ***** *** *** *** ***** \r\n"
"-----------------------------------------------------------------------------------------------\r\n"
"\r\n"
"\r\n"
};
const char Thanks[]=
{
"\r\n"
"\r\n"
"\r\n"
"************ ** ** ** *** ** ** ** ********** \r\n"
" ** ** ** ** ** **** ** ** ** ** \r\n"
" ** ** ** ** ** ** ** ** ** ** ** \r\n"
" ** ** ** ** ** ** ** ** ** ** ** \r\n"
" ** ************* ************ ** ** ** **** ********** \r\n"
" ** ** ** ** ** ** ** ** ** ** **\r\n"
" ** ** ** ** ** ** ** ** ** ** **\r\n"
" ** ** ** ** ** ** **** ** ** **\r\n"
" ** ** ** ** ** ** *** ** ** ********** \r\n"
"\r\n"
"\r\n"
"\r\n"
};
// 函数声明
static void Delay(uint32 t);
static void SysInit(void);
static void TcpCSockHook(TCP_SOCKET *This);
static void HttpTask(TCP_SOCKET *Socket);
// 系统主函数
int main(void)
{
uint8 key;
SysInit();
while(1)
{
PppReceiveTask();
if(LinkLayer.State == PPPS_OPENED) LedOn();
else LedOff();
TcpFsmTask();
HttpTask(&HttpSocket);
//if(GetKey(500000) == KEY_UP) Uart0PutStr((char *)Thanks);
key = GetKey(500000);
switch(key)
{
case KEY_UP:
Uart0PutStr((char *)Thanks);
break;
case KEY_LEFT:
IcmpEchoRequest(LinkLayer.Config.DNS1);
break;
case KEY_RIGHT:
IcmpEchoRequest(LinkLayer.Config.DNS2);
break;
default:break;
}
}
}
////////////////////////////////////////////////////////////////////////////
static void TcpCSockHook(TCP_SOCKET *This)
{
while(This->Rxl--) Uart0PutChar(*(char *)This->Rxd++);
}
static void Delay(uint32 t){ while(--t);}
// 系统初始化
static void SysInit(void)
{
LedInit();
LedOn();
Delay(5000000);
LedOff();
Uart0Init(115200);
Uart0PutStr((char *)Welcome);
KeyInit();
NetSystemInitial();
IRQEnable(); // 使能IRQ中断
VICIntSelect = 0x00000000; // 设置所有的通道为IRQ中断
VICVectCntl0 = 0x20 | 0x07; // UART1分配到IRQ slot0,即最高优先级
VICVectAddr0 = (uint32)IRQ_MODEM; // 设置UART1向量地址
VICIntEnable = 1 << 0x07; // 使能UART1中断
VICVectCntl1 = 0x20 | 0x04; // NetTimer分配到IRQ slot1
VICVectAddr1 = (uint32)IRQ_NetTimer;// 设置NetTimer向量地址
VICIntEnable = 1 << 0x04; // 使能NetTimer中断
/*
Printf(">>\r\n");
Printf("打开网络连接\r\n");
Printf("提示:当板上LED点亮的时,表明系统已经接入网络\r\n");
*/
PhyLayer.Open();
}
static void GetUrlTask(TCP_SOCKET *Socket)
{
const uint8 GxutAddr[4] = {222,217,19, 157};
const uint8 SinaAddr[4] = {218,30, 66, 101};
//const uint8 ChinaAddr[4] = {124,238,253,20};
const char Others[] =
{
" HTTP/1.0\r\n"
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n"
"User-Agent: Mozilla/3.0 (compatible)\r\n"
"Host:"
};
const char HostGxut[] = {"www.gxut.edu.cn\r\n\r\n"};
if(Uart0RecvNew())
{
uint16 i;
uint16 MyPort = 0;
UrlLen = Uart0GetStr(URL,URL_BUF_LEN);
if((UrlLen >= 22) && MemCmp((uint8 *)"http://www.gxut.edu.cn",(uint8 *)URL,22))
{
while(MyPort < 1024 || MyPort > 3000) MyPort = rand();
TcpSocketReset(Socket);
TcpSocketDelete(Socket);
TcpSocketCreate(Socket, (uint8 *)GxutAddr, 80, MyPort,TcpCSockHook);
Printf("打开网页 %s\r\n",URL);
TcpSocketSend(Socket,(uint8 *)"GET /",5);
TcpSocketSend(Socket,(uint8 *)(URL + 22),(UrlLen - 22));
TcpSocketSend(Socket,(uint8 *)Others,sizeof(Others)-1);
TcpSocketSend(Socket,(uint8 *)HostGxut,sizeof(HostGxut)-1);
UrlLen = 0;
URL[UrlLen] = 0;
return;
}
if((UrlLen >= 15) && MemCmp((uint8 *)"http://",(uint8 *)URL,7))
{
//Printf("%s\r\n",URL);
for(i=7; i<UrlLen-7; i++)
{
if(MemCmp((uint8 *)"sina.com",(uint8 *)URL+i,8))
{
uint16 len;
while(MyPort < 1024 || MyPort > 3000) MyPort = rand();
TcpSocketReset(Socket);
TcpSocketDelete(Socket);
TcpSocketCreate(Socket, (uint8 *)SinaAddr, 80, MyPort,TcpCSockHook);
Printf("打开网页 %s\r\n",URL);
len = 15;
while(len < UrlLen)
{
if(URL[len] == '/') break;
len++;
}
TcpSocketSend(Socket,(uint8 *)"GET /",5); // GET /
if(len < UrlLen)
{
len++;
while(len < UrlLen)
{
TcpSocketSend(Socket,(uint8 *)(&URL[len]),1); // File
len++;
}
}
TcpSocketSend(Socket,(uint8 *)Others,sizeof(Others)-1); // HTTP/1.0...
len = 7;
while(len < UrlLen)
{
if(URL[len] == '/') break;
TcpSocketSend(Socket,(uint8 *)(&URL[len]),1); // Host
len++;
}
TcpSocketSend(Socket,(uint8 *)"\r\n\r\n",4);
UrlLen = 0;
URL[UrlLen] = 0;
return;
}
}
}
if( MemCmp((uint8 *)"close",(uint8 *)URL,5) )
{
if(LinkLayer.State == PPPS_CLOSED)
{
Printf("网络连接已关闭\r\n");
}
else
{
Printf("关闭网络连接\r\n");
LinkLayer.Close();
}
UrlLen = 0;
URL[UrlLen] = 0;
return;
}
if( MemCmp((uint8 *)"open",(uint8 *)URL,4) )
{
if(LinkLayer.State == PPPS_CLOSED)
{
Printf("打开网络连接\r\n");
PhyLayer.PutCmd("ATD*99***1#\r\n");
}
else
{
Printf("已经(或正在)打开连接\r\n");
}
UrlLen = 0;
URL[UrlLen] = 0;
return;
}
if( MemCmp((uint8 *)"welcome",(uint8 *)URL,7))
{
Uart0PutStr((char *)Welcome);
UrlLen = 0;
URL[UrlLen] = 0;
return;
}
if( MemCmp((uint8 *)"thanks",(uint8 *)URL,6))
{
Uart0PutStr((char *)Thanks);
UrlLen = 0;
URL[UrlLen] = 0;
return;
}
if( MemCmp((uint8 *)"dial",(uint8 *)URL,4))
{
PhyLayer.Open();
UrlLen = 0;
URL[UrlLen] = 0;
return;
}
if( MemCmp((uint8 *)"reset",(uint8 *)URL,5))
{
void (*Reset)(void) = NULL;
Reset();
}
}
}
static void HttpTask(TCP_SOCKET *Socket)
{
GetUrlTask(Socket);
//GetHtmlTask(Socket);
if(Socket->TXS == SOCKS_CLOSED && Socket->TxWindow.DatLen > 0)
{
TcpSocketConnect(Socket);
}
if(Socket->TXS == SOCKS_OPENED && Socket->TxWindow.DatLen == 0)
{
TcpSocketClose(Socket);
}
}
/********************************************************************************************
*** 文件结束 ***
********************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -