1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker use std::io; 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Worker use base::Event; 8*bb4ee6a4SAndroid Build Coastguard Worker use base::FileSync; 9*bb4ee6a4SAndroid Build Coastguard Worker use base::RawDescriptor; 10*bb4ee6a4SAndroid Build Coastguard Worker use hypervisor::ProtectionType; 11*bb4ee6a4SAndroid Build Coastguard Worker 12*bb4ee6a4SAndroid Build Coastguard Worker use crate::serial_device::SerialInput; 13*bb4ee6a4SAndroid Build Coastguard Worker use crate::serial_device::SerialOptions; 14*bb4ee6a4SAndroid Build Coastguard Worker use crate::sys::serial_device::SerialDevice; 15*bb4ee6a4SAndroid Build Coastguard Worker use crate::Serial; 16*bb4ee6a4SAndroid Build Coastguard Worker 17*bb4ee6a4SAndroid Build Coastguard Worker // TODO(b/234469655): Remove type alias once ReadNotifier is implemented for 18*bb4ee6a4SAndroid Build Coastguard Worker // PipeConnection. 19*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) type InStreamType = Box<dyn SerialInput>; 20*bb4ee6a4SAndroid Build Coastguard Worker 21*bb4ee6a4SAndroid Build Coastguard Worker impl SerialDevice for Serial { 22*bb4ee6a4SAndroid Build Coastguard Worker /// Constructs a Serial device ready for input and output. 23*bb4ee6a4SAndroid Build Coastguard Worker /// 24*bb4ee6a4SAndroid Build Coastguard Worker /// The stream `input` should not block, instead returning 0 bytes if are no bytes available. new( _protection_type: ProtectionType, interrupt_evt: Event, input: Option<Box<dyn SerialInput>>, out: Option<Box<dyn io::Write + Send>>, _sync: Option<Box<dyn FileSync + Send>>, options: SerialOptions, _keep_rds: Vec<RawDescriptor>, ) -> Serial25*bb4ee6a4SAndroid Build Coastguard Worker fn new( 26*bb4ee6a4SAndroid Build Coastguard Worker _protection_type: ProtectionType, 27*bb4ee6a4SAndroid Build Coastguard Worker interrupt_evt: Event, 28*bb4ee6a4SAndroid Build Coastguard Worker input: Option<Box<dyn SerialInput>>, 29*bb4ee6a4SAndroid Build Coastguard Worker out: Option<Box<dyn io::Write + Send>>, 30*bb4ee6a4SAndroid Build Coastguard Worker _sync: Option<Box<dyn FileSync + Send>>, 31*bb4ee6a4SAndroid Build Coastguard Worker options: SerialOptions, 32*bb4ee6a4SAndroid Build Coastguard Worker _keep_rds: Vec<RawDescriptor>, 33*bb4ee6a4SAndroid Build Coastguard Worker ) -> Serial { 34*bb4ee6a4SAndroid Build Coastguard Worker Serial::new_common(interrupt_evt, input, out, options.out_timestamp) 35*bb4ee6a4SAndroid Build Coastguard Worker } 36*bb4ee6a4SAndroid Build Coastguard Worker } 37