]> gitweb.factorcode.org Git - factor.git/blob - extra/io/serial/linux/ffi/ffi.factor
Switch to https urls
[factor.git] / extra / io / serial / linux / ffi / ffi.factor
1 ! Copyright (C) 2008 Doug Coleman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.syntax assocs classes.struct
4 io.serial kernel system ;
5 IN: io.serial.linux.ffi
6
7 CONSTANT: NCCS 32
8
9 TYPEDEF: uchar cc_t
10 TYPEDEF: uint speed_t
11 TYPEDEF: uint tcflag_t
12
13 STRUCT: termios
14     { iflag tcflag_t }
15     { oflag tcflag_t }
16     { cflag tcflag_t }
17     { lflag tcflag_t }
18     { line cc_t }
19     { cc { cc_t NCCS } }
20     { ispeed speed_t }
21     { ospeed speed_t } ;
22
23 FUNCTION: speed_t cfgetispeed ( termios* t )
24 FUNCTION: speed_t cfgetospeed ( termios* t )
25 FUNCTION: int cfsetispeed ( termios* t, speed_t s )
26 FUNCTION: int cfsetospeed ( termios* t, speed_t s )
27 FUNCTION: int tcgetattr ( int i1, termios* t )
28 FUNCTION: int tcsetattr ( int i1, int i2, termios* t )
29 FUNCTION: int tcdrain ( int i1 )
30 FUNCTION: int tcflow ( int i1, int i2 )
31 FUNCTION: int tcflush ( int i1, int i2 )
32 FUNCTION: int tcsendbreak ( int i1, int i2 )
33 FUNCTION: void cfmakeraw ( termios* t )
34 FUNCTION: int cfsetspeed ( termios* t, speed_t s )
35
36 ! See /usr/include/bits/termios.h
37 CONSTANT: TCSANOW     0
38 CONSTANT: TCSADRAIN   1
39 CONSTANT: TCSAFLUSH   2
40
41 CONSTANT: TCIFLUSH    0
42 CONSTANT: TCOFLUSH    1
43 CONSTANT: TCIOFLUSH   2
44
45 CONSTANT: TCOOFF      0
46 CONSTANT: TCOON       1
47 CONSTANT: TCIOFF      2
48 CONSTANT: TCION       3
49
50 ! iflag
51 CONSTANT: IGNBRK  0o0000001
52 CONSTANT: BRKINT  0o0000002
53 CONSTANT: IGNPAR  0o0000004
54 CONSTANT: PARMRK  0o0000010
55 CONSTANT: INPCK   0o0000020
56 CONSTANT: ISTRIP  0o0000040
57 CONSTANT: INLCR   0o0000100
58 CONSTANT: IGNCR   0o0000200
59 CONSTANT: ICRNL   0o0000400
60 CONSTANT: IUCLC   0o0001000
61 CONSTANT: IXON    0o0002000
62 CONSTANT: IXANY   0o0004000
63 CONSTANT: IXOFF   0o0010000
64 CONSTANT: IMAXBEL 0o0020000
65 CONSTANT: IUTF8   0o0040000
66
67 ! oflag
68 CONSTANT: OPOST   0o0000001
69 CONSTANT: OLCUC   0o0000002
70 CONSTANT: ONLCR   0o0000004
71 CONSTANT: OCRNL   0o0000010
72 CONSTANT: ONOCR   0o0000020
73 CONSTANT: ONLRET  0o0000040
74 CONSTANT: OFILL   0o0000100
75 CONSTANT: OFDEL   0o0000200
76 CONSTANT: NLDLY  0o0000400
77 CONSTANT:   NL0  0o0000000
78 CONSTANT:   NL1  0o0000400
79 CONSTANT: CRDLY  0o0003000
80 CONSTANT:   CR0  0o0000000
81 CONSTANT:   CR1  0o0001000
82 CONSTANT:   CR2  0o0002000
83 CONSTANT:   CR3  0o0003000
84 CONSTANT: TABDLY 0o0014000
85 CONSTANT:   TAB0 0o0000000
86 CONSTANT:   TAB1 0o0004000
87 CONSTANT:   TAB2 0o0010000
88 CONSTANT:   TAB3 0o0014000
89 CONSTANT: BSDLY  0o0020000
90 CONSTANT:   BS0  0o0000000
91 CONSTANT:   BS1  0o0020000
92 CONSTANT: FFDLY  0o0100000
93 CONSTANT:   FF0  0o0000000
94 CONSTANT:   FF1  0o0100000
95
96 ! cflags
97 CONSTANT: CSIZE   0o0000060
98 CONSTANT:   CS5   0o0000000
99 CONSTANT:   CS6   0o0000020
100 CONSTANT:   CS7   0o0000040
101 CONSTANT:   CS8   0o0000060
102 CONSTANT: CSTOPB  0o0000100
103 CONSTANT: CREAD   0o0000200
104 CONSTANT: PARENB  0o0000400
105 CONSTANT: PARODD  0o0001000
106 CONSTANT: HUPCL   0o0002000
107 CONSTANT: CLOCAL  0o0004000
108 CONSTANT: CIBAUD  0o002003600000
109 CONSTANT: CRTSCTS 0o020000000000
110
111 ! lflags
112 CONSTANT: ISIG    0o0000001
113 CONSTANT: ICANON  0o0000002
114 CONSTANT: XCASE   0o0000004
115 CONSTANT: ECHO    0o0000010
116 CONSTANT: ECHOE   0o0000020
117 CONSTANT: ECHOK   0o0000040
118 CONSTANT: ECHONL  0o0000100
119 CONSTANT: NOFLSH  0o0000200
120 CONSTANT: TOSTOP  0o0000400
121 CONSTANT: ECHOCTL 0o0001000
122 CONSTANT: ECHOPRT 0o0002000
123 CONSTANT: ECHOKE  0o0004000
124 CONSTANT: FLUSHO  0o0010000
125 CONSTANT: PENDIN  0o0040000
126 CONSTANT: IEXTEN  0o0100000
127
128 ! c_cc characters
129 CONSTANT: VINTR 0
130 CONSTANT: VQUIT 1
131 CONSTANT: VERASE 2
132 CONSTANT: VKILL 3
133 CONSTANT: VEOF 4
134 CONSTANT: VTIME 5
135 CONSTANT: VMIN 6
136 CONSTANT: VSWTC 7
137 CONSTANT: VSTART 8
138 CONSTANT: VSTOP 9
139 CONSTANT: VSUSP 10
140 CONSTANT: VEOL 11
141 CONSTANT: VREPRINT 12
142 CONSTANT: VDISCARD 13
143 CONSTANT: VWERASE 14
144 CONSTANT: VLNEXT 15
145 CONSTANT: VEOL2 16
146
147 M: linux lookup-baud ( n -- n )
148     H{
149         { 0       0o0000000 }
150         { 50      0o0000001 }
151         { 75      0o0000002 }
152         { 110     0o0000003 }
153         { 134     0o0000004 }
154         { 150     0o0000005 }
155         { 200     0o0000006 }
156         { 300     0o0000007 }
157         { 600     0o0000010 }
158         { 1200    0o0000011 }
159         { 1800    0o0000012 }
160         { 2400    0o0000013 }
161         { 4800    0o0000014 }
162         { 9600    0o0000015 }
163         { 19200   0o0000016 }
164         { 38400   0o0000017 }
165         { 57600   0o0010001 }
166         { 115200  0o0010002 }
167         { 230400  0o0010003 }
168         { 460800  0o0010004 }
169         { 500000  0o0010005 }
170         { 576000  0o0010006 }
171         { 921600  0o0010007 }
172         { 1000000 0o0010010 }
173         { 1152000 0o0010011 }
174         { 1500000 0o0010012 }
175         { 2000000 0o0010013 }
176         { 2500000 0o0010014 }
177         { 3000000 0o0010015 }
178         { 3500000 0o0010016 }
179         { 4000000 0o0010017 }
180     } ?at [ invalid-baud ] unless ;