added eet and new start-dart
authorChristian Pointner <equinox@realraum.at>
Mon, 4 Jul 2011 21:40:46 +0000 (21:40 +0000)
committerChristian Pointner <equinox@realraum.at>
Mon, 4 Jul 2011 21:40:46 +0000 (21:40 +0000)
dart/eet.c [new file with mode: 0644]
dart/start-dart.sh

diff --git a/dart/eet.c b/dart/eet.c
new file mode 100644 (file)
index 0000000..af33b70
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ *  eet
+ *
+ *
+ *  Copyright (C) 2011 Christian Pointner <equinox@realraum.at>
+ *                         
+ *  This file is part of eet.
+ *
+ *  eet is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  any later version.
+ *
+ *  eet is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with eet. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <sys/select.h>
+#include <unistd.h>
+
+#include <stdio.h>
+
+int write_buf(char* buf, int len)
+{
+  int i;
+  for(i=0; i < len;) {
+    int w = write(1, &(buf[i]), len - i);
+    if(w < 0)
+      return w;
+    
+    i+=w;
+  }
+  return 0;
+}
+
+int main(int argc, char* argv[])
+{
+  if(argc < 2) {
+    fprintf(stderr, "Please specify fd number\n");
+    return 1;
+  }
+  int fd = atoi(argv[1]);
+  if(fd < 3) {
+    fprintf(stderr, "the specified fd is not valid (must be higher than 2\n");
+    return 2;
+  }
+
+  char buf[1024];
+  fd_set rfds;
+
+  for(;;) {
+    FD_ZERO(&rfds);
+    FD_SET(0, &rfds);
+    FD_SET(fd, &rfds);
+    int ret = select(fd+1, &rfds, NULL, NULL, NULL);
+
+    if (ret == -1) {
+      perror("select()");
+      return 3;
+    }
+    else {
+      int i;
+      for(i = 0; i < 2; i++) {
+        if(FD_ISSET((i ? fd : 0), &rfds)) {
+          int r = read((i ? fd : 0), buf, sizeof(buf));
+          if(r <=0 ) {
+            return r;
+          }
+
+          ret = write_buf(buf, r);
+          if(ret) return ret;
+        }
+      } 
+    }
+  }
+
+  return 0;
+}
index 49960b1..db62dec 100755 (executable)
@@ -8,5 +8,15 @@ fi
 mode=$1
 shift
 
+FIFO=/tmp/dart.fifo
+rm -f $FIFO
+mkfifo $FIFO
+stty -echo
+
 ssh dart stty -F /dev/ttyDart 57600
-ssh dart cat /dev/ttyDart | ./dart-$mode.pl $* | ./dart-soundonly.pl | ../dart-sounds/src/dart-sounds ../dart-sounds/media > /dev/null
+ssh dart cat /dev/ttyDart  >$FIFO &
+exec 42<$FIFO
+./eet 42 | ./dart-$mode.pl $* | ./dart-soundonly.pl | ../dart-sounds/src/dart-sounds ../dart-sounds/media > /dev/null
+rm -f $FIFO
+
+exit 0
\ No newline at end of file