// // Serial Receive Program // // cc -o sirw sirw.c -lwiringPi // #include #include #include #include #include #define DEBUG 0 int readSerial(int fd, char * buff, int blen, int timeout) { unsigned long endTime; int ch; int pos = 0; if(DEBUG)printf("millis=%d\n",millis()); endTime = millis () + timeout; if(DEBUG)printf("endTime=%d\n",endTime); buff[pos] = 0; while (1) { if (millis () > endTime) return -1; if (serialDataAvail (fd)) { ch = serialGetchar (fd); if(DEBUG)printf (" -> %02x %c\n", ch,ch); if (ch == 0x0d) { } else if (ch == 0x0a) { return pos; } else { if (pos < blen) buff[pos++] = ch; if (pos < blen) buff[pos] = 0; } } // end if } // end while } int main (int argc, char **argv) { int fd; int len; char buff[64]; char device[32]; strcpy(device,"/dev/ttyS1"); if (argc == 2) strcpy(device,argv[1]); printf("Reading serial input from %s\nPush any IR\n",device); /* Open device */ // if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0) { if ((fd = serialOpen (device, 4800)) < 0) { printf ("Unable to open serial device: %s\n", strerror (errno)) ; return 1 ; } if (wiringPiSetup () == -1) { printf ("Unable to start wiringPi: %s\n", strerror (errno)) ; return 1 ; } // printf("wiringPiSetup\n"); while(1) { // Receive data len=readSerial(fd, buff, sizeof(buff),10000); if (len != -1) { printf("readSerial data=[%s]\n",buff); } } }