FreeCalypso > hg > fc-sim-tools
view serial/serport.c @ 46:e2ef4b8e4136
main tools: display spenh info when serial back end is used
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Mar 2021 02:08:02 +0000 |
parents | 61a8ac93764f |
children | fbedb67d234f |
line wrap: on
line source
/* * This module implements the guts of OS-specific serial port handling * for our fc-sim-tools serial back end. The present version is very * Linux-specific, using Linux-specific <asm/...> header files, * struct termios2 and BOTHER to request arbitrary serial baud rates * outside of POSIX Bxxx rigid set. */ #include <sys/types.h> #include <sys/file.h> #include <sys/ioctl.h> #include <asm/ioctls.h> #include <asm/termbits.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int target_fd; open_serial_port(ttyport) char *ttyport; { target_fd = open(ttyport, O_RDWR|O_NONBLOCK); if (target_fd < 0) { perror(ttyport); exit(1); } ioctl(target_fd, TIOCEXCL); return 0; } set_serial_params(br) { struct termios2 target_termios; target_termios.c_iflag = IGNBRK; target_termios.c_oflag = 0; target_termios.c_cflag = BOTHER|CLOCAL|HUPCL|CREAD|CS8|CSTOPB|PARENB; target_termios.c_lflag = 0; target_termios.c_cc[VMIN] = 1; target_termios.c_cc[VTIME] = 0; target_termios.c_ispeed = br; target_termios.c_ospeed = br; if (ioctl(target_fd, TCSETSF2, &target_termios) < 0) { perror("TCSETSF2"); exit(1); } return 0; } set_serial_nonblock(state) int state; { ioctl(target_fd, FIONBIO, &state); } serial_card_reset() { int mctl_arg = TIOCM_DTR | TIOCM_RTS; ioctl(target_fd, TIOCMBIS, &mctl_arg); usleep(20000); ioctl(target_fd, TCFLSH, TCIFLUSH); ioctl(target_fd, TIOCMBIC, &mctl_arg); }