#include #include #include #include #include #include #define BAUDRATE B19200 #define MODEMDEVICE "/dev/cua0" #define _POSIX_SOURCE 1 /* POSIX compliant source */ #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE; int fd; main() { int c, res,ret; struct termios oldtio,newtio; unsigned char buf[255]; int i,count; long position,velocity,Oposition; fd = open(MODEMDEVICE, O_RDWR); if (fd <0) {perror(MODEMDEVICE); exit(-1); } tcgetattr(fd,&oldtio); /* save current port settings */ /* bzero(newtio, sizeof(newtio)); */ newtio.c_cflag = BAUDRATE | CS8 | CREAD; newtio.c_iflag = 0; newtio.c_oflag = 0; /* set input mode (non-canonical, no echo,...) */ newtio.c_lflag = 0; newtio.c_cc[VTIME] = 0; /* inter-character timer unused */ newtio.c_cc[VMIN] = 1; /* blocking read until 1 chars received */ tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); while(1) { ReadStatus(); count = 0; do { ret = read(fd,&buf[count],6-count); count += ret; } while (count < 6); position = buf[1]; position |= (buf[2] << 8); position |= (buf[3] << 16); position |= (buf[4] << 24); velocity = position - Oposition; printf("%ld %ld\n",position,velocity); Oposition = position; } tcsetattr(fd,TCSANOW,&oldtio); } ReadStatus () { unsigned char a[40]; int i = 0; int j; unsigned char sum = 0; int ret; a[i++] = 0xAA; a[i++] = 0x02; a[i++] = 0x13; a[i++] = 0x01; sum = 0; for(j=1;j