1#![deny(unsafe_code)]
8#![warn(missing_docs)]
9#![cfg_attr(docsrs, feature(doc_auto_cfg))]
10
11#[cfg(feature = "device")]
12pub mod device;
13
14#[cfg(any(feature = "host", feature = "web"))]
15pub mod host;
16
17pub const INFO_SIZE: usize = 4096;
19
20pub const MAX_SIZE: usize = 16_777_216;
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
25pub struct Class {
26 pub class: u8,
28 pub sub_class: u8,
30 pub protocol: u8,
32}
33
34impl Class {
35 pub const VENDOR_SPECIFIC: u8 = 0xff;
37
38 pub const fn new(class: u8, sub_class: u8, protocol: u8) -> Self {
40 Self { class, sub_class, protocol }
41 }
42
43 pub const fn vendor_specific(sub_class: u8, protocol: u8) -> Self {
45 Self::new(Self::VENDOR_SPECIFIC, sub_class, protocol)
46 }
47}
48
49#[cfg(feature = "device")]
50impl From<Class> for usb_gadget::Class {
51 fn from(Class { class, sub_class, protocol }: Class) -> Self {
52 usb_gadget::Class { class, sub_class, protocol }
53 }
54}
55
56#[allow(dead_code)]
57const CTRL_REQ_OPEN: u8 = 1;
58#[allow(dead_code)]
59const CTRL_REQ_CLOSE: u8 = 2;
60#[allow(dead_code)]
61const CTRL_REQ_INFO: u8 = 3;