diff --git a/kernel/src/fs/stdio.rs b/kernel/src/fs/stdio.rs index 57e242c..db70ec8 100644 --- a/kernel/src/fs/stdio.rs +++ b/kernel/src/fs/stdio.rs @@ -35,7 +35,8 @@ impl Stdin { match buf_lock.pop_front() { Some(c) => return c, None => { - self.pushed.wait(buf_lock); + //self.pushed.wait(buf_lock); + return 0 as char; } } } diff --git a/kernel/src/fs/vga.rs b/kernel/src/fs/vga.rs index 2e4fa80..bea4ae6 100755 --- a/kernel/src/fs/vga.rs +++ b/kernel/src/fs/vga.rs @@ -31,20 +31,25 @@ impl INode for Vga { } fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result { info!("the _offset is {} {}", _offset, _buf[0]); - let mut result : usize = 0; - if let Some(fb) = FRAME_BUFFER.lock().as_mut() { - for x in 0..1024 { // TODO, should not use CONSTS - for y in 0..768 { - let blue = _buf[3 * (x * 768 + y)]; - let green = _buf[3 * (x * 768 + y) + 1]; - let red = _buf[3 * (x * 768 + y) + 2]; - let pixel : u32 = ((blue as u32) << 16) | ((green as u32) << 8) | (red as u32); - fb.write(x as u32, y as u32, pixel); - result += 3; - } - } - } - return Ok(result); + //let mut result : usize = 0; + //if let Some(fb) = FRAME_BUFFER.lock().as_mut() { + //for x in 0..1024 { // TODO, should not use CONSTS + //for y in 0..768 { + //let blue = _buf[3 * (x * 768 + y)]; + //let green = _buf[3 * (x * 768 + y) + 1]; + //let red = _buf[3 * (x * 768 + y) + 2]; + //let pixel : u32 = ((blue as u32) << 16) | ((green as u32) << 8) | (red as u32); + //fb.write(x as u32, y as u32, pixel); + //result += 3; + //} + //} + //} + use crate::consts::KERNEL_OFFSET; + use core::slice; + let frame_buffer_data = + unsafe { slice::from_raw_parts_mut((KERNEL_OFFSET + 0xf000_0000) as *mut u8, ( 1024 * 768 * 3) as usize) }; + frame_buffer_data.copy_from_slice(&_buf); + return Ok(1024 * 768 * 3); } fn poll(&self) -> Result { Ok(PollStatus { // TOKNOW and TODO