mod.rs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //! termios implementation, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/termios.h.html
  2. use header::errno;
  3. use platform;
  4. use platform::types::*;
  5. use platform::{Pal, Sys};
  6. pub type cc_t = u8;
  7. pub type speed_t = u32;
  8. pub type tcflag_t = u32;
  9. pub const NCCS: usize = 32;
  10. #[repr(C)]
  11. pub struct termios {
  12. c_iflag: tcflag_t,
  13. c_oflag: tcflag_t,
  14. c_cflag: tcflag_t,
  15. c_lflag: tcflag_t,
  16. c_line: cc_t,
  17. c_cc: [cc_t; NCCS],
  18. __c_ispeed: speed_t,
  19. __c_ospeed: speed_t,
  20. }
  21. #[no_mangle]
  22. pub extern "C" fn tcgetattr(fd: c_int, out: *mut termios) -> c_int {
  23. Sys::tcgetattr(fd, out)
  24. }
  25. #[no_mangle]
  26. pub extern "C" fn tcsetattr(fd: c_int, act: c_int, value: *mut termios) -> c_int {
  27. Sys::tcsetattr(fd, act, value)
  28. }
  29. #[no_mangle]
  30. pub unsafe extern "C" fn cfgetispeed(termios_p: *const termios) -> speed_t {
  31. (*termios_p).__c_ispeed
  32. }
  33. #[no_mangle]
  34. pub unsafe extern "C" fn cfgetospeed(termios_p: *const termios) -> speed_t {
  35. (*termios_p).__c_ospeed
  36. }
  37. #[no_mangle]
  38. pub unsafe extern "C" fn cfsetispeed(termios_p: *mut termios, speed: speed_t) -> c_int {
  39. match speed as usize {
  40. B0..=B38400 | B57600..=B4000000 => {
  41. (*termios_p).__c_ispeed = speed;
  42. 0
  43. }
  44. _ => {
  45. platform::errno = errno::EINVAL;
  46. -1
  47. }
  48. }
  49. }
  50. #[no_mangle]
  51. pub unsafe extern "C" fn cfsetospeed(termios_p: *mut termios, speed: speed_t) -> c_int {
  52. match speed as usize {
  53. B0..=B38400 | B57600..=B4000000 => {
  54. (*termios_p).__c_ospeed = speed;
  55. 0
  56. }
  57. _ => {
  58. platform::errno = errno::EINVAL;
  59. -1
  60. }
  61. }
  62. }
  63. pub const VINTR: usize = 0;
  64. pub const VQUIT: usize = 1;
  65. pub const VERASE: usize = 2;
  66. pub const VKILL: usize = 3;
  67. pub const VEOF: usize = 4;
  68. pub const VTIME: usize = 5;
  69. pub const VMIN: usize = 6;
  70. pub const VSWTC: usize = 7;
  71. pub const VSTART: usize = 8;
  72. pub const VSTOP: usize = 9;
  73. pub const VSUSP: usize = 10;
  74. pub const VEOL: usize = 11;
  75. pub const VREPRINT: usize = 12;
  76. pub const VDISCARD: usize = 13;
  77. pub const VWERASE: usize = 14;
  78. pub const VLNEXT: usize = 15;
  79. pub const VEOL2: usize = 16;
  80. pub const IGNBRK: usize = 0o000_001;
  81. pub const BRKINT: usize = 0o000_002;
  82. pub const IGNPAR: usize = 0o000_004;
  83. pub const PARMRK: usize = 0o000_010;
  84. pub const INPCK: usize = 0o000_020;
  85. pub const ISTRIP: usize = 0o000_040;
  86. pub const INLCR: usize = 0o000_100;
  87. pub const IGNCR: usize = 0o000_200;
  88. pub const ICRNL: usize = 0o000_400;
  89. pub const IUCLC: usize = 0o001_000;
  90. pub const IXON: usize = 0o002_000;
  91. pub const IXANY: usize = 0o004_000;
  92. pub const IXOFF: usize = 0o010_000;
  93. pub const IMAXBEL: usize = 0o020_000;
  94. pub const IUTF8: usize = 0o040_000;
  95. pub const OPOST: usize = 0o000_001;
  96. pub const OLCUC: usize = 0o000_002;
  97. pub const ONLCR: usize = 0o000_004;
  98. pub const OCRNL: usize = 0o000_010;
  99. pub const ONOCR: usize = 0o000_020;
  100. pub const ONLRET: usize = 0o00_0040;
  101. pub const OFILL: usize = 0o000_100;
  102. pub const OFDEL: usize = 0o000_200;
  103. pub const VTDLY: usize = 0o040_000;
  104. pub const VT0: usize = 0o000_000;
  105. pub const VT1: usize = 0o040_000;
  106. pub const B0: usize = 0o000_000;
  107. pub const B50: usize = 0o000_001;
  108. pub const B75: usize = 0o000_002;
  109. pub const B110: usize = 0o000_003;
  110. pub const B134: usize = 0o000_004;
  111. pub const B150: usize = 0o000_005;
  112. pub const B200: usize = 0o000_006;
  113. pub const B300: usize = 0o000_007;
  114. pub const B600: usize = 0o000_010;
  115. pub const B1200: usize = 0o000_011;
  116. pub const B1800: usize = 0o000_012;
  117. pub const B2400: usize = 0o000_013;
  118. pub const B4800: usize = 0o000_014;
  119. pub const B9600: usize = 0o000_015;
  120. pub const B19200: usize = 0o000_016;
  121. pub const B38400: usize = 0o000_017;
  122. pub const B57600: usize = 0o010_001;
  123. pub const B115200: usize = 0o010_002;
  124. pub const B230400: usize = 0o010_003;
  125. pub const B460800: usize = 0o010_004;
  126. pub const B500000: usize = 0o010_005;
  127. pub const B576000: usize = 0o010_006;
  128. pub const B921600: usize = 0o010_007;
  129. pub const B1000000: usize = 0o010_010;
  130. pub const B1152000: usize = 0o010_011;
  131. pub const B1500000: usize = 0o010_012;
  132. pub const B2000000: usize = 0o010_013;
  133. pub const B2500000: usize = 0o010_014;
  134. pub const B3000000: usize = 0o010_015;
  135. pub const B3500000: usize = 0o010_016;
  136. pub const B4000000: usize = 0o010_017;
  137. pub const CSIZE: usize = 0o000_060;
  138. pub const CS5: usize = 0o000_000;
  139. pub const CS6: usize = 0o000_020;
  140. pub const CS7: usize = 0o000_040;
  141. pub const CS8: usize = 0o000_060;
  142. pub const CSTOPB: usize = 0o000_100;
  143. pub const CREAD: usize = 0o000_200;
  144. pub const PARENB: usize = 0o000_400;
  145. pub const PARODD: usize = 0o001_000;
  146. pub const HUPCL: usize = 0o002_000;
  147. pub const CLOCAL: usize = 0o004_000;
  148. pub const ISIG: usize = 0o000_001;
  149. pub const ICANON: usize = 0o000_002;
  150. pub const ECHO: usize = 0o000_010;
  151. pub const ECHOE: usize = 0o000_020;
  152. pub const ECHOK: usize = 0o000_040;
  153. pub const ECHONL: usize = 0o000_100;
  154. pub const NOFLSH: usize = 0o000_200;
  155. pub const TOSTOP: usize = 0o000_400;
  156. pub const IEXTEN: usize = 0o100_000;
  157. pub const TCOOFF: usize = 0;
  158. pub const TCOON: usize = 1;
  159. pub const TCIOFF: usize = 2;
  160. pub const TCION: usize = 3;
  161. pub const TCIFLUSH: usize = 0;
  162. pub const TCOFLUSH: usize = 1;
  163. pub const TCIOFLUSH: usize = 2;
  164. pub const TCSANOW: usize = 0;
  165. pub const TCSADRAIN: usize = 1;
  166. pub const TCSAFLUSH: usize = 2;