pub struct RingBufferController<T: 'static + TransferDescriptorHandler> {
    name: String,
    state: Mutex<RingBufferState>,
    stop_callback: Mutex<Vec<RingBufferStopCallback>>,
    ring_buffer: Mutex<RingBuffer>,
    handler: Mutex<T>,
    event_loop: Arc<EventLoop>,
    event: Event,
}
Expand description

RingBufferController owns a ring buffer. It lives on a event_loop. It will pop out transfer descriptor and let TransferDescriptorHandler handle it.

Fields§

§name: String§state: Mutex<RingBufferState>§stop_callback: Mutex<Vec<RingBufferStopCallback>>§ring_buffer: Mutex<RingBuffer>§handler: Mutex<T>§event_loop: Arc<EventLoop>§event: Event

Implementations§

source§

impl RingBufferController<CommandRingTrbHandler>

source§

impl<T> RingBufferController<T>
where T: 'static + TransferDescriptorHandler + Send,

source

pub fn new_with_handler( name: String, mem: GuestMemory, event_loop: Arc<EventLoop>, handler: T ) -> Result<Arc<RingBufferController<T>>, Error>

Create a ring buffer controller and add it to event loop.

source

fn lock_ring_buffer(&self) -> MutexGuard<'_, RingBuffer>

source

pub fn get_dequeue_pointer(&self) -> GuestAddress

Get dequeue pointer of the internal ring buffer.

source

pub fn set_dequeue_pointer(&self, ptr: GuestAddress)

Set dequeue pointer of the internal ring buffer.

source

pub fn get_consumer_cycle_state(&self) -> bool

Get consumer cycle state.

source

pub fn set_consumer_cycle_state(&self, state: bool)

Set consumer cycle state.

source

pub fn start(&self)

Start the ring buffer.

source

pub fn stop(&self, callback: RingBufferStopCallback)

Stop the ring buffer asynchronously.

source§

impl RingBufferController<TransferRingTrbHandler>

source

pub fn new( mem: GuestMemory, port: Arc<UsbPort>, event_loop: Arc<EventLoop>, interrupter: Arc<Mutex<Interrupter>>, slot_id: u8, endpoint_id: u8, device_slot: Weak<DeviceSlot>, stream_id: Option<u16> ) -> Result<Arc<RingBufferController<TransferRingTrbHandler>>, Error>

Trait Implementations§

source§

impl<T: 'static + TransferDescriptorHandler> Display for RingBufferController<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T> Drop for RingBufferController<T>
where T: 'static + TransferDescriptorHandler,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T> EventHandler for RingBufferController<T>
where T: 'static + TransferDescriptorHandler + Send,

source§

fn on_event(&self) -> Result<()>

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for RingBufferController<T>

§

impl<T> Send for RingBufferController<T>
where T: Send,

§

impl<T> Sync for RingBufferController<T>
where T: Send,

§

impl<T> Unpin for RingBufferController<T>
where T: Unpin,

§

impl<T> !UnwindSafe for RingBufferController<T>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: 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>

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)

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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V