File tree Expand file tree Collapse file tree 1 file changed +13
-6
lines changed Expand file tree Collapse file tree 1 file changed +13
-6
lines changed Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ use crate::device::Device;
4
4
pub trait UartSyscalls {
5
5
fn uart_poll_out ( device : & Device , out_char : char ) ;
6
6
7
- fn uart_poll_in ( device : & Device , in_char : & mut char ) -> i32 ;
7
+ fn uart_poll_in ( device : & Device ) -> Result < Option < char > , u32 > ;
8
8
9
9
fn uart_err_check ( device : & Device ) -> i32 ;
10
10
@@ -27,16 +27,23 @@ macro_rules! trait_impl {
27
27
}
28
28
29
29
#[ inline( always) ]
30
- fn uart_poll_in( device: & Device , in_char : & mut char ) -> i32 {
30
+ fn uart_poll_in( device: & Device ) -> Result < Option < char > , u32 > {
31
31
let mut munge: u8 = 0 ;
32
- let rc: i32 = unsafe {
32
+ let rc = unsafe {
33
33
zephyr_sys:: syscalls:: $context:: uart_poll_in(
34
34
device as * const _ as * mut _,
35
35
& mut munge,
36
36
)
37
- } ;
38
- * in_char = munge as char ;
39
- rc
37
+ }
38
+ . neg_err( )
39
+ . map( |_| munge as char ) ;
40
+
41
+ // remap a return value of -1 from uart_poll_in() to Ok(None)
42
+ match rc {
43
+ Ok ( c) => Ok ( Some ( c) ) ,
44
+ Err ( 1 ) => Ok ( None ) ,
45
+ Err ( e) => Err ( e) ,
46
+ }
40
47
}
41
48
42
49
#[ inline( always) ]
You can’t perform that action at this time.
0 commit comments