Skip to main content

Class

Struct Class 

Source
pub struct Class {
    pub class: u8,
    pub sub_class: u8,
    pub protocol: u8,
}
Expand description

USB interface class.

Fields§

§class: u8

Class code.

§sub_class: u8

Subclass code.

§protocol: u8

Protocol code.

Implementations§

Source§

impl Class

Source

pub const VENDOR_SPECIFIC: u8 = 0xff

Vendor specific class code.

Source

pub const fn new(class: u8, sub_class: u8, protocol: u8) -> Self

Creates a new USB device or interface class.

Source

pub const fn vendor_specific(sub_class: u8, protocol: u8) -> Self

Creates a new USB device or interface class with vendor-specific class code.

Examples found in repository?
examples/common.rs (line 9)
9pub const CLASS: Class = Class::vendor_specific(22, 3);
More examples
Hide additional examples
examples/device.rs (line 16)
16const DEVICE_CLASS: Class = Class::vendor_specific(0xff, 0);
examples/simple_host.rs (line 10)
9async fn main() -> std::io::Result<()> {
10    let class = Class::vendor_specific(0x01, 0);
11
12    // Find and open the USB device.
13    let dev_info = nusb::list_devices()
14        .await?
15        .find(|d| d.vendor_id() == 0x1209 && d.product_id() == 0x0001)
16        .expect("device not found");
17    let iface = find_interface(&dev_info, class)?;
18    let dev = dev_info.open().await?;
19
20    // Connect and exchange packets.
21    let (tx, mut rx) = connect(dev, iface, b"hello").await?;
22    tx.send(b"ping"[..].into()).await?;
23    let reply = rx.recv().await?;
24    println!("received: {:?}", reply);
25    Ok(())
26}
examples/simple_device.rs (line 13)
12async fn main() -> std::io::Result<()> {
13    let class = Class::vendor_specific(0x01, 0);
14
15    // Create a USB gadget with a UPC function.
16    let (mut upc, hnd) =
17        UpcFunction::new(InterfaceId::new(class).with_guid(uuid!("3bf77270-42d2-42c6-a475-490227a9cc89")));
18    upc.set_info(b"my device".to_vec()).await;
19
20    let udc = default_udc().expect("no UDC available");
21    let gadget = Gadget::new(class.into(), Id::new(0x1209, 0x0001), Strings::new("mfr", "product", "serial"))
22        .with_config(Config::new("config").with_function(hnd))
23        .with_os_descriptor(OsDescriptor::microsoft());
24    let _reg = gadget.bind(&udc).expect("cannot bind to UDC");
25
26    // Accept a connection and exchange packets.
27    let (tx, mut rx) = upc.accept().await?;
28    if let Some(data) = rx.recv().await? {
29        println!("received: {:?}", data);
30        tx.send(b"pong"[..].into()).await?;
31    }
32
33    // Allow USB transport to flush before teardown.
34    tokio::time::sleep(Duration::from_secs(1)).await;
35    Ok(())
36}

Trait Implementations§

Source§

impl Clone for Class

Source§

fn clone(&self) -> Class

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Class

Source§

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

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

impl From<Class> for Class

Available on crate feature device only.
Source§

fn from(_: Class) -> Self

Converts to this type from the input type.
Source§

impl From<Class> for InterfaceId

Source§

fn from(class: Class) -> Self

Converts to this type from the input type.
Source§

impl Hash for Class

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Class

Source§

fn cmp(&self, other: &Class) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Class

Source§

fn eq(&self, other: &Class) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Class

Source§

fn partial_cmp(&self, other: &Class) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Copy for Class

Source§

impl Eq for Class

Source§

impl StructuralPartialEq for Class

Auto Trait Implementations§

§

impl Freeze for Class

§

impl RefUnwindSafe for Class

§

impl Send for Class

§

impl Sync for Class

§

impl Unpin for Class

§

impl UnsafeUnpin for Class

§

impl UnwindSafe for Class

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
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

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>,

Source§

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more