#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "hi_common.h"
#include "hi_comm_video.h"
#include "hi_comm_sys.h"
#include "nacelle_uart_ctl.h"
int g_nace_fd,g_sins_gps_fd,g_msg_fd,g_msg_test_fd;
static pthread_t gs_nace_recv;
static pthread_t gs_nace_send;
static pthread_t gs_sins;
static pthread_t gs_gps;
static pthread_t gs_msg;
extern void thread_sins_gps_recv();
extern void thread_msg_recv();
extern void thread_nacelle_recv();
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
struct termios newtio,oldtio;
if ( tcgetattr( fd,oldtio) != 0)
{
perror("SetupSerial 1");
return -1;
}
bzero( newtio, sizeof( newtio ) );
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag = ~CSIZE;
switch( nBits )
{
case 7:
newtio.c_cflag |= CS7;
break;
case 8:
newtio.c_cflag |= CS8;
break;
}
switch( nEvent )
{
case 'O': //
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);
break;
case 'E': //
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag = ~PARODD;
break;
case 'N': //
newtio.c_cflag = ~PARENB;
break;
}
switch( nSpeed )
{
case 2400:
cfsetispeed(newtio, B2400);
cfsetospeed(newtio, B2400);
break;
case 4800:
cfsetispeed(newtio, B4800);
cfsetospeed(newtio, B4800);
break;
case 9600:
cfsetispeed(newtio, B9600);
cfsetospeed(newtio, B9600);
break;
case 38400:
cfsetispeed(newtio, B38400);
cfsetospeed(newtio, B38400);
break;
case 115200:
cfsetispeed(newtio, B115200);
cfsetospeed(newtio, B115200);
break;
default:
cfsetispeed(newtio, B9600);
cfsetospeed(newtio, B9600);
break;
}
if( nStop == 1 )
{
newtio.c_cflag = ~CSTOPB;
}
else if ( nStop == 2 )
{
newtio.c_cflag |= CSTOPB;
}
// if (parity != 0)
newtio.c_iflag |= INPCK;
/* Set Raw Mode */
newtio.c_lflag = ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
newtio.c_oflag = ~OPOST; /*Output*/
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,newtio))!=0)
{
perror("com set error");
return -1;
}
printf("set done!\n");
return 0;
}
int open_port()
{
int fd;
fd = open( "/dev/ttyAMA1", O_RDWR);///dev/ttyAMA1
if (-1 == fd)
{
perror("Can't Open Serial Port");
return(-1);
}
else
{
printf("open ttyAMA1 .....\n");
}
#if 1
if(fcntl(fd, F_SETFL, 0)<0)//
{
printf("fcntl failed!\n");
}
else
{
printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));
}
#endif
return fd;
}
void thread_nacelle_recv() //
{
unsigned char data;
NACELLE_CTL_RET retdata;
char recvdata[21];
int i,j,ch_sum,pos;
int m1,m2;
int ret;
i = 0;
float rate_h,rate_v;
while(1) {
ret = read(g_nace_fd,recvdata,21);
//printf("recv data is %x\n",data);
//resolve_data(data);
i = 0;
pos = 2;
printf("nace ret data %d:",ret);
for (j = 0;j<21;j++) {
printf(" %x ",recvdata[j]);
}
printf("\r\n");
#if 1
if (recvdata[pos] == 1) {
rate_h = recvdata[pos+1]*256*0.01832+recvdata[pos+2]*0.01832;
rate_v = recvdata[pos+5]*256*0.01832+recvdata[pos+6]*0.01832;
printf("rate_h = %.2f,rate_v = %.2f\n",rate_h,rate_v);
} else {
printf("other data.............\n");
}
#endif
}
}
void send_nacelle_data()
{
NACELLE_CTL nacelle_ctl_dt;
char data;
int ret;
if (g_nace_fd < 0) {
printf("nacelle port error,return\n");
}
while( 1 ) {
printf("************** *****************\n");
printf("*0. \n");
printf("* 1. \n");
printf("* 2. \n");
printf("* 3. \n");
printf("* 4. \n");
printf("* 5. \n");
printf("* 6. \n");
printf("* 7. \n");
printf("* 8. \n");
printf("* 9. \n");
printf("* a. \n");
printf("* b. \n");
printf("* c. \n");
printf("* d. \n");
printf("* e. \n");
printf("* f. \n");
printf("* g. \n");
printf("* h. \n");
printf("* i. \n");
printf("* j. \n");
printf("***************************************************\n");
printf("\n\n:");
data = getchar();
getchar();
// printf("data is %c %d\n",data,data);
memset(nacelle_ctl_dt,0,8);
switch( data )
{
case '0':
return;
case '1':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x09;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x01;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '2':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0xB;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x1;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '3':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x09;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x5;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '4':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0xB;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x5;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '5':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x9;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x6;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '6':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0xB;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x6;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '7':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x9;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x7;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '8':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0xB;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x7;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case '9':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x9;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x8;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'a':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x10;
nacelle_ctl_dt.data[2] = 255;
nacelle_ctl_dt.data[3] = 255;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'b':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x08;
nacelle_ctl_dt.data[2] = 0x64;
nacelle_ctl_dt.data[3] = 0x64;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
ret = write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'c':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x04;
nacelle_ctl_dt.data[2] = 0x64;
nacelle_ctl_dt.data[3] = 0x64;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'd':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x02;
nacelle_ctl_dt.data[2] = 0x64;
nacelle_ctl_dt.data[3] = 0x64;
nacelle_ctl_dt.end = 0xAF;//
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'e':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x0;
nacelle_ctl_dt.data[2] = 0x64;
nacelle_ctl_dt.data[3] = 0x64;
nacelle_ctl_dt.end =0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'f':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x14;
nacelle_ctl_dt.data[1] = 0x08;
nacelle_ctl_dt.data[2] = 0x13;
nacelle_ctl_dt.data[3] = 0x08;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'g':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x20;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x0;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'h':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x40;
nacelle_ctl_dt.data[2] = 0x0;
nacelle_ctl_dt.data[3] = 0x0;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'i':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x0;
nacelle_ctl_dt.data[1] = 0x0;
nacelle_ctl_dt.data[2] = 0x64;
nacelle_ctl_dt.data[3] = 0x64;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
case 'j':
nacelle_ctl_dt.start = 0xA0;
nacelle_ctl_dt.devnum = 0x0F;
nacelle_ctl_dt.data[0] = 0x1;
nacelle_ctl_dt.data[1] = 0x06;
nacelle_ctl_dt.data[2] = 0x3c;
nacelle_ctl_dt.data[3] = 0x14;
nacelle_ctl_dt.end = 0xAF;
nacelle_ctl_dt.crc =nacelle_ctl_dt.data[0]^nacelle_ctl_dt.data[1]^nacelle_ctl_dt.data[2]^nacelle_ctl_dt.data[3] ;
write(g_nace_fd,nacelle_ctl_dt,sizeof(NACELLE_CTL));
break;
default:
printf("\n,\n");
}
}
}
void cmd_sys()
{
char data;
int ret;
while(1) {
printf("************** *****************\n");
printf("* 1. \n");
printf("* 2. \n");
printf("***************************************************\n");
printf("\n\n:");
data = getchar();
getchar();
switch( data )
{
case '1':
send_nacelle_data();
break;
case '2':
bd_msg_send();
break;
default:
printf("\n,\n");
}
}
}
int GPS_INS_NACELLE_SYS()
{
//hisi3516a
HI_MPI_SYS_SetReg(0x200f0000+0x07c, 0x1);//rx1 enable
HI_MPI_SYS_SetReg(0x200f0000+0x084, 0x1);//tx1 enable
//()
if((g_nace_fd=open_port())<0)
{
perror("open nace port error");
return;
}
if(set_opt(g_nace_fd,38400,8,'N',1)<0)
{
perror("set_opt error");
return;
}
//gps (,)
if((g_sins_gps_fd=open_sinsport())<0)
{
perror("open sins_gps port error");
return;
}
if(set_opt(g_sins_gps_fd,115200,8,'N',1)<0)
{
perror("set_opt error");
return;
}
//()
if((g_msg_fd=open_msgport())<0)
{
perror("open msg port error");
return;
}
if(set_opt(g_msg_fd,115200,8,'N',1)<0)
{
perror("set_opt error");
return;
}
//,
pthread_create(gs_nace_send, NULL, (void *) cmd_sys, NULL);
//,
//pthread_create(gs_nace_recv, 0, (void *) thread_nacelle_recv, NULL);
//,
pthread_create(gs_msg, NULL, (void *) thread_msg_recv, NULL);
//gps
pthread_create(gs_sins, NULL, (void *) thread_sins_gps_recv, NULL);
return 0;
}