您的位置:首页 > 运维架构 > Linux

USB硬件键盘鼠标控制器V2.0 支持Linxu

2010-05-27 22:33 423 查看
Red Hat Linux 9.0 测试编译

默认com1  9600,n,8,1

1.接上板子的串口线在com1,接上usb线

2.编译: gcc -o comtest comtest.c

3.执行: ./comtest

4.鼠标移动

 

www.laorenshen.cn
2010.05

 

 

 

comtest.c 代码如下:

 

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>

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 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;
 newtio.c_cc[VTIME]  = 0;
 newtio.c_cc[VMIN] = 0;
 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,int comport)
{
 char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"};
 long  vdisable;
 if (comport==1)
 { fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
  if (-1 == fd){
   perror("Can't Open Serial Port");
   return(-1);
  }
  else
   printf("open ttyS0 ...../n");
 }
 else if(comport==2)
 { fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDELAY);
  if (-1 == fd){
   perror("Can't Open Serial Port");
   return(-1);
  }
  else
   printf("open ttyS1 ...../n");
 }
 else if (comport==3)
 {
  fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDELAY);
  if (-1 == fd){
   perror("Can't Open Serial Port");
   return(-1);
  }
  else
   printf("open ttyS2 ...../n");
 }
 if(fcntl(fd, F_SETFL, 0)<0)
  printf("fcntl failed!/n");
 else
  printf("fcntl=%d/n",fcntl(fd, F_SETFL,0));
 if(isatty(STDIN_FILENO)==0)
  printf("standard input is not a terminal device/n");
 else
  printf("isatty success!/n");
 printf("fd-open=%d/n",fd);
 return fd;
}

int main(void)
{
 int fd;
 int nread,i;
 char buff[]="Hello/n";
 char buff2[1024];

 if((fd=open_port(fd,1))<0){
  perror("open_port error");
  return;
 }
 if((i=set_opt(fd,9600,8,'N',1))<0){
  perror("set_opt error");
  return;
 }
 //printf("fd=%d/n",fd);
 buff2[0]=0x02;
 buff2[1]=0x00;
 buff2[2]=0xf6;
 buff2[3]=0x00;
 buff2[4]=0x00;
 //nread=read(fd,buff,8);
 nread=write(fd,buff2,5);
 //printf("nread=%d,%s/n",nread,buff);
 close(fd);
 return;
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息