From 2fa58b6e4059e43062c74e7078766993bf57896c Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 25 Apr 2012 21:53:41 +0200 Subject: [PATCH] sysmobts_v2: Add code that might or might switch the board into ubl mode --- src/main.c | 14 ++++++++++++++ src/serial.c | 25 +++++++++++++++++++++++++ src/serial.h | 6 ++++++ 3 files changed, 45 insertions(+) diff --git a/src/main.c b/src/main.c index ef99bfa..f45dab4 100644 --- a/src/main.c +++ b/src/main.c @@ -338,6 +338,15 @@ main(int argc, char *argv[]) if (ret) return ret; + /* Put the board in UART boot and reset it */ + set_rts(0); + set_dtr(1); + usleep(500 * 1000); + set_rts(1); + usleep(500 * 1000); + set_rts(0); + usleep(500 * 1000); + /* Wait for the device to send the BOOTME sequence. * If the UBL is already running, it will send BOOTPSP. */ found = wait_for_message("BOOTME", "BOOTPSP", NULL); @@ -412,6 +421,11 @@ main(int argc, char *argv[]) ret = 0; end: + set_dtr(0); + set_rts(1); + usleep(100 * 1000); + set_rts(0); + /* Close serial port. */ serial_port_close(); return ret; diff --git a/src/serial.c b/src/serial.c index 2670c92..d871e6a 100644 --- a/src/serial.c +++ b/src/serial.c @@ -31,6 +31,7 @@ #include /* For isdigit() and friends... */ #include #include +#include #include "common.h" #include "serial.h" @@ -192,6 +193,30 @@ serial_port_close(void) } } +int +set_dtr(int dtr) +{ + int status; + + ioctl(serial_port.fd, TIOCMGET, &status); + if (dtr) status &= ~TIOCM_DTR; + else status |= TIOCM_DTR; + ioctl(serial_port.fd, TIOCMSET, &status); + return EXIT_SUCCESS; +} + +int +set_rts(int rts) +{ + int status; + + ioctl(serial_port.fd, TIOCMGET, &status); + if (rts) status &= ~TIOCM_RTS; + else status |= TIOCM_RTS; + ioctl(serial_port.fd, TIOCMSET, &status); + return EXIT_SUCCESS; +} + int send_message(const char *msg) { diff --git a/src/serial.h b/src/serial.h index 6cafb28..f6baa0e 100644 --- a/src/serial.h +++ b/src/serial.h @@ -30,6 +30,12 @@ serial_port_open(const char *port, const int baud_rate_index); void serial_port_close(void); +int +set_dtr(int dtr); + +int +set_rts(int rts); + int send_message(const char *msg);