diff --git a/monitor/control.c b/monitor/control.c
index 05faeef..048add2 100644
--- a/monitor/control.c
+++ b/monitor/control.c
}
}
-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;
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
#include <getopt.h>
#include "src/shared/mainloop.h"
+#include "src/shared/tty.h"
#include "packet.h"
#include "lmp.h"
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;
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
#include "lib/hci.h"
#include "lib/hci_lib.h"
+#include "src/shared/tty.h"
+
#include "csr.h"
#define CSR_TRANSPORT_UNKNOWN 0
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
#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)
{ }
};
-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;
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
#include "lib/hci.h"
#include "lib/hci_lib.h"
+#include "src/shared/tty.h"
+
#include "hciattach.h"
struct uart_t {
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)
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);