diff options
author | David Cuddeback <david.cuddeback@gmail.com> | 2015-10-15 19:22:55 -0700 |
---|---|---|
committer | David Cuddeback <david.cuddeback@gmail.com> | 2015-10-15 19:22:55 -0700 |
commit | c224ff4989dc16d556bc11d8792134d675998572 (patch) | |
tree | c85d1e7eaa2427e8c660239a13e9351445c4dad6 | |
parent | 9cdfa5bd8cf0210514287d70db3a79d62e3e88f0 (diff) | |
parent | 318e79f0f4e148373f1bbb721fd06fa492fc8a7b (diff) | |
download | termios-rs-c224ff4989dc16d556bc11d8792134d675998572.zip |
Merge pull request #3 from myfreeweb/master
Add FreeBSD support
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | src/lib.rs | 7 | ||||
-rwxr-xr-x | src/os/freebsd.rs | 155 | ||||
-rw-r--r-- | src/os/mod.rs | 2 |
4 files changed, 164 insertions, 1 deletions
@@ -49,6 +49,7 @@ fn setup_fd(fd: RawFd) -> io::Result<()> { ## Contributors * [dcuddeback](https://github.com/dcuddeback/) * [conradkleinespel](https://github.com/conradkleinespel) +* [myfreeweb](https://github.com/myfreeweb) ## License Copyright © 2015 David Cuddeback @@ -89,6 +89,11 @@ //! cfsetspeed(termios, termios::os::macos::B230400) //! } //! +//! #[cfg(target_os = "freebsd")] +//! fn set_fastest_speed(termios: &mut Termios) -> io::Result<()> { +//! cfsetspeed(termios, termios::os::freebsd::B921600) +//! } +//! //! # let fd = 1; //! let mut termios = Termios::from_fd(fd).unwrap(); //! set_fastest_speed(&mut termios).unwrap(); @@ -106,7 +111,7 @@ use libc::{c_int,pid_t}; pub use ::os::target::{cc_t,speed_t,tcflag_t}; // types pub use ::os::target::{VEOF,VEOL,VERASE,VINTR,VKILL,VMIN,VQUIT,VSTART,VSTOP,VSUSP,VTIME}; // c_cc subscripts pub use ::os::target::{BRKINT,ICRNL,IGNBRK,IGNCR,IGNPAR,INLCR,INPCK,ISTRIP,IXANY,IXOFF,IXON,PARMRK}; // input modes -pub use ::os::target::{OPOST,ONLCR,OCRNL,ONOCR,ONLRET,OFILL,NLDLY,NL0,NL1,CRDLY,CR0,CR1,CR2,CR3,TABDLY,TAB0,TAB1,TAB2,TAB3,BSDLY,BS0,BS1,VTDLY,VT0,VT1,FFDLY,FF0,FF1}; // output modes +pub use ::os::target::{OPOST,ONLCR,OCRNL,TAB3,ONOCR,ONLRET}; // output modes pub use ::os::target::{B0,B50,B75,B110,B134,B150,B200,B300,B600,B1200,B1800,B2400,B4800,B9600,B19200,B38400}; // baud rate selection pub use ::os::target::{CSIZE,CS5,CS6,CS7,CS8,CSTOPB,CREAD,PARENB,PARODD,HUPCL,CLOCAL}; // control modes pub use ::os::target::{ECHO,ECHOE,ECHOK,ECHONL,ICANON,IEXTEN,ISIG,NOFLSH,TOSTOP}; // local modes diff --git a/src/os/freebsd.rs b/src/os/freebsd.rs new file mode 100755 index 0000000..f4000be --- /dev/null +++ b/src/os/freebsd.rs @@ -0,0 +1,155 @@ +#![allow(non_camel_case_types)] + +extern crate libc; + +use libc::{c_int,c_uint,c_uchar}; + +pub type cc_t = c_uchar; +pub type speed_t = c_uint; +pub type tcflag_t = c_uint; + +#[derive(Debug,Copy,Clone,Eq,PartialEq)] +#[repr(C)] +pub struct termios { + pub c_iflag: tcflag_t, + pub c_oflag: tcflag_t, + pub c_cflag: tcflag_t, + pub c_lflag: tcflag_t, + pub c_cc: [cc_t; NCCS], + c_ispeed: speed_t, + c_ospeed: speed_t +} + +pub const NCCS: usize = 20; + +// c_cc characters +pub const VEOF: usize = 0; +pub const VEOL: usize = 1; +pub const VEOL2: usize = 2; +pub const VERASE: usize = 3; +pub const VWERASE: usize = 4; +pub const VKILL: usize = 5; +pub const VREPRINT: usize = 6; +pub const VERASE2: usize = 7; +pub const VINTR: usize = 8; +pub const VQUIT: usize = 9; +pub const VSUSP: usize = 10; +pub const VSTART: usize = 12; +pub const VSTOP: usize = 13; +pub const VLNEXT: usize = 14; +pub const VDISCARD: usize = 15; +pub const VMIN: usize = 16; +pub const VTIME: usize = 17; + +// c_iflag bits +pub const IGNBRK: tcflag_t = 0x00000001; +pub const BRKINT: tcflag_t = 0x00000002; +pub const IGNPAR: tcflag_t = 0x00000004; +pub const PARMRK: tcflag_t = 0x00000008; +pub const INPCK: tcflag_t = 0x00000010; +pub const ISTRIP: tcflag_t = 0x00000020; +pub const INLCR: tcflag_t = 0x00000040; +pub const IGNCR: tcflag_t = 0x00000080; +pub const ICRNL: tcflag_t = 0x00000100; +pub const IXON: tcflag_t = 0x00000200; +pub const IXOFF: tcflag_t = 0x00000400; +pub const IXANY: tcflag_t = 0x00000800; +pub const IMAXBEL: tcflag_t = 0x00002000; + +// c_oflag bits +pub const OPOST: tcflag_t = 0x00000001; +pub const ONLCR: tcflag_t = 0x00000002; +pub const TABDLY: tcflag_t = 0x00000004; +pub const TAB0: tcflag_t = 0x00000000; +pub const TAB3: tcflag_t = 0x00000004; +pub const OXTABS: tcflag_t = TAB3; +pub const ONOEOT: tcflag_t = 0x00000008; +pub const OCRNL: tcflag_t = 0x00000010; +pub const ONOCR: tcflag_t = 0x00000020; +pub const ONLRET: tcflag_t = 0x00000040; + +// c_cflag bits +pub const CIGNORE: tcflag_t = 0x00000001; +pub const CSIZE: tcflag_t = 0x00000300; +pub const CS5: tcflag_t = 0x00000000; +pub const CS6: tcflag_t = 0x00000100; +pub const CS7: tcflag_t = 0x00000200; +pub const CS8: tcflag_t = 0x00000300; +pub const CSTOPB: tcflag_t = 0x00000400; +pub const CREAD: tcflag_t = 0x00000800; +pub const PARENB: tcflag_t = 0x00001000; +pub const PARODD: tcflag_t = 0x00002000; +pub const HUPCL: tcflag_t = 0x00004000; +pub const CLOCAL: tcflag_t = 0x00008000; +pub const CCTS_OFLOW: tcflag_t = 0x00010000; +pub const CRTSCTS: tcflag_t = CCTS_OFLOW | CRTS_IFLOW; +pub const CRTS_IFLOW: tcflag_t = 0x00020000; +pub const CDTR_IFLOW: tcflag_t = 0x00040000; +pub const CDSR_OFLOW: tcflag_t = 0x00080000; +pub const CCAR_OFLOW: tcflag_t = 0x00100000; +pub const MDMBUF: tcflag_t = CCAR_OFLOW; + +// c_lflag bits +pub const ECHOKE: tcflag_t = 0x00000001; +pub const ECHOE: tcflag_t = 0x00000002; +pub const ECHOK: tcflag_t = 0x00000004; +pub const ECHO: tcflag_t = 0x00000008; +pub const ECHONL: tcflag_t = 0x00000010; +pub const ECHOPRT: tcflag_t = 0x00000020; +pub const ECHOCTL: tcflag_t = 0x00000040; +pub const ISIG: tcflag_t = 0x00000080; +pub const ICANON: tcflag_t = 0x00000100; +pub const ALTWERASE: tcflag_t = 0x00000200; +pub const IEXTEN: tcflag_t = 0x00000400; +pub const EXTPROC: tcflag_t = 0x00000800; +pub const TOSTOP: tcflag_t = 0x00400000; +pub const FLUSHO: tcflag_t = 0x00800000; +pub const NOKERNINFO: tcflag_t = 0x02000000; +pub const PENDIN: tcflag_t = 0x20000000; +pub const NOFLSH: tcflag_t = 0x80000000; + +// baud rates +pub const B0: speed_t = 0; +pub const B50: speed_t = 50; +pub const B75: speed_t = 75; +pub const B110: speed_t = 110; +pub const B134: speed_t = 134; +pub const B150: speed_t = 150; +pub const B200: speed_t = 200; +pub const B300: speed_t = 300; +pub const B600: speed_t = 600; +pub const B1200: speed_t = 1200; +pub const B1800: speed_t = 1800; +pub const B2400: speed_t = 2400; +pub const B4800: speed_t = 4800; +pub const B9600: speed_t = 9600; +pub const B19200: speed_t = 19200; +pub const B38400: speed_t = 38400; +pub const B7200: speed_t = 7200; +pub const B14400: speed_t = 14400; +pub const B28800: speed_t = 28800; +pub const B57600: speed_t = 57600; +pub const B76800: speed_t = 76800; +pub const B115200: speed_t = 115200; +pub const B230400: speed_t = 230400; +pub const B460800: speed_t = 460800; +pub const B921600: speed_t = 921600; +pub const EXTA: speed_t = 19200; +pub const EXTB: speed_t = 38400; + +// tcflow() +pub const TCOOFF: c_int = 1; +pub const TCOON: c_int = 2; +pub const TCIOFF: c_int = 3; +pub const TCION: c_int = 4; + +// tcflush() +pub const TCIFLUSH: c_int = 1; +pub const TCOFLUSH: c_int = 2; +pub const TCIOFLUSH: c_int = 3; + +// tcsetattr() +pub const TCSANOW: c_int = 0; +pub const TCSADRAIN: c_int = 1; +pub const TCSAFLUSH: c_int = 2; +pub const TCSASOFT: c_int = 0x10; diff --git a/src/os/mod.rs b/src/os/mod.rs index 0199033..2d96564 100644 --- a/src/os/mod.rs +++ b/src/os/mod.rs @@ -2,6 +2,8 @@ #[cfg(target_os = "linux")] pub use self::linux as target; #[cfg(target_os = "macos")] pub use self::macos as target; +#[cfg(target_os = "freebsd")] pub use self::freebsd as target; #[cfg(target_os = "linux")] pub mod linux; #[cfg(target_os = "macos")] pub mod macos; +#[cfg(target_os = "freebsd")] pub mod freebsd; |