stm32_rust_template/driver/usb/
mod.rs1#![allow(dead_code)]
2
3use bitflags::bitflags;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum UsbRole {
8 None = 0,
9 Host = 1,
10 Device = 2,
11}
12
13bitflags! {
15 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
16 pub struct UsbPin: u32 {
17 const DP = 1 << 0; const DM = 1 << 1; const VBUS = 1 << 2; const OC = 1 << 3; const ID = 1 << 4; }
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
27pub enum UsbSpeed {
28 Low = 0,
29 Full = 1,
30 High = 2,
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq)]
35#[repr(u8)]
36pub enum UsbPid {
37 Reserved = 0,
38 Out = 1,
39 Ack = 2,
40 Data0 = 3,
41 Ping = 4,
42 Sof = 5,
43 Nyet = 6,
44 Data2 = 7,
45 Split = 8,
46 In = 9,
47 Nak = 10,
48 Data1 = 11,
49 Err = 12,
50 Setup = 13,
51 Stall = 14,
52 Mdata = 15,
53}
54
55pub mod endpoint {
57 pub const NUMBER_MASK: u8 = 0x0F;
58 pub const DIRECTION_MASK: u8 = 0x80;
59
60 #[inline]
61 pub fn address(number: u8, direction_in: bool) -> u8 {
62 (number & NUMBER_MASK) | if direction_in { DIRECTION_MASK } else { 0 }
63 }
64
65 #[inline]
66 pub fn number(address: u8) -> u8 {
67 address & NUMBER_MASK
68 }
69
70 #[inline]
71 pub fn is_in(address: u8) -> bool {
72 address & DIRECTION_MASK != 0
73 }
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq)]
78pub enum EndpointType {
79 Control = 0,
80 Isochronous = 1,
81 Bulk = 2,
82 Interrupt = 3,
83}
84
85pub mod packet_size {
87 pub const MAX_PACKET_SIZE_MASK: u16 = 0x07FF;
88
89 pub const MICROFRAME_TRANSACTIONS_MASK: u16 = 0x1800;
90 pub const MICROFRAME_TRANSACTIONS_1: u16 = 0x0000;
91 pub const MICROFRAME_TRANSACTIONS_2: u16 = 0x0800;
92 pub const MICROFRAME_TRANSACTIONS_3: u16 = 0x1000;
93}
94
95pub mod device;
96pub mod host;