From: ian Date: Sun, 9 Jan 2005 22:58:52 +0000 (+0000) Subject: command dumping and debugging mode X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=92556b9862c6b27b39071fd7abaf3227286b4eaa;p=trains.git command dumping and debugging mode --- diff --git a/hostside/hostside.h b/hostside/hostside.h index db315d9..f3659bc 100644 --- a/hostside/hostside.h +++ b/hostside/hostside.h @@ -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); diff --git a/hostside/main.c b/hostside/main.c index 6407be8..92d26d7 100644 --- a/hostside/main.c +++ b/hostside/main.c @@ -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; diff --git a/hostside/nmra.c b/hostside/nmra.c index e6697da..51bd88f 100644 --- a/hostside/nmra.c +++ b/hostside/nmra.c @@ -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; diff --git a/hostside/serialio.c b/hostside/serialio.c index 3a5a597..0f4c6aa 100644 --- a/hostside/serialio.c +++ b/hostside/serialio.c @@ -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);