3 // Copyright 2023 VIRTUAL OPEN SYSTEMS SAS. All Rights Reserved.
4 // Timos Ampelikiotis <t.ampelikiotis@virtualopensystems.com>
6 // SPDX-License-Identifier: Apache-2.0 or BSD-3-Clause
8 use log::{warn, error};
9 use std::sync::{Arc, RwLock};
11 use thiserror::Error as ThisError;
12 use vm_memory::{ByteValued, Le16};
14 use crate::vhu_console::{VirtioConsoleConfig, VirtioConsoleControl};
16 type Result<T> = std::result::Result<T, Error>;
18 #[derive(Copy, Clone, Debug, PartialEq, ThisError)]
19 pub(crate) enum Error {
20 #[error("Console not enabled yet")]
25 pub(crate) struct ConsoleController {
26 config: VirtioConsoleConfig,
27 pub console_name: String,
30 impl ConsoleController {
31 // Creates a new controller corresponding to `device`.
32 pub(crate) fn new(console_name: String) -> Result<ConsoleController> {
34 let console_name = console_name.to_owned();
35 println!("console_name: {:?}", console_name);
37 Ok(ConsoleController {
38 config: VirtioConsoleConfig {
41 max_nr_ports: 1.into(),
48 pub(crate) fn config(&self) -> &VirtioConsoleConfig {
49 log::trace!("Get config\n");
53 pub(crate) fn operation(&self, tx_request: VirtioConsoleControl) -> Result<()> {
54 log::trace!("Console operation\n");
64 fn test_new_console_controller() {
65 let console_name = String::from("test_console");
66 let controller = ConsoleController::new(console_name.clone());
68 assert!(controller.is_ok());
70 let controller = controller.unwrap();
71 assert_eq!(controller.console_name, "test_console");
75 fn test_console_controller_config() {
76 let console_name = String::from("test_console");
77 let controller = ConsoleController::new(console_name).unwrap();
79 let config = controller.config();
80 assert_eq!(config.cols, 20);
81 assert_eq!(config.rows, 20);
82 assert_eq!(config.max_nr_ports, 1);
83 assert_eq!(config.emerg_wr, 64);