aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2013-09-12 00:43:27 +0200
committerLorenz Meier <lm@inf.ethz.ch>2013-09-12 00:43:27 +0200
commit0308f399d98f53a634206705c57eed208f5ad8a3 (patch)
tree540fc6df847cf61f2ac1676adc9d72bd99ab65e2 /Tools
parent8d497b58f95d910b7ae6d8447d8c5dccf77c565a (diff)
parent5e6d3604a377ab56bb0f40384fffb9370dbe0d74 (diff)
downloadpx4-firmware-0308f399d98f53a634206705c57eed208f5ad8a3.tar.gz
px4-firmware-0308f399d98f53a634206705c57eed208f5ad8a3.tar.bz2
px4-firmware-0308f399d98f53a634206705c57eed208f5ad8a3.zip
Merge branch 'master' of github.com:PX4/Firmware
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/combin0 -> 13632 bytes
-rw-r--r--Tools/com.c191
-rwxr-xr-xTools/px_uploader.py2
3 files changed, 192 insertions, 1 deletions
diff --git a/Tools/com b/Tools/com
new file mode 100755
index 000000000..1d80d4aa5
--- /dev/null
+++ b/Tools/com
Binary files differ
diff --git a/Tools/com.c b/Tools/com.c
new file mode 100644
index 000000000..fa52dcb61
--- /dev/null
+++ b/Tools/com.c
@@ -0,0 +1,191 @@
+/*
+ * Building: cc -o com com.c
+ * Usage : ./com /dev/device [speed]
+ * Example : ./com /dev/ttyS0 [115200]
+ * Keys : Ctrl-A - exit, Ctrl-X - display control lines status
+ * Darcs : darcs get http://tinyserial.sf.net/
+ * Homepage: http://tinyserial.sourceforge.net
+ * Version : 2009-03-05
+ *
+ * Ivan Tikhonov, http://www.brokestream.com, kefeer@brokestream.com
+ * Patches by Jim Kou, Henry Nestler, Jon Miner, Alan Horstmann
+ *
+ */
+
+
+/* Copyright (C) 2007 Ivan Tikhonov
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Ivan Tikhonov, kefeer@brokestream.com
+
+*/
+
+#include <termios.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/signal.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <errno.h>
+
+int transfer_byte(int from, int to, int is_control);
+
+typedef struct {char *name; int flag; } speed_spec;
+
+
+void print_status(int fd) {
+ int status;
+ unsigned int arg;
+ status = ioctl(fd, TIOCMGET, &arg);
+ fprintf(stderr, "[STATUS]: ");
+ if(arg & TIOCM_RTS) fprintf(stderr, "RTS ");
+ if(arg & TIOCM_CTS) fprintf(stderr, "CTS ");
+ if(arg & TIOCM_DSR) fprintf(stderr, "DSR ");
+ if(arg & TIOCM_CAR) fprintf(stderr, "DCD ");
+ if(arg & TIOCM_DTR) fprintf(stderr, "DTR ");
+ if(arg & TIOCM_RNG) fprintf(stderr, "RI ");
+ fprintf(stderr, "\r\n");
+}
+
+int main(int argc, char *argv[])
+{
+ int comfd;
+ struct termios oldtio, newtio; //place for old and new port settings for serial port
+ struct termios oldkey, newkey; //place tor old and new port settings for keyboard teletype
+ char *devicename = argv[1];
+ int need_exit = 0;
+ speed_spec speeds[] =
+ {
+ {"1200", B1200},
+ {"2400", B2400},
+ {"4800", B4800},
+ {"9600", B9600},
+ {"19200", B19200},
+ {"38400", B38400},
+ {"57600", B57600},
+ {"115200", B115200},
+ {NULL, 0}
+ };
+ int speed = B9600;
+
+ if(argc < 2) {
+ fprintf(stderr, "example: %s /dev/ttyS0 [115200]\n", argv[0]);
+ exit(1);
+ }
+
+ comfd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);
+ if (comfd < 0)
+ {
+ perror(devicename);
+ exit(-1);
+ }
+
+ if(argc > 2) {
+ speed_spec *s;
+ for(s = speeds; s->name; s++) {
+ if(strcmp(s->name, argv[2]) == 0) {
+ speed = s->flag;
+ fprintf(stderr, "setting speed %s\n", s->name);
+ break;
+ }
+ }
+ }
+
+ fprintf(stderr, "C-a exit, C-x modem lines status\n");
+
+ tcgetattr(STDIN_FILENO,&oldkey);
+ newkey.c_cflag = B9600 | CRTSCTS | CS8 | CLOCAL | CREAD;
+ newkey.c_iflag = IGNPAR;
+ newkey.c_oflag = 0;
+ newkey.c_lflag = 0;
+ newkey.c_cc[VMIN]=1;
+ newkey.c_cc[VTIME]=0;
+ tcflush(STDIN_FILENO, TCIFLUSH);
+ tcsetattr(STDIN_FILENO,TCSANOW,&newkey);
+
+
+ tcgetattr(comfd,&oldtio); // save current port settings
+ newtio.c_cflag = speed | CS8 | CLOCAL | CREAD;
+ newtio.c_iflag = IGNPAR;
+ newtio.c_oflag = 0;
+ newtio.c_lflag = 0;
+ newtio.c_cc[VMIN]=1;
+ newtio.c_cc[VTIME]=0;
+ tcflush(comfd, TCIFLUSH);
+ tcsetattr(comfd,TCSANOW,&newtio);
+
+ print_status(comfd);
+
+ while(!need_exit) {
+ fd_set fds;
+ int ret;
+
+ FD_ZERO(&fds);
+ FD_SET(STDIN_FILENO, &fds);
+ FD_SET(comfd, &fds);
+
+
+ ret = select(comfd+1, &fds, NULL, NULL, NULL);
+ if(ret == -1) {
+ perror("select");
+ } else if (ret > 0) {
+ if(FD_ISSET(STDIN_FILENO, &fds)) {
+ need_exit = transfer_byte(STDIN_FILENO, comfd, 1);
+ }
+ if(FD_ISSET(comfd, &fds)) {
+ need_exit = transfer_byte(comfd, STDIN_FILENO, 0);
+ }
+ }
+ }
+
+ tcsetattr(comfd,TCSANOW,&oldtio);
+ tcsetattr(STDIN_FILENO,TCSANOW,&oldkey);
+ close(comfd);
+
+ return 0;
+}
+
+
+int transfer_byte(int from, int to, int is_control) {
+ char c;
+ int ret;
+ do {
+ ret = read(from, &c, 1);
+ } while (ret < 0 && errno == EINTR);
+ if(ret == 1) {
+ if(is_control) {
+ if(c == '\x01') { // C-a
+ return -1;
+ } else if(c == '\x18') { // C-x
+ print_status(to);
+ return 0;
+ }
+ }
+ while(write(to, &c, 1) == -1) {
+ if(errno!=EAGAIN && errno!=EINTR) { perror("write failed"); break; }
+ }
+ } else {
+ fprintf(stderr, "\nnothing to read. probably port disconnected.\n");
+ return -2;
+ }
+ return 0;
+}
+
diff --git a/Tools/px_uploader.py b/Tools/px_uploader.py
index cab3c2fd0..52d089360 100755
--- a/Tools/px_uploader.py
+++ b/Tools/px_uploader.py
@@ -436,7 +436,7 @@ while True:
print("attempting reboot on %s..." % port)
up.send_reboot()
# wait for the reboot, without we might run into Serial I/O Error 5
- time.sleep(1.5)
+ time.sleep(0.5)
continue
try: