#![allow(dead_code)]
pub const REQ_GET_STATUS: u8 = 0;
pub const REQ_CLEAR_FEATURE: u8 = 1;
pub const REQ_SET_FEATURE: u8 = 3;
pub const REQ_SET_ADDRESS: u8 = 5;
pub const REQ_GET_DESCRIPTOR: u8 = 6;
pub const REQ_SET_DESCRIPTOR: u8 = 7;
pub const REQ_GET_CONFIGURATION: u8 = 8;
pub const REQ_SET_CONFIGURATION: u8 = 9;
pub const REQ_GET_INTERFACE: u8 = 10;
pub const REQ_SET_INTERFACE: u8 = 11;
pub const REQ_SYNCH_FRAME: u8 = 12;
pub const DT_DEVICE: u8 = 1;
pub const DT_CONFIG: u8 = 2;
pub const DT_STRING: u8 = 3;
pub const DT_INTERFACE: u8 = 4;
pub const DT_ENDPOINT: u8 = 5;
pub const DT_DEVICE_QUALIFIER: u8 = 6;
pub const DT_OTHER_SPEED_CONFIG: u8 = 7;
pub const DT_INTERFACE_POWER: u8 = 8;
pub const DT_INTERFACE_ASSOC: u8 = 11;
pub const DT_CS_INTERFACE: u8 = 0x24;
pub const DT_CS_ENDPOINT: u8 = 0x25;
pub const REQ_TYPE_STANDARD: u8 = 0 << 5;
pub const REQ_TYPE_CLASS: u8 = 1 << 5;
pub const REQ_TYPE_VENDOR: u8 = 2 << 5;
pub const REQ_RCPT_DEVICE: u8 = 0;
pub const REQ_RCPT_INTERFACE: u8 = 1;
pub const REQ_RCPT_ENDPOINT: u8 = 2;
pub const REQ_RCPT_OTHER: u8 = 3;
pub fn encode_string_descriptor(s: &str, dst: &mut [u8]) -> usize {
let mut n = 2usize;
for ch in s.chars() {
if n + 2 > dst.len() {
break;
}
let code = ch as u32;
let lo = (code & 0xff) as u8;
let hi = ((code >> 8) & 0xff) as u8;
dst[n] = lo;
dst[n + 1] = hi;
n += 2;
}
if dst.len() >= 2 {
dst[0] = n as u8;
dst[1] = DT_STRING;
}
n
}
pub const STRING0_EN_US: [u8; 4] = [4, DT_STRING, 0x09, 0x04];
#[inline]
pub const fn ep_addr(num: u8, dir_in: bool) -> u8 {
(num & 0x0f) | if dir_in { 0x80 } else { 0 }
}
pub const EP_ATTR_CONTROL: u8 = 0;
pub const EP_ATTR_ISOCHRONOUS: u8 = 1;
pub const EP_ATTR_BULK: u8 = 2;
pub const EP_ATTR_INTERRUPT: u8 = 3;