chiark / gitweb /
command dumping and debugging mode
authorian <ian>
Sun, 9 Jan 2005 22:58:52 +0000 (22:58 +0000)
committerian <ian>
Sun, 9 Jan 2005 22:58:52 +0000 (22:58 +0000)
hostside/hostside.h
hostside/main.c
hostside/nmra.c
hostside/serialio.c

index db315d9ed7ca2debdcba873c1537c67d48753a42..f3659bcc6ce05b7ec792903f0029384573374b67 100644 (file)
@@ -12,6 +12,8 @@ void xmit_nmra_raw(const Byte *with_csum, int length);
 void xmit_nmra(const Byte *without_csum, int length);
 void xmit_command(const Byte *command, int length);
 
+extern FILE *dump_stream;
+void dump(const char *what, const Byte *data, int length);
 void sysfatal(const char *m);
 void serial_open(const char *device);
 
index 6407be89e0dced9f4f05f5efba82cdb3fe47c437..92d26d78711354f5c5c4121033139894e9252afb 100644 (file)
@@ -15,6 +15,8 @@
 
 #include "hostside.h"
 
+FILE *dump_stream= 0;
+
 int main(int argc, const char **argv) {
   int l, i;
   char hbuf[3], *ep;
@@ -47,13 +49,19 @@ int main(int argc, const char **argv) {
   }
 
   for (;;) {
-    
-    switch (instruction[0]) {
+
+    if (*instruction == 'd') {
+      dump_stream= stdout;
+      instruction++;
+    }
+
+    switch (*instruction) {
     case 'c': xmit_command(buf,l);  break;
     case 'r': xmit_nmra_raw(buf,l); break;
     case 'n': xmit_nmra(buf,l);     break;
     default: abort();
     }
+    assert(!instruction[1]);
 
     if (repeat_delay < 0) break;
     if (iterations >= 0 && !iterations--) break;
index e6697daee387a60108c0857556bfd277dbed6343..51bd88f13c6ce06a45f2e6a964adc3f6120d663d 100644 (file)
@@ -9,6 +9,8 @@ void xmit_nmra_raw(const Byte *nmra_packet, int length) {
   unsigned working, newbits;
   int working_qty;
 
+  dump("xmit_nmra_raw",nmra_packet,length);
+
   assert(length > 0);
   assert(length <= NMRA_PACKET_MAX);
   encp= encoded;
@@ -53,6 +55,8 @@ void xmit_nmra(const Byte *without_csum, int length) {
   int left;
   unsigned running;
 
+  dump("xmit_nmra",without_csum,length);
+
   assert(length >=0 && length < sizeof(with_csum));
   for (left=length, running=0, in=without_csum, out=with_csum;
        left>0;
index 3a5a597b9603343d84ff9d61f06b1717190ffae0..0f4c6aaebee0f51032b30a42c6a5cfcd8b90ad1c 100644 (file)
@@ -24,10 +24,22 @@ void serial_open(const char *device) {
   if (serial_fd<0) sysfatal(device);
 }
 
+void dump(const char *what, const Byte *data, int length) {
+  printf("%-25s %3d  ",what,length);
+  while (length>0) {
+    printf(" %02x", *data);
+    data++;
+    length--;
+  }
+  printf("\n");
+}
+
 void xmit_command(const Byte *command, int length) {
   int r;
   assert(length <= COMMAND_ENCODED_MAX);
 
+  dump("xmit_command",command,length);
+  
   while (length > 0) {
     r= write(serial_fd, command,
             serial_fudge_delay ? 1 : length);