serial_rs/posix/
ioctl.rs

1#[cfg(target_os = "macos")]
2use std::os::unix::prelude::RawFd;
3
4use nix::{ioctl_none_bad, libc, ioctl_read_bad, ioctl_write_ptr_bad, ioctl_read, ioctl_write_ptr, Result};
5
6
7ioctl_none_bad!(tiocexcl, libc::TIOCEXCL);
8ioctl_none_bad!(tiocnxcl, libc::TIOCNXCL);
9ioctl_read_bad!(tiocmget, libc::TIOCMGET, libc::c_int);
10ioctl_none_bad!(tiocsbrk, libc::TIOCSBRK);
11ioctl_none_bad!(tioccbrk, libc::TIOCCBRK);
12
13#[cfg(target_os = "linux")]
14ioctl_read_bad!(fionread, libc::FIONREAD, libc::c_int);
15
16#[cfg(target_os = "macos")]
17ioctl_read!(fionread, b'f', 127, libc::c_int);
18
19#[cfg(target_os = "linux")]
20ioctl_read_bad!(tiocoutq, libc::TIOCOUTQ, libc::c_int);
21
22#[cfg(target_os = "macos")]
23ioctl_read!(tiocoutq, b't', 115, libc::c_int);
24
25ioctl_read_bad!(tiocinq, libc::FIONREAD, libc::c_int);
26
27ioctl_write_ptr_bad!(tiocmbic, libc::TIOCMBIC, libc::c_int);
28ioctl_write_ptr_bad!(tiocmbis, libc::TIOCMBIS, libc::c_int);
29
30#[cfg(target_os = "linux")]
31ioctl_read!(tcgets2, b'T', 0x2A, libc::termios);
32
33#[cfg(target_os = "linux")]
34ioctl_write_ptr!(tcsets2, b'T', 0x2B, libc::termios2);
35
36#[cfg(target_os = "macos")]
37const IOSSIOSPEED: libc::c_ulong = 0x80045402;
38
39#[cfg(target_os = "macos")]
40ioctl_write_ptr_bad!(iossiospeedraw, IOSSIOSPEED, libc::speed_t);
41
42
43#[cfg(target_os = "macos")]
44pub fn iossiospeed(fd: RawFd, baud_rate: &libc::speed_t) -> Result<()> {
45    unsafe { iossiospeedraw(fd, baud_rate) }
46        .map(|_| ())
47        .map_err(|e| e.into())
48}