/* ********************************************************************************************************* *ZLGMCU tkstudio webserver ********************************************************************************************************* */ //#include "includes.h" //change by cmj ,includes => config //#include "config.h" //#include "../include/cfg_net.h" #include "shrink.h" void Timer1_Init(void); /* ********************************************************************************************************* * CONSTANTS ********************************************************************************************************* */ #define TASK_START_ID 0 /* Application tasks */ #define TASK_1_ID 1 #define TASK_2_ID 2 #define TASK_3_ID 3 #define TASK_4_ID 4 #define TASK_5_ID 5 #define TASK_6_ID 6 #define TASK_START_PRIO 10 /* Application tasks priorities */ #define TASK_1_PRIO 11 #define TASK_2_PRIO 12 #define TASK_3_PRIO 13 #define TASK_4_PRIO 14 #define TASK_5_PRIO 15 #define TASK_6_PRIO 16 #define MSG_QUEUE_SIZE 20 /* Size of message queue used in example */ OS_EVENT *RecPackedFlag; OS_EVENT *RecBufOverFlowFlag; OS_EVENT *RecTcpPackedFlag; OS_EVENT *RecPingPackedFlag; OS_STK task0_stack[3000]; //OS_STK task1_stack[1000]; OS_STK task2_stack[2000]; //OS_STK task3_stack[1000]; OS_STK task4_stack[2000]; //OS_STK task5_stack[500]; /*uint8 httpweb[]={ "HTTP/1.0 200 OK\r\n" "Date: Mon, 24 Nov 2003 01:24:17 GMT\r\n" "Server: microHttp/1.0 Zlgmcu Corporation\r\n" "Accept-Ranges: bytes\r\n" //"Content-Length: 116\r\n"//"Connection: Keep-Alive\r\n" "Connection: Keep-Close\r\n" "Content-Type: text/html\r\n" "\r\n"}; uint8 web[]={ "\r\n" "\r\n" "ARM_NET演示网页(周立功单片机)\r\n" "\r\n" "

HELLO WELCOME TO EasyArm WEBSERVER

\r\n" "\r\n" "\r\n" "\r\n" }; uint8 httpgif[]={ "HTTP/1.0 200 OK\r\n" "Date: Mon, 24 Nov 2003 01:24:17 GMT\r\n" "Server: microHttp/1.0 Zlgmcu Corporation\r\n" "Accept-Ranges: bytes\r\n" //"Content-Length: 116\r\n"//"Connection: Keep-Alive\r\n" "Connection: Keep-Close\r\n" "Content-Type: image/bmp\r\n" "\r\n"}; uint8 bmp[442]={ 0x42,0x4d,0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00, 0x00,0x00,0x40,0x01,0x00,0x00,0xc4,0x0e,0x00,0x00,0xc4,0x0e,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80, 0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x80, 0x00,0x00,0xc0,0xc0,0xc0,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0xff,0x00,0x00,0xff, 0x00,0x00,0x00,0xff,0xff,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xff,0xff, 0x00,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0x66,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0x66,0x66,0x6f,0x6f,0xff,0x66,0x66, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xf6,0xff,0xff,0x6f,0xf6,0xff,0xf6, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x6f,0xff,0x6f,0xf6,0xff,0xf6, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf6,0xff,0xf6,0xf6,0xff,0xff, 0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x6f,0xf6,0xff,0x6f,0xff, 0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xf6,0x66,0x66,0xf6,0xff,0xf6,0x66, 0x6f,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00 }; */ /* ********************************************************************************************************* * DATA TYPES ********************************************************************************************************* */ /* typedef struct { char TaskName[30]; INT16U TaskCtr; INT16U TaskExecTime; INT32U TaskTotExecTime; } TASK_USER_DATA; */ /* ********************************************************************************************************* * VARIABLES ********************************************************************************************************* */ //TASK_USER_DATA TaskUserData[7]; //OS_EVENT *MsgQueue; /* Message queue pointer */ //void *MsgQueueTbl[20]; /* Storage for messages */ /* ********************************************************************************************************* * FUNCTION PROTOTYPES ********************************************************************************************************* */ /* void TaskB(void *pdata) { void * UdpTemp; uint8 eer; while (1) { UdpTemp=OSQPend(RecUdpQFlag,0,&eer); if(eer==OS_NO_ERR) { Udp_Process((Rec_Ptr *)UdpTemp); eer=eer; } } } */ void TaskC(void *pdata) { void * TcpTemp; uint8 err; while (1) { TcpTemp=OSQPend(RecTcpQFlag,0,&err); if(err==OS_NO_ERR) { Process_Tcp1((Rec_Ptr *)TcpTemp); TcpTemp=TcpTemp; } } } /* void TaskD(void *pdata) { uint8 add[36]={"ZLGMCUyhbabcdefghijklmnopqrstuvwxyz"}; uint8 add1[10]={"123456789"}; uint8 rec_buffer[100]; SOCKET s; uint8 couter_byte=5; //uint8 Temp; int rec_coute,send_coute; uint16 iii; struct sockaddr servaddr,clientaddr; OSTimeDly(60); servaddr.sin_family=0; servaddr.sin_addr[0]=192; servaddr.sin_addr[1]=168; servaddr.sin_addr[2]=0; servaddr.sin_addr[3]=55; servaddr.sin_port=1026; OSTimeDly(60); s=*socket( 0, SOCK_DGRAM, UDP_PROTOCOL); clientaddr.sin_family=0; clientaddr.sin_addr[0]=NetPort[0].My_Ip[0]; clientaddr.sin_addr[1]=NetPort[0].My_Ip[1]; clientaddr.sin_addr[2]=NetPort[0].My_Ip[2]; clientaddr.sin_addr[3]=NetPort[0].My_Ip[3]; clientaddr.sin_port=1025; iii=bind( (SOCKET * )&s, (struct sockaddr*)&clientaddr,sizeof(clientaddr)); while (1) { rec_coute=recvfrom( s, rec_buffer, 100, 0, (struct sockaddr*)&servaddr, &iii ); if(rec_coute>0) { if(rec_buffer[0]=='A') couter_byte=5; else send_coute=sendto(s, rec_buffer, rec_coute, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) ); } while(couter_byte!=0) { send_coute=sendto(s, add, 34, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) ); if(send_coute==34) OSTimeDly(40); else send_coute=sendto(s, add1, 9, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) ); OSTimeDly(40); couter_byte--; } } } */ void TaskE(void *pdata) { struct comm comm_local; shrink_init(&comm_local); shrink_poll(comm_local); shrink_finish(comm_local); /* uint8 Temp=0; uint16 TempLength; int addrlen; int ei; unsigned char ip_add[4]={192,168,0,1}; uint8 tempdata[400]; //uint8 err; SOCKET s; struct sockaddr servaddr,cliaddr; //Arp_Request(ip_add,0); OSTimeDly(60); servaddr.sin_family=0; servaddr.sin_addr[0]=NetPort[0].My_Ip[0]; servaddr.sin_addr[1]=NetPort[0].My_Ip[1]; servaddr.sin_addr[2]=NetPort[0].My_Ip[2]; servaddr.sin_addr[3]=NetPort[0].My_Ip[3]; servaddr.sin_port=80; s=*socket( 0, 0, 0); ei=bind( (SOCKET * )&s, (struct sockaddr*)&servaddr,sizeof(servaddr)); ei=listen( (SOCKET * )&s, 4 ); if(ei!=4) while(1); while (1) { Temp=accept( (SOCKET * )&s, (struct sockaddr*)&cliaddr,&addrlen ); if(Temp!=0xff) { TempLength=recv( Temp,tempdata ,400, 0 ); if(tempdata[5]==' ') { send( Temp,httpweb ,169, 0 ); //OSTimeDly(10); send( Temp,web ,395, 0 ); } else if(tempdata[5]=='1') { send( Temp, httpgif,169, 0 ); //OSTimeDly(10); send( Temp,bmp ,442, 0 ); } memset(tempdata, 0,400); OSTimeDly(20); close(Temp); } } */ } /* void TaskF(void *pdata) { uint8 Temp=0; EX_RAM unsigned char ip_add[4]={192,168,0,55}; uint8 err; while(1) { OSTimeDly(4); err=Temp; Temp=ip_add[2]; } }*/ void task0(void *pdata) { /*在第1个任务中设置定时器0及中断*/ UBYTE iii; #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif TargetInit(); //add by cmj OSStatInit(); //UBYTE EX_RAM *er; /*OSTaskCreateExt(TaskB, (void *)0, &task1_stack[999], TASK_1_PRIO, TASK_1_ID, &task1_stack[0], 1000, (void *)0,//&TaskUserData[TASK_4_ID] 0);*/ OSTaskCreateExt(TaskC, (void *)0, &task2_stack[1999], TASK_2_PRIO, TASK_2_ID, &task2_stack[0], 2000, (void *)0,//&TaskUserData[TASK_4_ID] 0); /* OSTaskCreateExt(TaskD, (void *)0, &task3_stack[999], TASK_3_PRIO, TASK_3_ID, &task3_stack[0], 1000, (void *)0,//&TaskUserData[TASK_4_ID] 0);*/ OSTaskCreateExt(TaskE, (void *)0, &task4_stack[1999], TASK_4_PRIO, TASK_4_ID, &task4_stack[0], 2000, (void *)0,//&TaskUserData[TASK_4_ID] 0); /*OSTaskCreateExt(TaskF, (void *)0, &task5_stack[499], TASK_5_PRIO, TASK_5_ID, &task5_stack[0], 500, &TaskUserData[TASK_5_ID], 0);*/ SetNetPort(); InitNic(0); //RTL8019芯片初始化,在global.c中定义 Initial_arp(); Tcp_Initial(); Udp_Initial(); while(1) { //OSSemPend(RecPackedFlag,0); OSTimeDly(4); do { // while(rec_data()); //OS_ENTER_CRITICAL(); // OS_ENTER_CRITICAL(); iii=Rec_Packet(); // OS_EXIT_CRITICAL(); }// end of do while(iii!=0); }//end for while(1) } /*$PAGE*/ /* ********************************************************************************************************* * MAIN ********************************************************************************************************* */ void Uart_SendChar(INT8U data) { while((U0LSR & 0x00000020) == 0); U0THR = data; } //void main (void) //change by cmj int main (void) {UBYTE iii; //Timer1_Init(); OSInit(); /* Initialize uC/OS-II */ OSTaskCreateExt(task0, (void *)0, &task0_stack[2999], TASK_START_PRIO, TASK_START_ID, &task0_stack[0], 3000, (void *)0,//&TaskUserData[TASK_4_ID] 0); RecPackedFlag= OSSemCreate(0); RecBufOverFlowFlag= OSSemCreate(0); RecTcpPackedFlag= OSSemCreate(0); RecPingPackedFlag= OSSemCreate(0); SendFlag= OSSemCreate(1); RecIcmpQFlag= OSQCreate(&RecIcmpQ[0],Q_Max_Size); RecTcpQFlag= OSQCreate(&RecTcpQ[0],Q_Max_Size); RecUdpQFlag= OSQCreate(&RecUdpQ[0],Q_Max_Size); /* for(iii=0;iii0) Ping_IP_TTL--; for(num=0;num0) NetPort[num].ARP_TERM[p_min].TTL--; } if(Gateway_IP_TTL>0) NetPort[num].Gateway_IP_TTL--; } if(p_sec==60) { p_min++; p_sec=0; if(p_min==60) { p_min=0; } } } VICVectAddr = 0; // 通知中断控制器中断结束 OS_EXIT_CRITICAL(); //OSTimeTick(); }