int setOption(int fd,int nSpeed, int nBits, char mode,char nEvent, int nStop)
{
struct termios newtio;
bzero( &newtio, sizeof( newtio ) );
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE; switch( nBits )
{
case :
newtio.c_cflag |= CS7;
break;
case :
newtio.c_cflag |= CS8;
break;
}
switch( mode )
{
case 'S':
newtio.c_lflag |= ICANON;
newtio.c_lflag |= ECHO;
newtio.c_cc[VMIN] = ;
newtio.c_cc[VTIME] = ;
break;
case 'N':
newtio.c_lflag &= ~ICANON;
newtio.c_lflag &= ~ECHO;
newtio.c_lflag |= ECHOE;
newtio.c_oflag |= ONLCR;
newtio.c_oflag |= OPOST;
newtio.c_cc[VMIN] = ;
newtio.c_cc[VTIME] = ;
break;
case 'M':
newtio.c_lflag &= ~ICANON;
newtio.c_lflag &= ~ECHO;
newtio.c_lflag |= ECHOE;
newtio.c_oflag |= ONLCR;
newtio.c_oflag |= OPOST;
newtio.c_cc[VMIN] = ;
newtio.c_cc[VTIME] = ;
break; default:
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 :
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);
break;
case :
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break;
case :
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
case :
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
default:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
}
if ( nStop == )
{
newtio.c_cflag &= ~CSTOPB;
}
else if ( nStop == )
{
newtio.c_cflag |= CSTOPB;
}
tcflush(fd,TCIFLUSH);
if ((tcsetattr(fd,TCSANOW,&newtio))!=)
{
perror("com set error");
return -;
}
return ;
} void exitBmconsole(int signum)
{
char muxName[]={0x00};
tcflush(console_fd,TCIFLUSH);
tcflush(uart3_fd,TCIFLUSH);
resetConsoleConfig(); dup2(oldstdin,);
dup2(oldstdout,);
close(uart3_fd);
close(console_fd);
muxClearAll(i2cfd_mux, MUX_SLAVE_ADDR);
close(i2cfd_mux); sprintf(muxName,"MUX%d",gMuxId);
setInUseFlag(muxName,);
exit();
} void *MuxOutputToCom5(void)
{
int nread;
char buff[MAX_BUFF_LEN+];
if ((setOption(uart3_fd,,,'N','N',))<)
{
perror("setOption error");
pthread_exit(NULL);
}
while()
{
memset(buff,,sizeof(char)*( MAX_BUFF_LEN + ));
nread = ;
nread = read(uart3_fd,buff,MAX_BUFF_LEN);
if (nread >)
{
if(buff[] == && buff[] == )
{
write(console_fd,&buff[],nread);
}
else
{
write(console_fd,buff,nread);
}
}
} pthread_exit(NULL);
} void *Com5InputToMux(void)
{
int nread,result;
char buff[MAX_BUFF_LEN+];
char inputBuff[TEMP_ST_LEN+];
int inputNumber = ;
FILE *stream;
int recievExitFlag = ; if ((stream= freopen("/usr/std.in","w+",stdin)) == NULL)
{
printf("freopen stdin fail\n");
kill(getpid(),SIGINT);
}
if ((stream = freopen("/usr/std.out","w+",stdout))== NULL)
{
printf("freopen stdout fail\n");
kill(getpid(),SIGINT);
}
if ((result = setOption(console_fd,,,'M','N',))<)
{
perror("set console_fd opt error");
kill(getpid(),SIGINT);
}
memset(inputBuff,,sizeof(char)*( TEMP_ST_LEN+ )); while()
{
memset(buff,,sizeof(char)*( MAX_BUFF_LEN + )); nread = read(console_fd,buff,MAX_BUFF_LEN);
if (nread > )
{
if( recievExitFlag == )
{
if( (nread != ) || (inputNumber == && nread == && buff[] != LOWER_Q_ASCII) || ( inputNumber == && nread == && buff[] != CR_ASCII) )
{
inputNumber = ;
recievExitFlag = ;
memset(inputBuff,,sizeof(char)*TEMP_ST_LEN);
}
}
if (nread == )
{
if (buff[] == CR_ASCII)
{
if (inputNumber == 0x02 && inputBuff[] == QUIT_IDENTIFY_ASCII && inputBuff[] == LOWER_Q_ASCII)/*quit bmconsole*/
{
exitBmconsole();
}
memset(inputBuff,,sizeof(char)*TEMP_ST_LEN);
inputNumber = ;
recievExitFlag = ;
}
if (inputNumber > MAX_BUFF_LEN)
{
memset(inputBuff,,sizeof(char)*TEMP_ST_LEN);
inputNumber = ;
}
if ( buff[] == QUIT_IDENTIFY_ASCII )
{
recievExitFlag = ;
}
if ( recievExitFlag == )
{
inputBuff[inputNumber++] = buff[];
}
}
if (recievExitFlag != )
{
write(uart3_fd,buff,nread);
}
}
}
pthread_exit(NULL);
}

最新文章

  1. React Native知识11-Props(属性)与State(状态)
  2. C语言全局变量那些事儿
  3. 引用64位dll时候出现 未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。试图加载格式不正确的程序。
  4. abap 字符串处理
  5. scala2.10.x case classes cannot have more than 22 parameters
  6. XMPP协议的原理介绍
  7. Arrays.asList的使用及异常问题
  8. git push用法和常见问题分析
  9. 【转】copy 和 mutablecopy (深拷贝和浅拷贝)
  10. mciSendString用法
  11. poj2656---求一列数中最大数的序数而且在前面输入的更优先
  12. net::ERR_CONNCTION_ABORTED与http post request header is too large 错误
  13. 每日一练ACM 2019.0422
  14. MBR内容解析
  15. 前端 HTML body标签相关内容 常用标签 分割线 &lt;hr&gt;
  16. echarts遇到的问题
  17. 师弟推荐软件-/mathpix
  18. cas单点登录-CAS5.1.3 overlay服务器搭建(二)
  19. git patch 使用
  20. 系统管理命令之who

热门文章

  1. jquery判断 input type="file"上传文件是否为空
  2. HBASE学习笔记(四)
  3. lvs工作方式和调度算法
  4. mysql5.7.26做主主配置
  5. pyinstaller 打包工具的使用方法
  6. 使用kettle实现循环
  7. react axios 跨域问题
  8. javascript(腾讯)
  9. vue-router中$route 和 $router
  10. python-魔法属性和反射