2 * simple test harness for now
3 * asserts on usage errors
4 * see README.adhoc-test for usage info
17 const char *progname= "adhoc-test";
18 static FILE *dump_stream= 0;
20 static int repeat_delay= -1, iterations= -1;
21 static const char *serial_port= "/dev/railway";
25 void die_hook(void) { }
26 void die_vprintf_hook(const char *fmt, va_list al) { }
28 static void pahex(const char **argv) {
29 const char *data_string;
36 while ((data_string= *argv++)) {
37 l= strlen(data_string);
38 if (l&1) badusage("hex argument odd length");
42 if (c >= buf.d + sizeof(buf.d)) badusage("too much hex");
44 hbuf[0]= data_string[i*2];
45 hbuf[1]= data_string[i*2+1];
47 *c++= strtoul(hbuf,&ep,16);
48 if (ep!=&hbuf[2]) badusage("bad hex in hex argument");
54 struct NmraParseEncodeCaller {
55 const char *const *argv;
58 unsigned long nmra_argnumber(NmraParseEncodeCaller *pec, int argi) {
64 errno=0; l= strtoul(arg,&ep,0);
65 if (errno || *ep || ep==arg) badusage("bad numeric arg value");
69 void nmra_problem(NmraParseEncodeCaller *pec, const char *problem) {
73 static void dump(const char *what, const Byte *data, int length) {
74 if (!dump_stream) return;
75 fprintf(dump_stream,"%-25s %3d ",what,length);
77 fprintf(dump_stream," %02x", *data);
81 fprintf(dump_stream,"\n");
84 static void xmit_command(void) {
85 dump("xmit_command", buf.d, buf.l);
86 serial_transmit_now(buf.d, buf.l);
89 static void xmit_nmra_raw(void) {
92 dump("xmit_nmra_raw", buf.d, buf.l);
93 nmra_encodeforpic(&buf, &pi);
94 serial_transmit_now(pi.d, pi.l);
97 static void xmit_nmra_bytes(void) {
100 nmra_addchecksum(&buf);
105 int main(int argc, const char **argv) {
106 void (*xmitter)(void);
109 if (!*argv++) badusage("need argv[0]");
111 while ((arg=*argv++) && *arg=='-') {
114 case 's': serial_port= arg; break;
115 case 'i': iterations= atoi(arg); break;
116 case 'f': serial_fudge_delay= atoi(arg); break;
117 case 'w': repeat_delay= atoi(arg); break;
118 case 'd': dump_stream= stdout; goto noarg;
119 default: badusage("uknown option");
120 noarg: if (*arg) badusage("option with value where forbidden");
124 if (!arg) badusage("need arg");
127 if (!strcmp(arg,#f)) { \
136 NmraParseEncodeCaller pec;
138 for (argc=0; argv[argc]; argc++);
139 nmra_parse_encode(&buf, arg, strlen(arg), argc, &pec);
140 xmitter= xmit_nmra_bytes;
143 serial_open(serial_port);
148 if (repeat_delay < 0) break;
149 if (iterations >= 0 && !iterations--) break;
150 if (repeat_delay > 0) usleep(repeat_delay);