@@ -748,6 +748,67 @@ main(void)
close(fd);
}
.EE
+.PP
+Get or set arbitrary baudrate on the serial port.
+.PP
+.EX
+#include <asm/termbits.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+int
+main(int argc, char *argv[])
+{
+#if !defined(TCGETS2) || !defined(TCSETS2) || !defined(BOTHER)
+ fprintf(stderr, "TCGETS2, TCSETS2 or BOTHER is unsupported\en");
+ /* Program may fallback to TCGETS/TCSETS with Bnnn constants */
+ exit(EXIT_FAILURE);
+#else
+ struct termios2 tio2;
+ int fd, rc;
+
+ if (argc != 2 && argc != 3) {
+ fprintf(stderr, "Usage: %s device [new_baudrate]\en", argv[0]);
+ exit(EXIT_FAILURE);
+ }
+
+ fd = open(argv[1], O_RDWR | O_NONBLOCK | O_NOCTTY);
+ if (fd < 0) {
+ perror("open");
+ exit(EXIT_FAILURE);
+ }
+
+ rc = ioctl(fd, TCGETS2, &tio2);
+ if (rc) {
+ perror("TCGETS2");
+ close(fd);
+ exit(EXIT_FAILURE);
+ }
+
+ printf("%u\en", tio2.c_ospeed);
+
+ if (argc == 3) {
+ tio2.c_cflag &= ~CBAUD;
+ tio2.c_cflag |= BOTHER;
+ tio2.c_ospeed = tio2.c_ispeed = atoi(argv[2]);
+
+ rc = ioctl(fd, TCSETS2, &tio2);
+ if (rc) {
+ perror("TCSETS2");
+ close(fd);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ close(fd);
+ exit(EXIT_SUCCESS);
+#endif
+}
+.EE
.SH SEE ALSO
.BR ldattach (1),
.BR ioctl (2),
Signed-off-by: Pali Rohár <pali@kernel.org> --- Changes in v2: * Use \e for backslash * Use exit(EXIT_*) instead of return num * Sort includes * Add comment about possible fallback --- man2/ioctl_tty.2 | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+)