📄 testmain.cpp
字号:
#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 + -