⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testmain.cpp

📁 tornado2.0 for PPC VxWorks socket 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "testmain.hpp"
extern "C"{
#include "vxWorks.h"
#include "iv.h"
#include "ioLib.h"
#include "iosLib.h"
#include "intLib.h"
#include "errnoLib.h"
#include "stdio.h"
#include "semLib.h"
#include "sysLib.h"

#include "string.h" 
#include "taskLib.h" 
#include "in.h" 
#include "inetLib.h" 

#include "routeLib.h" 
#include "socket.h" 
#include "sockLib.h" 
#include "routeLib.h" 
}

static  int		fdCom2=0,fdCom1=0;
static void  kcnInit();
extern TestWindow			*testWindow;
extern SystemRealTimeData	*systemRealTimeData;
unsigned char	message[62];
ZafString *ZijAPT,*Zijfa,*Zijjie,*mastercontrol,*zhunbeiwan;

extern "C" {
int jerry_main()
{
	kcnInit();//串口初始化
	
	if (taskSpawn("COM_TTY_RCV", 55, VX_FP_TASK, 20000,
		(FUNCPTR)TestWindow::JttyComRecv, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) != ERROR)    /*Wayne question*/
	{//COM_TTY_RCV为任务名;100个优先级;VX_FP_TASK支持浮点协处理器;2000堆栈大小
	 //(FUNCPTR)TestWindow::JttyComRecv新任务入口点;成功则返回任务ID
		return (0);
	}
	else
	{
		perror("task spawn fail!\n");
		return (-1);
	}
}
}

static void  kcnInit()//串口初始化
{
	/* Open 串口3 */
	//文件名,O_RDWR为打开一个读写文件,文件模式;打开成功则返回文件描述符
	//打开失败返回值为ERROR
	fdCom2 = open("/tyCo/2",O_RDWR,0664);
	
	printf("fdCom2 = 0x%x\n",fdCom2);	
	if(fdCom2 == NULL)
		printf("open com3 fail!\n");
	
	//设置波特率 baudrate is 19200
	//I/O控制;文件描述符;功能代码;参数	
	ioctl(fdCom2,FIOBAUDRATE,19200);  //baudrate is 19200
	/* set read and write buffer size */
	
	//文件描述符,功能代码,任意参数;ioctl为I/O控制功能
	(void) ioctl(fdCom2,FIORBUFSET,512);
	(void) ioctl(fdCom2,FIOWBUFSET,512);
	(void) ioctl(fdCom2,FIOFLUSH,0);//清空输入输出缓冲
	
	
	/* Open Com2 */
	fdCom1 = open("/tyCo/1",O_RDWR,0664);
	printf("fdCom1 = 0x%x\n",fdCom1);
	if(fdCom1 == NULL)
		printf("open com2 fail!\n");
	ioctl(fdCom1,FIOBAUDRATE,19200);  //baudrate is 19200
	(void) ioctl(fdCom1,FIORBUFSET,512);
	(void) ioctl(fdCom1,FIOWBUFSET,512);
	(void) ioctl(fdCom1,FIOFLUSH,0);//清空输入输出缓冲
	
	return;
		
}
/* read data from com port */
	struct fd_set	readFds;
	struct fd_set	WriteFds;
	
int		readLen=0,beginreadlen=0,AVRbeginreadlen=0,AVRreaLen=0,zhuantaifalong=0;//falong为信息发送的长度
   
char  AVRbuffer[3];
unsigned char tempbuffer[62],beginbuffer[1],AVRbeginbuffer[2];
int TestWindow:: JttyComRecv()
{
    /*char	gpsBuffer[512];*/
   int width=0;
    
 /* wait for data with a timeout */
	FD_ZERO (&readFds);//清空所有位
	FD_SET  (fdCom2, &readFds);//设置fdCom2读文件描述符组位为1
	FD_SET  (fdCom1, &readFds);//设置fdCom2读文件描述符组位为1
	
	FD_ZERO (&WriteFds);
	FD_SET  (fdCom2, &WriteFds);
	FD_SET  (fdCom1, &WriteFds);
	
	width = (fdCom1 > fdCom2) ? fdCom1 : fdCom2;
		//fdCom1 > fdCom2为真width = fdCom1;否则width =fdCom2
    width++;//应比文件描述符组中设置的最大文件描述符大1
 
	while(1)
	{
   
   if (FD_ISSET (fdCom2, &readFds))//串口3 
	{	
		  int num=0;
			while(1)//串口3 通信握手信号建立
			{
				testWindow->begin_send();//发握手信号0x55给APT
				
				while(1)//接收APT发的握手信号
			   {
				   beginreadlen = read(fdCom2,beginbuffer,1);
				   if(beginreadlen==1)break;
			   }
			   
			  if(beginbuffer[0]==0xaa)
			       num++;
			  else
			  	testWindow->begin_send();//如果不对重发握手信号0x55给APT
			  	
			  if(num==3)
			  	{
			  	 testWindow->zijianAPT();
			  	  break;	
			  	}
		  }	
    
      //testWindow->TOAVRzijian();
      
      
      while(1)
      { 
      	int count=0; 
    	unsigned char *p =  tempbuffer;
   	  while(1)
   	    {
   		   while(1)
   		      {
   		     	  readLen = read(fdCom2,p++,1);
   		     	  if(readLen==1)break;
   		     	} 
   		count++;
   	
   		
   		if(count==62)
   				break; 
   	    }
   	    
unsigned char a=tempbuffer[0]+tempbuffer[1]+tempbuffer[2]+tempbuffer[3]+tempbuffer[4]+tempbuffer[5]+tempbuffer[6]+tempbuffer[7]+tempbuffer[8]+tempbuffer[9]+
	             tempbuffer[10]+tempbuffer[11]+tempbuffer[12]+tempbuffer[13]+tempbuffer[14]+tempbuffer[15]+tempbuffer[16]+tempbuffer[17]+tempbuffer[18]+tempbuffer[19]+
	             tempbuffer[20]+tempbuffer[21]+tempbuffer[22]+tempbuffer[23]+tempbuffer[24]+tempbuffer[25]+tempbuffer[26]+tempbuffer[27]+tempbuffer[28]+tempbuffer[29]+
	             tempbuffer[30]+tempbuffer[31]+tempbuffer[32]+tempbuffer[33]+tempbuffer[34]+tempbuffer[35]+tempbuffer[36]+tempbuffer[37]+tempbuffer[38]+tempbuffer[39]+
	             tempbuffer[40]+tempbuffer[41]+tempbuffer[42]+tempbuffer[43]+tempbuffer[34]+tempbuffer[45]+tempbuffer[46]+tempbuffer[47]+tempbuffer[48]+tempbuffer[49]+
	             tempbuffer[50]+tempbuffer[51]+tempbuffer[52]+tempbuffer[53]+tempbuffer[54]+tempbuffer[55]+tempbuffer[56]+tempbuffer[57]+tempbuffer[58]+tempbuffer[59]+
	             tempbuffer[60];
	       bool x=0;
	       if(a==tempbuffer[61])
	       	  x=1;   
   	    
   	 if((tempbuffer[0]==0xe0)&&(tempbuffer[1]==0xf9)&&x)
	    {   
   	   systemRealTimeData->rcv_message((unsigned char*)&tempbuffer,62);	
   	  }
   	 
      }
     
  }
  
		
	
	    if (FD_ISSET (fdCom1, &readFds))// 串口2
		{	
			testWindow->TOAVRzijian();
		}
	    
	
	
	
	
		
	}
		
		
		if (select (width, NULL, &WriteFds, NULL, NULL) < 0)//转台发送数据
	    {
	    	printf("fdCom2: select failed!\n");
	        return (0);
	    }
	    printf("\nselect ok!\n");
	    
	  
	    
		if (FD_ISSET (fdCom1, &WriteFds))//串口2
		{	
			//systemRealTimeData->send_message();		
			
			
		}

}		

//主窗口类;
TestWindow::TestWindow(ZafIChar *name, ZafObjectPersistence &persist) :	ZafWindow(name, persist)
{
 		// Create a timer.
	ZafTimer *timer = new ZafTimer(D_ON, 30000); 
	// Add the field to be notified.
	timer->Add(this);
	// Add the timer to the event manager, which also activates the timer.
	EventManager()->Add(timer);
	 timer->SetNotifyMessage(CUZHUANTAI);
	 
 ZijAPT=DynamicPtrCast(GetObject(ZAF_ITEXT("ZijAPT")),ZafString);
 Zijfa=DynamicPtrCast(GetObject(ZAF_ITEXT("Zijfa")),ZafString);
 Zijjie=DynamicPtrCast(GetObject(ZAF_ITEXT("Zijjie")),ZafString);
 mastercontrol=DynamicPtrCast(GetObject(ZAF_ITEXT("mastercontrol")),ZafString);
 zhunbeiwan=DynamicPtrCast(GetObject(ZAF_ITEXT("zhunbeiwan")),ZafString);
}

ZafEventType TestWindow::Event(const ZafEventStruct &event)//接收从窗口发出的消息;
{
	ZafEventType ccode = event.type;
	switch(ccode)
	{	
		case CUZHUANTAI:
			systemRealTimeData->Control();  //call multicast test window
			break;	
		default:
			ccode = ZafWindow::Event(event);
	}
	return (ccode);
}


void TestWindow::zijianAPT()
{
	ZijAPT->SetText("■");
}


 void TestWindow:: TOAVRzijian()	
{
   while(1)
  { 
			  testWindow->beginAVRfa();//串口2 发握手信号0xF0
	  
			//串口2 接握手信号0x0f
				while(1)
			    {
				   AVRbeginreadlen = read(fdCom1,AVRbeginbuffer,1);
				   if(AVRbeginreadlen==1)break;
			    }
			   
			  if(AVRbeginbuffer[0]==0x0f)
			  	 	{
			  	 		testWindow->ToAVRzijianjiguang();//发送激光发射/激光接收命令
			  	 		testWindow->ETXrecAVR();
			  	    break;
			  	   }
			 
	}	  	
}	


void TestWindow::ETXrecAVR()
{
	//接AVR回信0x34
	while(1)
			    {
				   AVRbeginreadlen = read(fdCom1,AVRbeginbuffer,1);
				   if(AVRbeginreadlen==1)break;
			    }
      
			  if(AVRbeginbuffer[0]==0x34)
			  	 {
			  	 	testWindow->zijianshow();//显示主控系统,激光发射,激光接收,准备结束
			  	 	//testWindow->entrydatapage();//进入数据界面
			  	}

}	
	
 void TestWindow::beginAVRfa()//与AVR通信 发握手信号0xf0
 {
 	int sendlong=0;
 		char send[1]={0xf0};
 		
 		if (FD_ISSET (fdCom1, &WriteFds))//串口2
		{	
			while(1)
			{
		  	sendlong=write(fdCom1,send,1);
		  	if(sendlong==1)
		  		break;
		  }
		}	
 }

	
	
void TestWindow:: delay(unsigned long)
{
	unsigned long int i;
	for(i=0;i<count;i++);
}	
	
	
	
void TestWindow:: ToAVRzijianjiguang()//发送激光发射/激光接收命令 
{
	int sendlong=0;
 		char send[1]={0x12};
 		
 		if (FD_ISSET (fdCom1, &WriteFds))//串口2
		{	
			while(1)
			{
		  	sendlong=write(fdCom1,send,1);
		  	if(sendlong==1)
		  		break;
		  }
		}	

}	
 
 
 



void TestWindow:: zijianshow()
{
	Zijfa->SetText("■");
	Zijjie->SetText("■");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -