pub struct Worker {
interrupt: Interrupt,
pub control_queue: Arc<Mutex<Queue>>,
pub event_queue: Option<Queue>,
vios_client: Arc<Mutex<VioSClient>>,
streams: Vec<StreamProxy>,
pub tx_queue: Arc<Mutex<Queue>>,
pub rx_queue: Arc<Mutex<Queue>>,
io_thread: Option<JoinHandle<Result<()>>>,
io_kill: Event,
pub saved_stream_state: Vec<StreamSnapshot>,
}
Fields§
§interrupt: Interrupt
§control_queue: Arc<Mutex<Queue>>
§event_queue: Option<Queue>
§vios_client: Arc<Mutex<VioSClient>>
§streams: Vec<StreamProxy>
§tx_queue: Arc<Mutex<Queue>>
§rx_queue: Arc<Mutex<Queue>>
§io_thread: Option<JoinHandle<Result<()>>>
§io_kill: Event
§saved_stream_state: Vec<StreamSnapshot>
Implementations§
source§impl Worker
impl Worker
sourcepub fn try_new(
vios_client: Arc<Mutex<VioSClient>>,
interrupt: Interrupt,
control_queue: Arc<Mutex<Queue>>,
event_queue: Queue,
tx_queue: Arc<Mutex<Queue>>,
rx_queue: Arc<Mutex<Queue>>,
saved_stream_state: Vec<StreamSnapshot>
) -> Result<Worker>
pub fn try_new( vios_client: Arc<Mutex<VioSClient>>, interrupt: Interrupt, control_queue: Arc<Mutex<Queue>>, event_queue: Queue, tx_queue: Arc<Mutex<Queue>>, rx_queue: Arc<Mutex<Queue>>, saved_stream_state: Vec<StreamSnapshot> ) -> Result<Worker>
Creates a new virtio-snd worker.
sourcepub fn control_loop(&mut self, kill_evt: Event) -> Result<()>
pub fn control_loop(&mut self, kill_evt: Event) -> Result<()>
Emulates the virtio-snd device. It won’t return until something is written to the kill_evt event or an unrecoverable error occurs.
fn stop_io_thread(&mut self)
fn process_controlq_buffers(&mut self) -> Result<()>
fn process_event_triggered(&mut self, event_queue: &mut Queue) -> Result<()>
fn parse_info_query(&mut self, read_buf: &[u8]) -> Option<(u32, u32)>
fn process_set_params( &mut self, desc: DescriptorChain, read_buf: &[u8] ) -> Result<()>
fn try_parse_pcm_hdr_and_send_msg( &mut self, read_buf: &[u8], msg: StreamMsg ) -> Result<()>
fn send_info_reply<T: AsBytes>( &mut self, desc: DescriptorChain, code: u32, info_vec: Vec<T> ) -> Result<()>
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Worker
impl Send for Worker
impl Sync for Worker
impl Unpin for Worker
impl !UnwindSafe for Worker
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.