@@ -125,6 +125,83 @@ mod ffi {
125
125
pub c_ospeed : speed_t
126
126
}
127
127
128
+ #[ derive( Clone , Copy , Debug , PartialEq ) ]
129
+ pub enum BaudRate {
130
+ B0 ,
131
+ B50 ,
132
+ B75 ,
133
+ B110 ,
134
+ B134 ,
135
+ B150 ,
136
+ B200 ,
137
+ B300 ,
138
+ B600 ,
139
+ B1200 ,
140
+ B1800 ,
141
+ B2400 ,
142
+ B4800 ,
143
+ B9600 ,
144
+ B19200 ,
145
+ B38400 ,
146
+ B7200 ,
147
+ B14400 ,
148
+ B28800 ,
149
+ B57600 ,
150
+ B76800 ,
151
+ B115200 ,
152
+ B230400 ,
153
+ #[ cfg( any( target_os = "netbsd" , target_os = "freebsd" ) ) ]
154
+ B460800 ,
155
+ #[ cfg( any( target_os = "netbsd" , target_os = "freebsd" ) ) ]
156
+ B921600 ,
157
+ }
158
+
159
+ impl From < speed_t > for BaudRate {
160
+ fn from ( s : speed_t ) -> BaudRate {
161
+
162
+ use libc:: {
163
+ B0 , B50 , B75 , B110 , B134 , B150 ,
164
+ B200 , B300 , B600 , B1200 , B1800 , B2400 ,
165
+ B4800 , B9600 , B19200 , B38400 ,
166
+ B7200 , B14400 , B28800 , B57600 ,
167
+ B76800 , B115200 , B230400 } ;
168
+
169
+ #[ cfg( any( target_os = "netbsd" , target_os = "freebsd" ) ) ]
170
+ use libc:: { B460800 , B921600 } ;
171
+
172
+ match s {
173
+ B0 => BaudRate :: B0 ,
174
+ B50 => BaudRate :: B50 ,
175
+ B75 => BaudRate :: B75 ,
176
+ B110 => BaudRate :: B110 ,
177
+ B134 => BaudRate :: B134 ,
178
+ B150 => BaudRate :: B150 ,
179
+ B200 => BaudRate :: B200 ,
180
+ B300 => BaudRate :: B300 ,
181
+ B600 => BaudRate :: B600 ,
182
+ B1200 => BaudRate :: B1200 ,
183
+ B1800 => BaudRate :: B1800 ,
184
+ B2400 => BaudRate :: B2400 ,
185
+ B4800 => BaudRate :: B4800 ,
186
+ B9600 => BaudRate :: B9600 ,
187
+ B19200 => BaudRate :: B19200 ,
188
+ B38400 => BaudRate :: B38400 ,
189
+ B7200 => BaudRate :: B7200 ,
190
+ B14400 => BaudRate :: B14400 ,
191
+ B28800 => BaudRate :: B28800 ,
192
+ B57600 => BaudRate :: B57600 ,
193
+ B76800 => BaudRate :: B76800 ,
194
+ B115200 => BaudRate :: B115200 ,
195
+ B230400 => BaudRate :: B230400 ,
196
+ #[ cfg( any( target_os = "netbsd" , target_os = "freebsd" ) ) ]
197
+ B460800 => BaudRate :: B460800 ,
198
+ #[ cfg( any( target_os = "netbsd" , target_os = "freebsd" ) ) ]
199
+ B921600 => BaudRate :: B921600 ,
200
+ b @ _ => unreachable ! ( "Invalid baud constant: {}" , b) ,
201
+ }
202
+ }
203
+ }
204
+
128
205
pub const VEOF : usize = 0 ;
129
206
pub const VEOL : usize = 1 ;
130
207
pub const VEOL2 : usize = 2 ;
@@ -293,6 +370,90 @@ mod ffi {
293
370
pub c_ospeed : speed_t
294
371
}
295
372
373
+ #[ derive( Clone , Copy , Debug , PartialEq ) ]
374
+ pub enum BaudRate {
375
+ B0 ,
376
+ B50 ,
377
+ B75 ,
378
+ B110 ,
379
+ B134 ,
380
+ B150 ,
381
+ B200 ,
382
+ B300 ,
383
+ B600 ,
384
+ B1200 ,
385
+ B1800 ,
386
+ B2400 ,
387
+ B4800 ,
388
+ B9600 ,
389
+ B19200 ,
390
+ B38400 ,
391
+ B57600 ,
392
+ B115200 ,
393
+ B230400 ,
394
+ B460800 ,
395
+ B500000 ,
396
+ B576000 ,
397
+ B921600 ,
398
+ B1000000 ,
399
+ B1152000 ,
400
+ B1500000 ,
401
+ B2000000 ,
402
+ B2500000 ,
403
+ B3000000 ,
404
+ B3500000 ,
405
+ B4000000 ,
406
+ }
407
+
408
+ impl From < speed_t > for BaudRate {
409
+ fn from ( s : speed_t ) -> BaudRate {
410
+
411
+ use libc:: {
412
+ B0 , B50 , B75 , B110 , B134 , B150 ,
413
+ B200 , B300 , B600 , B1200 , B1800 , B2400 ,
414
+ B4800 , B9600 , B19200 , B38400 , B57600 ,
415
+ B115200 , B230400 , B460800 , B500000 ,
416
+ B576000 , B921600 , B1000000 , B1152000 ,
417
+ B1500000 , B2000000 , B2500000 , B3000000 ,
418
+ B3500000 , B4000000 } ;
419
+
420
+ match s {
421
+ B0 => BaudRate :: B0 ,
422
+ B50 => BaudRate :: B50 ,
423
+ B75 => BaudRate :: B75 ,
424
+ B110 => BaudRate :: B110 ,
425
+ B134 => BaudRate :: B134 ,
426
+ B150 => BaudRate :: B150 ,
427
+ B200 => BaudRate :: B200 ,
428
+ B300 => BaudRate :: B300 ,
429
+ B600 => BaudRate :: B600 ,
430
+ B1200 => BaudRate :: B1200 ,
431
+ B1800 => BaudRate :: B1800 ,
432
+ B2400 => BaudRate :: B2400 ,
433
+ B4800 => BaudRate :: B4800 ,
434
+ B9600 => BaudRate :: B9600 ,
435
+ B19200 => BaudRate :: B19200 ,
436
+ B38400 => BaudRate :: B38400 ,
437
+ B57600 => BaudRate :: B57600 ,
438
+ B115200 => BaudRate :: B115200 ,
439
+ B230400 => BaudRate :: B230400 ,
440
+ B460800 => BaudRate :: B460800 ,
441
+ B500000 => BaudRate :: B500000 ,
442
+ B576000 => BaudRate :: B576000 ,
443
+ B921600 => BaudRate :: B921600 ,
444
+ B1000000 => BaudRate :: B1000000 ,
445
+ B1152000 => BaudRate :: B1152000 ,
446
+ B1500000 => BaudRate :: B1500000 ,
447
+ B2000000 => BaudRate :: B2000000 ,
448
+ B2500000 => BaudRate :: B2500000 ,
449
+ B3000000 => BaudRate :: B3000000 ,
450
+ B3500000 => BaudRate :: B3500000 ,
451
+ B4000000 => BaudRate :: B4000000 ,
452
+ b @ _ => unreachable ! ( "Invalid baud constant: {}" , b) ,
453
+ }
454
+ }
455
+ }
456
+
296
457
pub const VEOF : usize = 4 ;
297
458
pub const VEOL : usize = 11 ;
298
459
pub const VEOL2 : usize = 16 ;
@@ -426,27 +587,27 @@ mod ffi {
426
587
}
427
588
}
428
589
429
- pub fn cfgetispeed ( termios : & Termios ) -> speed_t {
590
+ pub fn cfgetispeed ( termios : & Termios ) -> BaudRate {
430
591
unsafe {
431
- ffi:: cfgetispeed ( termios)
592
+ ffi:: cfgetispeed ( termios) . into ( )
432
593
}
433
594
}
434
595
435
- pub fn cfgetospeed ( termios : & Termios ) -> speed_t {
596
+ pub fn cfgetospeed ( termios : & Termios ) -> BaudRate {
436
597
unsafe {
437
- ffi:: cfgetospeed ( termios)
598
+ ffi:: cfgetospeed ( termios) . into ( )
438
599
}
439
600
}
440
601
441
- pub fn cfsetispeed ( termios : & mut Termios , speed : speed_t ) -> Result < ( ) > {
602
+ pub fn cfsetispeed ( termios : & mut Termios , baud : BaudRate ) -> Result < ( ) > {
442
603
Errno :: result ( unsafe {
443
- ffi:: cfsetispeed ( termios, speed )
604
+ ffi:: cfsetispeed ( termios, baud as speed_t )
444
605
} ) . map ( drop)
445
606
}
446
607
447
- pub fn cfsetospeed ( termios : & mut Termios , speed : speed_t ) -> Result < ( ) > {
608
+ pub fn cfsetospeed ( termios : & mut Termios , baud : BaudRate ) -> Result < ( ) > {
448
609
Errno :: result ( unsafe {
449
- ffi:: cfsetospeed ( termios, speed )
610
+ ffi:: cfsetospeed ( termios, baud as speed_t )
450
611
} ) . map ( drop)
451
612
}
452
613
0 commit comments