Vhost-user-console device and can license fixes
[AGL/meta-agl-devel.git] / meta-egvirt / recipes-extended / vhost-device-console / vhost-device-console-0.1.0 / src / console.rs
1 // CAN backend device
2 //
3 // Copyright 2023 VIRTUAL OPEN SYSTEMS SAS. All Rights Reserved.
4 //          Timos Ampelikiotis <t.ampelikiotis@virtualopensystems.com>
5 //
6 // SPDX-License-Identifier: Apache-2.0 or BSD-3-Clause
7
8 use log::{warn, error};
9 use std::sync::{Arc, RwLock};
10
11 use thiserror::Error as ThisError;
12 use vm_memory::{ByteValued, Le16};
13
14 use crate::vhu_console::{VirtioConsoleConfig, VirtioConsoleControl};
15
16 type Result<T> = std::result::Result<T, Error>;
17
18 #[derive(Copy, Clone, Debug, PartialEq, ThisError)]
19 pub(crate) enum Error {
20     #[error("Console not enabled yet")]
21     ConsoleNotEnabled,
22 }
23
24 #[derive(Debug)]
25 pub(crate) struct ConsoleController {
26     config: VirtioConsoleConfig,
27     pub console_name: String,
28 }
29
30 impl ConsoleController {
31     // Creates a new controller corresponding to `device`.
32     pub(crate) fn new(console_name: String) -> Result<ConsoleController> {
33
34         let console_name = console_name.to_owned();
35                 println!("console_name: {:?}", console_name);
36
37         Ok(ConsoleController {
38             config: VirtioConsoleConfig {
39                                                 cols: 20.into(),
40                                                 rows: 20.into(),
41                                                 max_nr_ports: 1.into(),
42                                                 emerg_wr: 64.into(),
43                                         },
44             console_name,
45         })
46     }
47
48     pub(crate) fn config(&self) -> &VirtioConsoleConfig {
49                 log::trace!("Get config\n");
50         &self.config
51     }
52
53     pub(crate) fn operation(&self, tx_request: VirtioConsoleControl) -> Result<()> {
54                 log::trace!("Console operation\n");
55                 Ok(())
56     }
57 }
58
59 #[cfg(test)]
60 mod tests {
61     use super::*;
62
63     #[test]
64     fn test_new_console_controller() {
65         let console_name = String::from("test_console");
66         let controller = ConsoleController::new(console_name.clone());
67
68         assert!(controller.is_ok());
69
70         let controller = controller.unwrap();
71         assert_eq!(controller.console_name, "test_console");
72     }
73
74     #[test]
75     fn test_console_controller_config() {
76         let console_name = String::from("test_console");
77         let controller = ConsoleController::new(console_name).unwrap();
78
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);
84     }
85 }
86