changeset 255:ab8410d06ca7

libserial-newlnx: new way implemented, compiles
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 22 Sep 2017 00:19:41 +0000
parents 6984b76f3def
children 4290dfab55e5
files libserial-newlnx/Makefile libserial-newlnx/baudrate.h libserial-newlnx/baudtab.c libserial-newlnx/setbaud.c
diffstat 4 files changed, 32 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libserial-newlnx/Makefile	Fri Sep 22 00:19:41 2017 +0000
@@ -0,0 +1,13 @@
+CC=	gcc
+CFLAGS=	-O2
+OBJS=	baudtab.o nonblock.o openport.o setbaud.o setbyname.o
+LIB=	libserial.a
+
+all:	${LIB}
+
+${LIB}:	${OBJS}
+	ar rcu $@ ${OBJS}
+	ranlib $@
+
+clean:
+	rm -f *.[oa] errs
--- a/libserial-newlnx/baudrate.h	Fri Sep 22 00:09:37 2017 +0000
+++ b/libserial-newlnx/baudrate.h	Fri Sep 22 00:19:41 2017 +0000
@@ -3,5 +3,6 @@
 struct baudrate {
 	char	*name;
 	int	termios_code;
+	int	nonstd_speed;
 	int	bootrom_code;
 };
--- a/libserial-newlnx/baudtab.c	Fri Sep 22 00:09:37 2017 +0000
+++ b/libserial-newlnx/baudtab.c	Fri Sep 22 00:19:41 2017 +0000
@@ -7,25 +7,21 @@
 #include <stdlib.h>
 #include <string.h>
 #include <strings.h>
-#include <termios.h>
+#include <asm/termbits.h>
 #include "baudrate.h"
 
 struct baudrate baud_rate_table[] = {
 	/* the first listed rate will be our default */
-	{"115200",	B115200,	0},
-	{"57600",	B57600,		1},
-	{"38400",	B38400,		2},
-	{"19200",	B19200,		4},
-	/*
-	 * Non-standard high baud rates remapped by CP2102 EEPROM programming
-	 * or by a hacky patch to the ftdi_sio Linux kernel driver to work
-	 * with FTDI adapters.
-	 */
-	{"812500",	B921600,	-1},
-	{"406250",	B460800,	-1},
-	{"203125",	B230400,	-1},
+	{"115200",	B115200,	0,	0},
+	{"57600",	B57600,		0,	1},
+	{"38400",	B38400,		0,	2},
+	{"19200",	B19200,		0,	4},
+	/* Non-standard high baud rates */
+	{"812500",	BOTHER,		812500,	-1},
+	{"406250",	BOTHER,		406250,	-1},
+	{"203125",	BOTHER,		203125,	-1},
 	/* table search terminator */
-	{NULL,		B0,		-1},
+	{NULL,		B0,		0,	-1},
 };
 
 struct baudrate *
--- a/libserial-newlnx/setbaud.c	Fri Sep 22 00:09:37 2017 +0000
+++ b/libserial-newlnx/setbaud.c	Fri Sep 22 00:19:41 2017 +0000
@@ -4,7 +4,8 @@
 
 #include <sys/types.h>
 #include <sys/ioctl.h>
-#include <termios.h>
+#include <asm/ioctls.h>
+#include <asm/termbits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -17,18 +18,18 @@
 set_serial_baudrate(br)
 	struct baudrate *br;
 {
-	struct termios target_termios;
+	struct termios2 target_termios;
 
 	target_termios.c_iflag = IGNBRK;
 	target_termios.c_oflag = 0;
-	target_termios.c_cflag = CLOCAL|HUPCL|CREAD|CS8;
+	target_termios.c_cflag = br->termios_code | CLOCAL|HUPCL|CREAD|CS8;
 	target_termios.c_lflag = 0;
 	target_termios.c_cc[VMIN] = 1;
 	target_termios.c_cc[VTIME] = 0;
-	cfsetispeed(&target_termios, br->termios_code);
-	cfsetospeed(&target_termios, br->termios_code);
-	if (tcsetattr(target_fd, TCSAFLUSH, &target_termios) < 0) {
-		perror("tcsetattr");
+	target_termios.c_ispeed = br->nonstd_speed;
+	target_termios.c_ospeed = br->nonstd_speed;
+	if (ioctl(target_fd, TCSETSF2, &target_termios) < 0) {
+		perror("TCSETSF2");
 		exit(1);
 	}
 	current_baud_rate = br;