📄 main.c
字号:
/***************************************************************************\
Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
by threewter 2004.5.12
\***************************************************************************/
/***************************************************************************\
#说明: C main 函数,ucos-ii初始化等定义
---------------------------------- Bug --------------------------------------
---------------------------------- TODO list --------------------------------------
----------------------------------修正--------------------------------------
2004-5-12 创建
\***************************************************************************/
#include "../inc/TCPIP/internet.h"
#include "../inc/drv/tchscr.h"
#include"../ucos-ii/includes.h" /* uC/OS interface */
#include "../ucos-ii/add/osaddition.h"
#include "../inc/drivers.h"
#include "../src/gui/gui.h"
#include"../inc/Netcfg.h"
#include <string.h>
#include <stdio.h>
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
//#define NETPORT 1
///******************任务定义***************/// */
OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈
void Main_Task(void *Id); //Main_Test_Task
#define Main_Task_Prio 12
OS_STK Receive_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈
void Receive_Task(void *Id); //Main_Test_Task
#define Receive_Task_Prio 40
struct sockaddr_in servaddr;//计算机端套接口
void InitNetWork()//初始化网络
{
U32 Ipaddr,Ipmaskaddr,Ipgateaddr;
U8 *Macaddr;
Ipaddr=Get_ipaddr(); //获取IP地址
Ipmaskaddr=Get_maskaddr();//获取子网掩码
Ipgateaddr=Get_gwaddr(); //获取网关
Macaddr=Get_mac(); //获取网卡地址
NetPortChoose(0); //选择网口,必须在配置网络以前进行
initOSNet(Ipaddr, Ipmaskaddr, Ipgateaddr,Macaddr);//配置网络
OSTimeDly(1000);//任务挂起5秒
printk("init Ethernet and UDP is ok!\n");
}
/////////////////////////////////////////////////////
// Main function. //
////////////////////////////////////////////////////
int main(void)
{
ARMTargetInit();
SetNetWork(); //设置开发板地址
OSInit();
OSInitUart();
//initOSFile();
#if USE_MINIGUI==0
initOSMessage();
initOSList();
initOSDC();
//initOSCtrl();
LoadFont();
#endif
loadsystemParam();
LCD_printf("Create task on uCOS-II...\n");
OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio);
OSTaskCreate(Receive_Task, (void *)0, (OS_STK *)&Receive_Stack[STACKSIZE*8-1], Receive_Task_Prio);
OSAddTask_Init(1);
LCD_ChangeMode(DspGraMode);
OSStart();
return 0;
}//main
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg;//定义消息结构
PDC pdc;//定义绘图设备上下文结构
struct point{
int x;
int y;
};//定义点坐标结构
int ClientSock_out;
struct sockaddr_in cliaddr_out;//IPv4套接口地址定义
struct point scrpoint;//触摸点
InitNetWork();
ClientSock_out=socket(PF_INET,SOCK_DGRAM, 0);//创建套接字
memset(&servaddr, 0, sizeof(servaddr)); //地址结构清零
memset(&cliaddr_out, 0, sizeof(cliaddr_out)); //地址结构清零
//计算机终端套接字属性
servaddr.sin_family = AF_INET; //IPv4协议
//servaddr.sin_addr.s_addr = (118<<24)|(0<<16)|(168<<8)|192;
servaddr.sin_port = htons(5000); //端口
//发送端套接字属性? cliaddr_out.sin_family = AF_INET; //IPv4协议
cliaddr_out.sin_port=htons(4999);
cliaddr_out.sin_addr.s_addr=INADDR_ANY;
bind(ClientSock_out, (struct sockaddr*)&cliaddr_out, sizeof(cliaddr_out));//绑定套接字
ClearScreen();//清屏
pdc=CreateDC();//创建绘图设备上下文
for(;;){
pMsg=WaitMessage(0);//等待消息
switch(pMsg->Message){
case OSM_TOUCH_SCREEN://OSM_TOUCH_SCREEN:
switch(pMsg->LParam){
case TCHSCR_ACTION_DOWN:
scrpoint.x=-1;//表示触摸屏按下
//发送两遍是为了确保计算机能够收到
sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
//获得触摸点坐标
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1) scrpoint.x=1;
if(scrpoint.x>639) scrpoint.x=639;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1) scrpoint.y=1;
if(scrpoint.y>479) scrpoint.y=479;
sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
MoveTo(pdc, scrpoint.x, scrpoint.y);//移动
break;
case TCHSCR_ACTION_MOVE:
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1) scrpoint.x=1;
if(scrpoint.x>639) scrpoint.x=639;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1) scrpoint.y=1;
if(scrpoint.y>479) scrpoint.y=479;
sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
LineTo(pdc, scrpoint.x, scrpoint.y);//画线
break;
}
break;
}
DeleteMessage(pMsg);//删除消息
OSTimeDly(30);
}
DestoryDC(pdc);//删除绘图设备上下文
close(ClientSock_out);//关闭套接字
}
void Receive_Task(void *Id) //Main_Test_Task
{
int ClientSock_in;
struct sockaddr_in cliaddr_in;
int iRecv;
BOOLEAN IsClearn;
int fromlen;
fromlen=sizeof(cliaddr_in);
//接收端套接口属性
cliaddr_in.sin_family= AF_INET;
cliaddr_in.sin_port=htons(4998);
cliaddr_in.sin_addr.s_addr=INADDR_ANY;
ClientSock_in=socket(PF_INET,SOCK_DGRAM, 0);
bind(ClientSock_in, (struct sockaddr*)&cliaddr_in, sizeof(cliaddr_in));
for(;;){
//接收清屏命令
iRecv=recvfrom(ClientSock_in, (BOOLEAN*)&IsClearn, sizeof(int), 0, (struct sockaddr*)&cliaddr_in, (int*)&fromlen);
servaddr.sin_addr.s_addr=cliaddr_in.sin_addr.s_addr;//得到计算机端IP
if(IsClearn){
ClearScreen();
}
OSTimeDly(50);
}
close(ClientSock_in);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -