@@ -42,7 +42,7 @@ static API: Api = Api::new();
4242/// We store our VGA console here.
4343static VGA_CONSOLE : CsRefCell < Option < vgaconsole:: VgaConsole > > = CsRefCell :: new ( None ) ;
4444
45- /// We store our VGA console here.
45+ /// We store our serial console here.
4646static SERIAL_CONSOLE : CsRefCell < Option < SerialConsole > > = CsRefCell :: new ( None ) ;
4747
4848/// Note if we are panicking right now.
@@ -146,20 +146,16 @@ impl StdInput {
146146 }
147147 }
148148
149- // if let Some((uart_dev, _serial_conf)) = menu.context.config.get_serial_console() {
150- // while !self.buffer.is_full() {
151- // let mut buffer = [0u8];
152- // let wrapper = neotron_common_bios::FfiBuffer::new(&mut buffer);
153- // match (api.serial_read)(uart_dev, wrapper, neotron_common_bios::FfiOption::None) {
154- // neotron_common_bios::ApiResult::Ok(n) if n >= 0 => {
155- // self.buffer.enqueue(buffer[0]).unwrap();
156- // }
157- // _ => {
158- // break;
159- // }
160- // }
161- // }
162- // }
149+ if let Some ( console) = SERIAL_CONSOLE . lock ( ) . as_mut ( ) {
150+ while !self . buffer . is_full ( ) {
151+ let mut buffer = [ 0u8 ] ;
152+ if let Ok ( 1 ) = console. read_data ( & mut buffer) {
153+ self . buffer . enqueue ( buffer[ 0 ] ) . unwrap ( ) ;
154+ } else {
155+ break ;
156+ }
157+ }
158+ }
163159
164160 self . get_buffered_data ( buffer)
165161 }
@@ -259,7 +255,8 @@ impl Api {
259255struct SerialConsole ( u8 ) ;
260256
261257impl SerialConsole {
262- fn write_bstr ( & mut self , data : & [ u8 ] ) -> core:: fmt:: Result {
258+ /// Write some bytes to the serial console
259+ fn write_bstr ( & mut self , data : & [ u8 ] ) {
263260 let api = API . get ( ) ;
264261 let is_panic = IS_PANIC . load ( Ordering :: Relaxed ) ;
265262 let res = ( api. serial_write ) (
@@ -273,7 +270,14 @@ impl SerialConsole {
273270 if !is_panic {
274271 res. unwrap ( ) ;
275272 }
276- Ok ( ( ) )
273+ }
274+
275+ /// Try and get as many bytes as we can from the serial console.
276+ fn read_data ( & mut self , buffer : & mut [ u8 ] ) -> Result < usize , bios:: Error > {
277+ let api = API . get ( ) ;
278+ let ffi_buffer = bios:: FfiBuffer :: new ( buffer) ;
279+ let res = ( api. serial_read ) ( self . 0 , ffi_buffer, bios:: FfiOption :: Some ( bios:: Timeout :: new_ms ( 0 ) ) ) ;
280+ res. into ( )
277281 }
278282}
279283
0 commit comments