changeset 52:b015036286f3

fc-loadtool: fast-baud communication with loadagent implemented, works!
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 23 Jun 2013 04:34:22 +0000
parents aa62352647f7
children 604648026e9c
files loadtools/Makefile loadtools/labaud.c loadtools/ltdispatch.c
diffstat 3 files changed, 52 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/loadtools/Makefile	Sun Jun 23 03:38:09 2013 +0000
+++ b/loadtools/Makefile	Sun Jun 23 04:34:22 2013 +0000
@@ -9,9 +9,9 @@
 IRAM_OBJS=	defpath.o hexdecode.o hwparam.o romload.o sercomm.o sertool.o \
 		srecreader.o ttypassthru.o
 
-LOADTOOL_OBJS=	crc32tab.o defpath.o hexdecode.o hwparam.o ltdispatch.o \
-		ltdump.o ltexit.o ltmain.o ltpassthru.o ltscript.o romload.o \
-		sercomm.o srecreader.o tpinterf.o tpinterf2.o
+LOADTOOL_OBJS=	crc32tab.o defpath.o hexdecode.o hwparam.o labaud.o \
+		ltdispatch.o ltdump.o ltexit.o ltmain.o ltpassthru.o ltscript.o\
+		romload.o sercomm.o srecreader.o tpinterf.o tpinterf2.o
 
 XRAM_OBJS=	chainload.o clmain.o defpath.o hexdecode.o hwparam.o \
 		initscript.o romload.o sercomm.o srecreader.o tpinterf.o \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/labaud.c	Sun Jun 23 04:34:22 2013 +0000
@@ -0,0 +1,47 @@
+/*
+ * This module handles the switching of serial baud rates
+ * in coordination with loadagent.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <termios.h>
+#include <unistd.h>
+#include "baudrate.h"
+
+extern int target_fd;
+extern struct baudrate *current_baud_rate;
+extern struct baudrate *find_baudrate_by_name();
+
+loadagent_switch_baud(newbr)
+	struct baudrate *newbr;
+{
+	char *argv[3];
+	static char U = 'U';
+
+	argv[0] = "baud";
+	argv[1] = newbr->name;
+	argv[2] = 0;
+	tpinterf_make_cmd(argv);
+	if (tpinterf_send_cmd() < 0)
+		return(-1);
+	switch_baud_rate(newbr);
+	usleep(150000);
+	write(target_fd, &U, 1);
+	return tpinterf_pass_output(1);
+}
+
+cmd_baud(argc, argv)
+	char **argv;
+{
+	struct baudrate *br;
+
+	if (argc < 2) {
+		printf("Current baud rate is %s\n", current_baud_rate->name);
+		return(0);
+	}
+	br = find_baudrate_by_name(argv[1]);
+	if (!br)
+		return(-1);	/* error msg already printed */
+	return loadagent_switch_baud(br);
+}
--- a/loadtools/ltdispatch.c	Sun Jun 23 03:38:09 2013 +0000
+++ b/loadtools/ltdispatch.c	Sun Jun 23 04:34:22 2013 +0000
@@ -8,6 +8,7 @@
 #include <strings.h>
 #include <stdlib.h>
 
+extern int cmd_baud();
 extern int cmd_crc32();
 extern int cmd_dump2bin();
 extern int cmd_dump2srec();
@@ -21,6 +22,7 @@
 	int maxargs;
 	int (*func)();
 } cmdtab[] = {
+	{"baud", 0, 1, cmd_baud},
 	{"crc32", 2, 2, cmd_crc32},
 	{"dump", 2, 2, loadtool_cmd_passthru},
 	{"dump2bin", 3, 3, cmd_dump2bin},