summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cuddeback <david.cuddeback@gmail.com>2015-10-15 19:22:55 -0700
committerDavid Cuddeback <david.cuddeback@gmail.com>2015-10-15 19:22:55 -0700
commitc224ff4989dc16d556bc11d8792134d675998572 (patch)
treec85d1e7eaa2427e8c660239a13e9351445c4dad6
parent9cdfa5bd8cf0210514287d70db3a79d62e3e88f0 (diff)
parent318e79f0f4e148373f1bbb721fd06fa492fc8a7b (diff)
downloadtermios-rs-c224ff4989dc16d556bc11d8792134d675998572.zip
Merge pull request #3 from myfreeweb/master
Add FreeBSD support
-rw-r--r--README.md1
-rw-r--r--src/lib.rs7
-rwxr-xr-xsrc/os/freebsd.rs155
-rw-r--r--src/os/mod.rs2
4 files changed, 164 insertions, 1 deletions
diff --git a/README.md b/README.md
index 585659f..20c8f62 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/src/lib.rs b/src/lib.rs
index 3990014..513e4ff 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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;