FreeCalypso > hg > freecalypso-tools
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;