From 5f40a5d63ec552ed76bf7b1198e2c1742bf1baaf Mon Sep 17 00:00:00 2001 From: salvopitru Date: Wed, 15 Dec 2010 11:18:09 +0000 Subject: [PATCH] Added serialdump utility from sky folder to stm32w folder. It has one more option for limiting upload speed. --- platform/mb851/Makefile.mb851 | 15 +- tools/stm32w/serialdump-linux | Bin 0 -> 13593 bytes tools/stm32w/serialdump-windows.exe | Bin 0 -> 25050 bytes tools/stm32w/serialdump.c | 380 ++++++++++++++++++++++++++++ 4 files changed, 394 insertions(+), 1 deletion(-) create mode 100644 tools/stm32w/serialdump-linux create mode 100644 tools/stm32w/serialdump-windows.exe create mode 100644 tools/stm32w/serialdump.c diff --git a/platform/mb851/Makefile.mb851 b/platform/mb851/Makefile.mb851 index afca59dfd..71b3ba8bd 100644 --- a/platform/mb851/Makefile.mb851 +++ b/platform/mb851/Makefile.mb851 @@ -1,4 +1,4 @@ -# $Id: Makefile.mb851,v 1.1 2010/10/25 09:03:39 salvopitru Exp $ +# $Id: Makefile.mb851,v 1.2 2010/12/15 11:18:09 salvopitru Exp $ ARCH= irq.c sensors.c acc-sensor.c button-sensor.c temperature-sensor.c mems.c @@ -16,3 +16,16 @@ CONTIKI_TARGET_SOURCEFILES += $(ARCH) $(CONTIKI_TARGET_MAIN) MCU=STM32W108 include $(CONTIKI)/cpu/stm32w108/Makefile.stm32w108 + +SERIALDUMP = $(CONTIKI)/tools/stm32w/serialdump-linux + +ifdef OS + ifneq (,$(findstring Windows,$(OS))) + SERIALDUMP = $(CONTIKI)/tools/stm32w/serialdump-windows + endif +endif + + + +login: + $(SERIALDUMP) -b115200 -d10000 $(DEV) diff --git a/tools/stm32w/serialdump-linux b/tools/stm32w/serialdump-linux new file mode 100644 index 0000000000000000000000000000000000000000..30dd9d7e54f0dc66789daf527c6c752e9bbcb29f GIT binary patch literal 13593 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 +#include +#include +#include +#include +#include +#include +#include + +#define BAUDRATE B57600 +#define BAUDRATE_S "57600" +#ifdef linux +#define MODEMDEVICE "/dev/ttyS0" +#else +#define MODEMDEVICE "/dev/com1" +#endif /* linux */ + +#define DEFAULT_DELAY 10000 + +#define SLIP_END 0300 +#define SLIP_ESC 0333 +#define SLIP_ESC_END 0334 +#define SLIP_ESC_ESC 0335 + +#define CSNA_INIT 0x01 + +#define BUFSIZE 40 +#define HCOLS 20 +#define ICOLS 18 + +#define MODE_START_DATE 0 +#define MODE_DATE 1 +#define MODE_START_TEXT 2 +#define MODE_TEXT 3 +#define MODE_INT 4 +#define MODE_HEX 5 +#define MODE_SLIP_AUTO 6 +#define MODE_SLIP 7 +#define MODE_SLIP_HIDE 8 + +static unsigned char rxbuf[2048]; + +static int +usage(int result) +{ + printf("Usage: serialdump [-x] [-s[on]] [-i] [-dDELAY] [-bSPEED] [SERIALDEVICE]\n"); + printf(" -x for hexadecimal output\n"); + printf(" -i for decimal output\n"); + printf(" -s for automatic SLIP mode\n"); + printf(" -so for SLIP only mode (all data is SLIP packets)\n"); + printf(" -sn to hide SLIP packages\n"); + printf(" -T[format] to add time for each text line\n"); + printf(" -dDELAY delay in us between 2 consecutive writes (must be different from 0)\n"); + printf(" (see man page for strftime() for format description)\n"); + return result; +} + +static void +print_hex_line(unsigned char *prefix, unsigned char *outbuf, int index) +{ + int i; + + printf("\r%s", prefix); + for(i = 0; i < index; i++) { + if((i % 4) == 0) { + printf(" "); + } + printf("%02X", outbuf[i] & 0xFF); + } + printf(" "); + for(i = index; i < HCOLS; i++) { + if((i % 4) == 0) { + printf(" "); + } + printf(" "); + } + for(i = 0; i < index; i++) { + if(outbuf[i] < 30 || outbuf[i] > 126) { + printf("."); + } else { + printf("%c", outbuf[i]); + } + } +} + +int main(int argc, char **argv) +{ + struct termios options; + fd_set mask, smask; + int fd; + speed_t speed = BAUDRATE; + char *speedname = BAUDRATE_S; + char *device = MODEMDEVICE; + char *timeformat = NULL; + unsigned char buf[BUFSIZE], outbuf[HCOLS]; + unsigned char mode = MODE_START_TEXT; + int nfound, flags = 0; + unsigned char lastc = '\0'; + int delay = DEFAULT_DELAY; + + int index = 1; + while (index < argc) { + if (argv[index][0] == '-') { + switch(argv[index][1]) { + case 'b': + /* set speed */ + if (strcmp(&argv[index][2], "38400") == 0) { + speed = B38400; + speedname = "38400"; + } else if (strcmp(&argv[index][2], "19200") == 0) { + speed = B19200; + speedname = "19200"; + } else if (strcmp(&argv[index][2], "57600") == 0) { + speed = B57600; + speedname = "57600"; + } else if (strcmp(&argv[index][2], "115200") == 0) { + speed = B115200; + speedname = "115200"; + } else { + fprintf(stderr, "unsupported speed: %s\n", &argv[index][2]); + return usage(1); + } + break; + case 'x': + mode = MODE_HEX; + break; + case 'i': + mode = MODE_INT; + break; + case 's': + switch(argv[index][2]) { + case 'n': + mode = MODE_SLIP_HIDE; + break; + case 'o': + mode = MODE_SLIP; + break; + default: + mode = MODE_SLIP_AUTO; + break; + } + break; + case 'T': + if(strlen(&argv[index][2]) == 0) { + timeformat = "%Y-%m-%d %H:%M:%S"; + } else { + timeformat = &argv[index][2]; + } + mode = MODE_START_DATE; + break; + case 'd': + delay = atoi(&argv[index][2]); + if(delay == 0){ + return usage(1); + } + break; + case 'h': + return usage(0); + default: + fprintf(stderr, "unknown option '%c'\n", argv[index][1]); + return usage(1); + } + index++; + } else { + device = argv[index++]; + if (index < argc) { + fprintf(stderr, "too many arguments\n"); + return usage(1); + } + } + } + fprintf(stderr, "connecting to %s (%s)", device, speedname); + + fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY | O_SYNC ); + if (fd <0) { + fprintf(stderr, "\n"); + perror(device); + exit(-1); + } + fprintf(stderr, " [OK]\n"); + + if (fcntl(fd, F_SETFL, 0) < 0) { + perror("could not set fcntl"); + exit(-1); + } + + if (tcgetattr(fd, &options) < 0) { + perror("could not get options"); + exit(-1); + } +/* fprintf(stderr, "serial options set\n"); */ + cfsetispeed(&options, speed); + cfsetospeed(&options, speed); + /* Enable the receiver and set local mode */ + options.c_cflag |= (CLOCAL | CREAD); + /* Mask the character size bits and turn off (odd) parity */ + options.c_cflag &= ~(CSIZE|PARENB|PARODD); + /* Select 8 data bits */ + options.c_cflag |= CS8; + + /* Raw input */ + options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + /* Raw output */ + options.c_oflag &= ~OPOST; + + if (tcsetattr(fd, TCSANOW, &options) < 0) { + perror("could not set options"); + exit(-1); + } + + /* Make read() return immediately */ +/* if (fcntl(fd, F_SETFL, FNDELAY) < 0) { */ +/* perror("\ncould not set fcntl"); */ +/* exit(-1); */ +/* } */ + + FD_ZERO(&mask); + FD_SET(fd, &mask); + FD_SET(fileno(stdin), &mask); + + index = 0; + for (;;) { + smask = mask; + nfound = select(FD_SETSIZE, &smask, (fd_set *) 0, (fd_set *) 0, + (struct timeval *) 0); + if(nfound < 0) { + if (errno == EINTR) { + fprintf(stderr, "interrupted system call\n"); + continue; + } + /* something is very wrong! */ + perror("select"); + exit(1); + } + + if(FD_ISSET(fileno(stdin), &smask)) { + /* data from standard in */ + int n = read(fileno(stdin), buf, sizeof(buf)); + if (n < 0) { + perror("could not read"); + exit(-1); + } else if (n > 0) { + /* because commands might need parameters, lines needs to be + separated which means the terminating LF must be sent */ +/* while(n > 0 && buf[n - 1] < 32) { */ +/* n--; */ +/* } */ + if(n > 0) { + int i; + /* fprintf(stderr, "SEND %d bytes\n", n);*/ + /* write slowly */ + for (i = 0; i < n; i++) { + if (write(fd, &buf[i], 1) <= 0) { + perror("write"); + exit(1); + } else { + fflush(NULL); + usleep(delay); + } + } + } + } else { + /* End of input, exit. */ + exit(0); + } + } + + if(FD_ISSET(fd, &smask)) { + int i, j, n = read(fd, buf, sizeof(buf)); + if (n < 0) { + perror("could not read"); + exit(-1); + } + + for(i = 0; i < n; i++) { + switch(mode) { + case MODE_START_TEXT: + case MODE_TEXT: + printf("%c", buf[i]); + break; + case MODE_START_DATE: { + time_t t; + t = time(&t); + strftime(outbuf, HCOLS, timeformat, localtime(&t)); + printf("%s|", outbuf); + mode = MODE_DATE; + } + /* continue into the MODE_DATE */ + case MODE_DATE: + printf("%c", buf[i]); + if(buf[i] == '\n') { + mode = MODE_START_DATE; + } + break; + case MODE_INT: + printf("%03d ", buf[i]); + if(++index >= ICOLS) { + index = 0; + printf("\n"); + } + break; + case MODE_HEX: + rxbuf[index++] = buf[i]; + if(index >= HCOLS) { + print_hex_line("", rxbuf, index); + index = 0; + printf("\n"); + } + break; + + case MODE_SLIP_AUTO: + case MODE_SLIP_HIDE: + if(!flags && (buf[i] != SLIP_END)) { + /* Not a SLIP packet? */ + printf("%c", buf[i]); + break; + } + /* continue to slip only mode */ + case MODE_SLIP: + switch(buf[i]) { + case SLIP_ESC: + lastc = SLIP_ESC; + break; + + case SLIP_END: + if(index > 0) { + if(flags != 2 && mode != MODE_SLIP_HIDE) { + /* not overflowed: show packet */ + print_hex_line("SLIP: ", rxbuf, + index > HCOLS ? HCOLS : index); + printf("\n"); + } + lastc = '\0'; + index = 0; + flags = 0; + } else { + flags = !flags; + } + break; + + default: + if(lastc == SLIP_ESC) { + lastc = '\0'; + + /* Previous read byte was an escape byte, so this byte will be + interpreted differently from others. */ + switch(buf[i]) { + case SLIP_ESC_END: + buf[i] = SLIP_END; + break; + case SLIP_ESC_ESC: + buf[i] = SLIP_ESC; + break; + } + } + + rxbuf[index++] = buf[i]; + if(index >= sizeof(rxbuf)) { + fprintf(stderr, "**** slip overflow\n"); + index = 0; + flags = 2; + } + break; + } + break; + } + } + + /* after processing for some output modes */ + if(index > 0) { + switch(mode) { + case MODE_HEX: + print_hex_line("", rxbuf, index); + break; + } + } + fflush(stdout); + } + } +}