]> git.sesse.net Git - ultimatescore/commitdiff
Make the bodet client read from a serial port.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 31 Oct 2018 21:46:15 +0000 (22:46 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 31 Oct 2018 21:46:28 +0000 (22:46 +0100)
client/bodet.cpp

index b9eecc9c6ac83991daaebf5ae05ceabe5d8226e4..0c94116161d52c0909081315db06b570de4acc0e 100644 (file)
@@ -1,7 +1,9 @@
 // Bodet BT-6000 decoder.
 
+#include <fcntl.h>
 #include <stdio.h>
 #include <string.h>
+#include <termios.h>
 #include <unistd.h>
 
 #include <string>
@@ -68,13 +70,29 @@ int main(int argc, char **argv)
        }
        saddr6.sin6_port = htons(port);
 
-       // TODO: open serial port
+       const char *serialpath = "/dev/ttyUSB0";
+       if (argc >= 4) {
+               serialpath = argv[3];
+       }
+       int serialfd = open(serialpath, O_RDWR);
+       if (serialfd == -1) {
+               perror(serialpath);
+               exit(1);
+       }
+
+       struct termios options;
+       memset(&options, 0, sizeof(options));
+       options.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
+       options.c_iflag = IGNBRK | IGNPAR;
+       options.c_lflag = 0;
+       options.c_cc[VMIN] = 1;  // Blocking read, minimum one byte.
+       tcsetattr(serialfd, TCSANOW, &options);
 
        string buf;
 
        for ( ;; ) {
                char ch;
-               int ret = read(0, &ch, 1);
+               int ret = read(serialfd, &ch, 1);
                if (ret == -1) {
                        perror("read");
                        exit(1);
@@ -84,6 +102,7 @@ int main(int argc, char **argv)
                        exit(1);
                }
 
+               putchar(ch);
                if (ch == 1) {  // SOH
                        buf = ch;
                        continue;