chiark / gitweb /
support serial_fudge_delay
authorian <ian>
Sat, 8 Jan 2005 23:41:07 +0000 (23:41 +0000)
committerian <ian>
Sat, 8 Jan 2005 23:41:07 +0000 (23:41 +0000)
hostside/hostside.h
hostside/main.c
hostside/serialio.c

index 8e5dfe6b7b76beacc4d195bdabc4ba6eb64d3f3e..db315d9ed7ca2debdcba873c1537c67d48753a42 100644 (file)
@@ -15,4 +15,6 @@ void xmit_command(const Byte *command, int length);
 void sysfatal(const char *m);
 void serial_open(const char *device);
 
+extern int serial_fudge_delay;
+
 #endif /*HOSTSIDE_H*/
index dab5244f9b19a407bc43e54701031ffbda292ab8..d0e184a8e8d6affcc5d75127286273266e5a274b 100644 (file)
@@ -19,7 +19,7 @@ int main(int argc, const char **argv) {
   char hbuf[3], *ep;
   Byte buf[NMRA_PACKET_MAX + COMMAND_ENCODED_MAX];
   
-  assert(argc==4);
+  assert(argc==4 || argc==5);
   assert(argv[3]);
   serial_open(argv[1]);
 
@@ -36,6 +36,9 @@ int main(int argc, const char **argv) {
     assert(ep==&hbuf[2]);
   }
 
+  if (argc==5)
+    serial_fudge_delay= atoi(argv[4]);
+
   switch (argv[3][0]) {
   case 'c': xmit_command(buf,l);  break;
   case 'r': xmit_nmra_raw(buf,l); break;
index b4bd7fb10a3d8d2f64c11f2f890d03044e868107..3a5a597b9603343d84ff9d61f06b1717190ffae0 100644 (file)
@@ -11,6 +11,8 @@
 
 #include "hostside.h"
 
+int serial_fudge_delay= 0;
+
 static int serial_fd= -1;
 
 void sysfatal(const char *m) { perror(m); exit(12); }
@@ -27,7 +29,8 @@ void xmit_command(const Byte *command, int length) {
   assert(length <= COMMAND_ENCODED_MAX);
 
   while (length > 0) {
-    r= write(serial_fd, command, length);
+    r= write(serial_fd, command,
+            serial_fudge_delay ? 1 : length);
     if (r==-1) {
       if (errno == EINTR) continue;
       sysfatal("command_transmit");
@@ -35,5 +38,7 @@ void xmit_command(const Byte *command, int length) {
     assert(r<=length);
     command += r;
     length -= r;
+    if (r>0 && serial_fudge_delay)
+      usleep(serial_fudge_delay);
   }
 }