MCPcopy Create free account
hub / github.com/bendudson/EuraliOS / writer_handler

Function writer_handler

vga_driver/src/main.rs:513–560  ·  view source on GitHub ↗
(
    writer: Arc<RwLock<Writer<Text80x25>>>,
    comm_handle: CommHandle)

Source from the content-addressed store, hash-verified

511}
512
513fn writer_handler(
514 writer: Arc<RwLock<Writer<Text80x25>>>,
515 comm_handle: CommHandle) {
516
517 loop {
518 match syscalls::receive(&comm_handle) {
519 Ok(syscalls::Message::Long(
520 message::WRITE,
521 MessageData::Value(length),
522 MessageData::MemoryHandle(data_handle))) => {
523
524 let data = data_handle.as_slice::<u8>(length as usize);
525 writer.write().write_string(data);
526
527 // Done, send reply
528 syscalls::send(&comm_handle,
529 syscalls::Message::Short(
530 message::OK, 0, 0));
531 },
532 Ok(syscalls::Message::Short(
533 message::CHAR, ch, _)) => {
534
535 let s : [u8; 1] = [ch as u8];
536 writer.write().write_string(&s);
537 },
538 Ok(message) => {
539 // Unknown message => Return error
540 syscalls::send(&comm_handle,
541 syscalls::Message::Short(
542 message::ERROR_UNKNOWN_MESSAGE, 0, 0));
543 },
544 Err(syscalls::SYSCALL_ERROR_RECV_BLOCKING) => {
545 // Waiting for a message
546 // => Send an error message
547 syscalls::send(&STDIN,
548 Message::Short(
549 message::ERROR, 0, 0));
550 // Wait and try again
551 syscalls::thread_yield();
552 },
553 Err(code) => {
554 debug_println!("[vga] Receive error {}", code);
555 // Wait and try again
556 syscalls::thread_yield();
557 }
558 }
559 }
560}

Callers 1

mainFunction · 0.85

Calls 5

receiveFunction · 0.85
sendFunction · 0.85
thread_yieldFunction · 0.85
write_stringMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected