#include <string.h>
#include <assert.h>
#include <stdlib.h>
+#include <unistd.h>
#include "hostside.h"
int l, i;
char hbuf[3], *ep;
Byte buf[NMRA_PACKET_MAX + COMMAND_ENCODED_MAX];
+
+ int repeat_delay= -1;
+ const char *serial_port, *data_string, *instruction;
- assert(argc==4 || argc==5);
- assert(argv[3]);
- serial_open(argv[1]);
+ assert(argc>=4 && argc<=6);
+ serial_port= argv[1];
+ data_string= argv[2];
+ instruction= argv[3];
+ if (argc>4) serial_fudge_delay= atoi(argv[4]);
+ if (argc>5) repeat_delay= atoi(argv[5]);
+
+ serial_open(serial_port);
- l= strlen(argv[2]);
+ l= strlen(data_string);
assert(!(l&1));
l >>= 1;
assert(l<=sizeof(buf));
for (i=0; i<l; i++) {
- hbuf[0]= argv[2][i*2];
- hbuf[1]= argv[2][i*2+1];
+ hbuf[0]= data_string[i*2];
+ hbuf[1]= data_string[i*2+1];
hbuf[2]= 0;
buf[i]= strtoul(hbuf,&ep,16);
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;
- case 'n': xmit_nmra(buf,l); break;
- default: abort();
+ for (;;) {
+
+ switch (instruction[0]) {
+ case 'c': xmit_command(buf,l); break;
+ case 'r': xmit_nmra_raw(buf,l); break;
+ case 'n': xmit_nmra(buf,l); break;
+ default: abort();
+ }
+
+ if (repeat_delay < 0) break;
+ if (repeat_delay > 0) usleep(repeat_delay);
}
return 0;