diff loadtools/labaud.c @ 0:e7502631a0f9

initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 11 Jun 2016 00:13:35 +0000
parents
children 8c011177adb9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/labaud.c	Sat Jun 11 00:13:35 2016 +0000
@@ -0,0 +1,48 @@
+/*
+ * 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';
+
+	printf("Switching loadagent communication to %s baud\n", newbr->name);
+	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);
+}