]> gitweb.factorcode.org Git - factor.git/blob - extra/io/serial/linux/ffi/ffi.factor
bcd0b02be91f3ab394b2b864aa261105899af6d8
[factor.git] / extra / io / serial / linux / ffi / ffi.factor
1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://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 CONSTANT: TCSANOW     0
37 CONSTANT: TCSADRAIN   1
38 CONSTANT: TCSAFLUSH   2
39
40 CONSTANT: TCIFLUSH    0
41 CONSTANT: TCOFLUSH    1
42 CONSTANT: TCIOFLUSH   2
43
44 CONSTANT: TCOOFF      0
45 CONSTANT: TCOON       1
46 CONSTANT: TCIOFF      2
47 CONSTANT: TCION       3
48
49 ! iflag
50 CONSTANT: IGNBRK  OCT: 0000001
51 CONSTANT: BRKINT  OCT: 0000002
52 CONSTANT: IGNPAR  OCT: 0000004
53 CONSTANT: PARMRK  OCT: 0000010
54 CONSTANT: INPCK   OCT: 0000020
55 CONSTANT: ISTRIP  OCT: 0000040
56 CONSTANT: INLCR   OCT: 0000100
57 CONSTANT: IGNCR   OCT: 0000200
58 CONSTANT: ICRNL   OCT: 0000400
59 CONSTANT: IUCLC   OCT: 0001000
60 CONSTANT: IXON    OCT: 0002000
61 CONSTANT: IXANY   OCT: 0004000
62 CONSTANT: IXOFF   OCT: 0010000
63 CONSTANT: IMAXBEL OCT: 0020000
64 CONSTANT: IUTF8   OCT: 0040000
65
66 ! oflag
67 CONSTANT: OPOST   OCT: 0000001
68 CONSTANT: OLCUC   OCT: 0000002
69 CONSTANT: ONLCR   OCT: 0000004
70 CONSTANT: OCRNL   OCT: 0000010
71 CONSTANT: ONOCR   OCT: 0000020
72 CONSTANT: ONLRET  OCT: 0000040
73 CONSTANT: OFILL   OCT: 0000100
74 CONSTANT: OFDEL   OCT: 0000200
75 CONSTANT: NLDLY  OCT: 0000400
76 CONSTANT:   NL0  OCT: 0000000
77 CONSTANT:   NL1  OCT: 0000400
78 CONSTANT: CRDLY  OCT: 0003000
79 CONSTANT:   CR0  OCT: 0000000
80 CONSTANT:   CR1  OCT: 0001000
81 CONSTANT:   CR2  OCT: 0002000
82 CONSTANT:   CR3  OCT: 0003000
83 CONSTANT: TABDLY OCT: 0014000
84 CONSTANT:   TAB0 OCT: 0000000
85 CONSTANT:   TAB1 OCT: 0004000
86 CONSTANT:   TAB2 OCT: 0010000
87 CONSTANT:   TAB3 OCT: 0014000
88 CONSTANT: BSDLY  OCT: 0020000
89 CONSTANT:   BS0  OCT: 0000000
90 CONSTANT:   BS1  OCT: 0020000
91 CONSTANT: FFDLY  OCT: 0100000
92 CONSTANT:   FF0  OCT: 0000000
93 CONSTANT:   FF1  OCT: 0100000
94
95 ! cflags
96 CONSTANT: CSIZE   OCT: 0000060
97 CONSTANT:   CS5   OCT: 0000000
98 CONSTANT:   CS6   OCT: 0000020
99 CONSTANT:   CS7   OCT: 0000040
100 CONSTANT:   CS8   OCT: 0000060
101 CONSTANT: CSTOPB  OCT: 0000100
102 CONSTANT: CREAD   OCT: 0000200
103 CONSTANT: PARENB  OCT: 0000400
104 CONSTANT: PARODD  OCT: 0001000
105 CONSTANT: HUPCL   OCT: 0002000
106 CONSTANT: CLOCAL  OCT: 0004000
107 CONSTANT: CIBAUD  OCT: 002003600000
108 CONSTANT: CRTSCTS OCT: 020000000000
109
110 ! lflags
111 CONSTANT: ISIG    OCT: 0000001
112 CONSTANT: ICANON  OCT: 0000002
113 CONSTANT: XCASE  OCT: 0000004
114 CONSTANT: ECHO    OCT: 0000010
115 CONSTANT: ECHOE   OCT: 0000020
116 CONSTANT: ECHOK   OCT: 0000040
117 CONSTANT: ECHONL  OCT: 0000100
118 CONSTANT: NOFLSH  OCT: 0000200
119 CONSTANT: TOSTOP  OCT: 0000400
120 CONSTANT: ECHOCTL OCT: 0001000
121 CONSTANT: ECHOPRT OCT: 0002000
122 CONSTANT: ECHOKE  OCT: 0004000
123 CONSTANT: FLUSHO  OCT: 0010000
124 CONSTANT: PENDIN  OCT: 0040000
125 CONSTANT: IEXTEN  OCT: 0100000
126
127 M: linux lookup-baud ( n -- n )
128     H{
129         { 0       OCT: 0000000 }
130         { 50      OCT: 0000001 }
131         { 75      OCT: 0000002 }
132         { 110     OCT: 0000003 }
133         { 134     OCT: 0000004 }
134         { 150     OCT: 0000005 }
135         { 200     OCT: 0000006 }
136         { 300     OCT: 0000007 }
137         { 600     OCT: 0000010 }
138         { 1200    OCT: 0000011 }
139         { 1800    OCT: 0000012 }
140         { 2400    OCT: 0000013 }
141         { 4800    OCT: 0000014 }
142         { 9600    OCT: 0000015 }
143         { 19200   OCT: 0000016 }
144         { 38400   OCT: 0000017 }
145         { 57600   OCT: 0010001 }
146         { 115200  OCT: 0010002 }
147         { 230400  OCT: 0010003 }
148         { 460800  OCT: 0010004 }
149         { 500000  OCT: 0010005 }
150         { 576000  OCT: 0010006 }
151         { 921600  OCT: 0010007 }
152         { 1000000 OCT: 0010010 }
153         { 1152000 OCT: 0010011 }
154         { 1500000 OCT: 0010012 }
155         { 2000000 OCT: 0010013 }
156         { 2500000 OCT: 0010014 }
157         { 3000000 OCT: 0010015 }
158         { 3500000 OCT: 0010016 }
159         { 4000000 OCT: 0010017 }
160     } ?at [ invalid-baud ] unless ;
161