Diff between e0ecf26de207483aa5e8cf797e38eece3098b422 and 67e35de97e2a7b940ee52274577df448cffe4e33

Changed Files

File Additions Deletions Status
monitor/control.c +1 -54 modified
monitor/main.c +7 -2 modified
tools/bccmd.c +4 -28 modified
tools/btattach.c +2 -51 modified
tools/hciattach.c +5 -59 modified

Full Patch

diff --git a/monitor/control.c b/monitor/control.c
index 05faeef..048add2 100644
--- a/monitor/control.c
+++ b/monitor/control.c
@@ -1218,59 +1218,6 @@ static void tty_callback(int fd, uint32_t events, void *user_data)
 	}
 }
 
-static unsigned int get_speed(unsigned int speed)
-{
-	switch (speed) {
-	case 57600:
-		return B57600;
-	case 115200:
-		return B115200;
-	case 230400:
-		return B230400;
-	case 460800:
-		return B460800;
-	case 500000:
-		return B500000;
-	case 576000:
-		return B576000;
-	case 921600:
-		return B921600;
-	case 1000000:
-		return B1000000;
-	case 1152000:
-		return B1152000;
-	case 1500000:
-		return B1500000;
-	case 2000000:
-		return B2000000;
-#ifdef B2500000
-	case 2500000:
-		return B2500000;
-#endif
-#ifdef B3000000
-	case 3000000:
-		return B3000000;
-#endif
-#ifdef B3500000
-	case 3500000:
-		return B3500000;
-#endif
-#ifdef B3710000
-	case 3710000:
-		return B3710000;
-#endif
-#ifdef B4000000
-	case 4000000:
-		return B4000000;
-#endif
-	default:
-		fprintf(stderr, "Unsupported speed. Using 115200.\n");
-		return B115200;
-	}
-
-	return 0;
-}
-
 int control_tty(const char *path, unsigned int speed)
 {
 	struct control_data *data;
@@ -1298,7 +1245,7 @@ int control_tty(const char *path, unsigned int speed)
 	ti.c_cflag |= (CLOCAL | CREAD);
 	ti.c_cflag &= ~CRTSCTS;
 
-	cfsetspeed(&ti, get_speed(speed));
+	cfsetspeed(&ti, speed);
 
 	if (tcsetattr(fd, TCSANOW, &ti) < 0) {
 		err = -errno;
diff --git a/monitor/main.c b/monitor/main.c
index be3d55e..c904166 100644
--- a/monitor/main.c
+++ b/monitor/main.c
@@ -33,6 +33,7 @@
 #include <getopt.h>
 
 #include "src/shared/mainloop.h"
+#include "src/shared/tty.h"
 
 #include "packet.h"
 #include "lmp.h"
@@ -99,7 +100,7 @@ int main(int argc, char *argv[])
 	const char *analyze_path = NULL;
 	const char *ellisys_server = NULL;
 	const char *tty = NULL;
-	unsigned int tty_speed = 115200;
+	unsigned int tty_speed = B115200;
 	unsigned short ellisys_port = 0;
 	const char *str;
 	int exit_status;
@@ -122,7 +123,11 @@ int main(int argc, char *argv[])
 			tty= optarg;
 			break;
 		case 'B':
-			tty_speed = atoi(optarg);
+			tty_speed = tty_get_speed(atoi(optarg));
+			if (!tty_speed) {
+				fprintf(stderr, "Unknown speed: %s\n", optarg);
+				return EXIT_FAILURE;
+			}
 			break;
 		case 'r':
 			reader_path = optarg;
diff --git a/tools/bccmd.c b/tools/bccmd.c
index 4d15f3f..84f1a4a 100644
--- a/tools/bccmd.c
+++ b/tools/bccmd.c
@@ -36,6 +36,8 @@
 #include "lib/hci.h"
 #include "lib/hci_lib.h"
 
+#include "src/shared/tty.h"
+
 #include "csr.h"
 
 #define CSR_TRANSPORT_UNKNOWN	0
@@ -1193,34 +1195,8 @@ int main(int argc, char *argv[])
 			device = strdup(optarg);
 			break;
 		case 'b':
-			switch (atoi(optarg)) {
-			case 9600: bcsp_rate = B9600; break;
-			case 19200: bcsp_rate = B19200; break;
-			case 38400: bcsp_rate = B38400; break;
-			case 57600: bcsp_rate = B57600; break;
-			case 115200: bcsp_rate = B115200; break;
-			case 230400: bcsp_rate = B230400; break;
-			case 460800: bcsp_rate = B460800; break;
-			case 500000: bcsp_rate = B500000; break;
-			case 576000: bcsp_rate = B576000; break;
-			case 921600: bcsp_rate = B921600; break;
-			case 1000000: bcsp_rate = B1000000; break;
-			case 1152000: bcsp_rate = B1152000; break;
-			case 1500000: bcsp_rate = B1500000; break;
-			case 2000000: bcsp_rate = B2000000; break;
-#ifdef B2500000
-			case 2500000: bcsp_rate = B2500000; break;
-#endif
-#ifdef B3000000
-			case 3000000: bcsp_rate = B3000000; break;
-#endif
-#ifdef B3500000
-			case 3500000: bcsp_rate = B3500000; break;
-#endif
-#ifdef B4000000
-			case 4000000: bcsp_rate = B4000000; break;
-#endif
-			default:
+			bcsp_rate = tty_get_speed(atoi(optarg));
+			if (!bcsp_rate) {
 				printf("Unknown BCSP baud rate specified, defaulting to 38400bps\n");
 				bcsp_rate = B38400;
 			}
diff --git a/tools/btattach.c b/tools/btattach.c
index 45962e8..ec63ec9 100644
--- a/tools/btattach.c
+++ b/tools/btattach.c
@@ -46,6 +46,7 @@
 #include "src/shared/mainloop.h"
 #include "src/shared/timeout.h"
 #include "src/shared/util.h"
+#include "src/shared/tty.h"
 #include "src/shared/hci.h"
 
 static int open_serial(const char *path, unsigned int speed)
@@ -219,56 +220,6 @@ static const struct {
 	{ }
 };
 
-static unsigned int get_speed(const char *str)
-{
-	switch (atoi(str)) {
-	case 57600:
-		return B57600;
-	case 115200:
-		return B115200;
-	case 230400:
-		return B230400;
-	case 460800:
-		return B460800;
-	case 500000:
-		return B500000;
-	case 576000:
-		return B576000;
-	case 921600:
-		return B921600;
-	case 1000000:
-		return B1000000;
-	case 1152000:
-		return B1152000;
-	case 1500000:
-		return B1500000;
-	case 2000000:
-		return B2000000;
-#ifdef B2500000
-	case 2500000:
-		return B2500000;
-#endif
-#ifdef B3000000
-	case 3000000:
-		return B3000000;
-#endif
-#ifdef B3500000
-	case 3500000:
-		return B3500000;
-#endif
-#ifdef B3710000
-	case 3710000:
-		return B3710000;
-#endif
-#ifdef B4000000
-	case 4000000:
-		return B4000000;
-#endif
-	}
-
-	return 0;
-}
-
 int main(int argc, char *argv[])
 {
 	const char *bredr_path = NULL, *amp_path = NULL, *proto = NULL;
@@ -296,7 +247,7 @@ int main(int argc, char *argv[])
 			proto = optarg;
 			break;
 		case 'S':
-			speed = get_speed(optarg);
+			speed = tty_get_speed(atoi(optarg));
 			if (!speed) {
 				fprintf(stderr, "Invalid speed: %s\n", optarg);
 				return EXIT_FAILURE;
diff --git a/tools/hciattach.c b/tools/hciattach.c
index 59a76a7..fad176c 100644
--- a/tools/hciattach.c
+++ b/tools/hciattach.c
@@ -46,6 +46,8 @@
 #include "lib/hci.h"
 #include "lib/hci_lib.h"
 
+#include "src/shared/tty.h"
+
 #include "hciattach.h"
 
 struct uart_t {
@@ -84,68 +86,12 @@ static void sig_alarm(int sig)
 	exit(1);
 }
 
-int uart_speed(int s)
-{
-	switch (s) {
-	case 9600:
-		return B9600;
-	case 19200:
-		return B19200;
-	case 38400:
-		return B38400;
-	case 57600:
-		return B57600;
-	case 115200:
-		return B115200;
-	case 230400:
-		return B230400;
-	case 460800:
-		return B460800;
-	case 500000:
-		return B500000;
-	case 576000:
-		return B576000;
-	case 921600:
-		return B921600;
-	case 1000000:
-		return B1000000;
-	case 1152000:
-		return B1152000;
-	case 1500000:
-		return B1500000;
-	case 2000000:
-		return B2000000;
-#ifdef B2500000
-	case 2500000:
-		return B2500000;
-#endif
-#ifdef B3000000
-	case 3000000:
-		return B3000000;
-#endif
-#ifdef B3500000
-	case 3500000:
-		return B3500000;
-#endif
-#ifdef B3710000
-	case 3710000:
-		return B3710000;
-#endif
-#ifdef B4000000
-	case 4000000:
-		return B4000000;
-#endif
-	default:
-		return B57600;
-	}
-}
-
 int set_speed(int fd, struct termios *ti, int speed)
 {
-	if (cfsetospeed(ti, uart_speed(speed)) < 0)
+	if (cfsetospeed(ti, tty_get_speed(speed)) < 0)
 		return -errno;
 
-	if (cfsetispeed(ti, uart_speed(speed)) < 0)
+	if (cfsetispeed(ti, tty_get_speed(speed)) < 0)
 		return -errno;
 
 	if (tcsetattr(fd, TCSANOW, ti) < 0)
@@ -646,7 +592,7 @@ static int csr(int fd, struct uart_t *u, struct termios *ti)
 		fprintf(stderr, "Speed %d too high. Remaining at %d baud\n",
 			u->speed, u->init_speed);
 		u->speed = u->init_speed;
-	} else if (u->speed != 57600 && uart_speed(u->speed) == B57600) {
+	} else if (!tty_get_speed(u->speed)) {
 		/* Unknown speed. Why oh why can't we just pass an int to the kernel? */
 		fprintf(stderr, "Speed %d unrecognised. Remaining at %d baud\n",
 			u->speed, u->init_speed);