summaryrefslogtreecommitdiff
path: root/monitor/control.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2016-04-22 15:56:09 +0300
committerJohan Hedberg <johan.hedberg@intel.com>2016-04-27 14:09:16 +0300
commitdac899f0ab81dec8127f2ca32f676735bf4691c7 (patch)
treec378fb1bbe633e3413e190fa0b16fa19c84701c7 /monitor/control.c
parent1b45686e605de58d35b1c29fefa4950ecf670fa6 (diff)
downloadbluez-dac899f0ab81dec8127f2ca32f676735bf4691c7.tar.gz
monitor: Add --tty-speed command line switch
Diffstat (limited to 'monitor/control.c')
-rw-r--r--monitor/control.c57
1 files changed, 55 insertions, 2 deletions
diff --git a/monitor/control.c b/monitor/control.c
index 95df9802c..f9a0b53cb 100644
--- a/monitor/control.c
+++ b/monitor/control.c
@@ -1200,7 +1200,60 @@ static void tty_callback(int fd, uint32_t events, void *user_data)
}
}
-void control_tty(const char *path)
+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;
+}
+
+void control_tty(const char *path, unsigned int speed)
{
struct control_data *data;
struct termios ti;
@@ -1225,7 +1278,7 @@ void control_tty(const char *path)
ti.c_cflag |= (CLOCAL | CREAD);
ti.c_cflag &= ~CRTSCTS;
- cfsetspeed(&ti, B115200);
+ cfsetspeed(&ti, get_speed(speed));
if (tcsetattr(fd, TCSANOW, &ti) < 0) {
perror("Failed to set serial port settings");