From 5be0b56aa1668f35a7e142fce7bdb6d6f2508f94 Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Wed, 16 Jan 2013 12:07:27 -0300 Subject: [PATCH] swuart-chat/chat.c: options -r and -t to select pins; bit rate argument --- swuart-chat/chat.c | 65 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/swuart-chat/chat.c b/swuart-chat/chat.c index b48bc62..ba2b6e6 100644 --- a/swuart-chat/chat.c +++ b/swuart-chat/chat.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -24,8 +25,10 @@ #include -#define RX UBB_DAT0 -#define TX UBB_DAT1 +#define DEFAULT_RX UBB_DAT0 +#define DEFAULT_TX UBB_DAT1 + +#define DEFAULT_BPS 38400 /* ----- TTY raw mode ------------------------------------------------------ */ @@ -69,10 +72,66 @@ static void at_exit(void) } +static uint32_t translate(const char *s) +{ + if (!strcasecmp(s, "DAT0")) + return UBB_DAT0; + if (!strcasecmp(s, "DAT1")) + return UBB_DAT1; + if (!strcasecmp(s, "DAT2")) + return UBB_DAT2; + if (!strcasecmp(s, "DAT3")) + return UBB_DAT3; + if (!strcasecmp(s, "CMD")) + return UBB_CMD; + if (!strcasecmp(s, "CLK")) + return UBB_CLK; + if (!strcasecmp(s, "NONE")) + return 0; + fprintf(stderr, "unknown pin \"%s\"\n", s); + exit(1); +} + + +static void usage(const char *name) +{ + fprintf(stderr, "usage: %s [-r rx_pin] [-t tx_pin] [bps]\n", name); + exit(1); +} + + int main(int argc, char **argv) { + uint32_t rx = DEFAULT_RX; + uint32_t tx = DEFAULT_TX; + int bps = DEFAULT_BPS; uint8_t local[10], remote[100]; int got, i; + int c; + + while ((c = getopt(argc, argv, "r:t:")) != EOF) + switch (c) { + case 'r': + rx = translate(optarg); + break; + case 't': + tx = translate(optarg); + break; + default: + usage(*argv); + } + + switch (argc-optind) { + case 0: + break; + case 1: + bps = atoi(argv[optind]); + if (!bps) + usage(*argv); + break; + default: + usage(*argv); + } if (ubb_open(0) < 0) { perror("ubb_open"); @@ -80,7 +139,7 @@ int main(int argc, char **argv) } atexit(at_exit); raw(); - if (swuart_open(TX, RX, 38400) < 0) { + if (swuart_open(tx, rx, bps) < 0) { perror("swuart_open"); exit(1); }