sam4l/usbc/
debug.rs
1use core::fmt;
6
7pub struct HexBuf<'a>(pub &'a [u8]);
8
9impl fmt::Debug for HexBuf<'_> {
10 #[allow(unused_must_use)]
11 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
12 write!(f, "[");
13 for (i, b) in self.0.iter().enumerate() {
14 write!(f, "{}{:.02x}", if i > 0 { " " } else { "" }, b);
15 }
16 write!(f, "]")
17 }
18}
19
20pub const UDINT_SUSP: u32 = 1 << 0;
22pub const UDINT_SOF: u32 = 1 << 2;
23pub const UDINT_EORST: u32 = 1 << 3;
24pub const UDINT_WAKEUP: u32 = 1 << 4;
25pub const UDINT_EORSM: u32 = 1 << 5;
26pub const UDINT_UPRSM: u32 = 1 << 6;
27
28pub struct UdintFlags(pub u32);
29
30impl fmt::Debug for UdintFlags {
31 #[allow(unused_must_use)]
32 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
33 let w: u32 = self.0;
34
35 write!(f, "{{");
36 if w & UDINT_WAKEUP != 0 {
37 write!(f, "w");
38 }
39 if w & UDINT_SOF != 0 {
40 write!(f, "s");
41 }
42
43 if w & UDINT_SUSP != 0 {
44 write!(f, " SUSP");
45 }
46 if w & UDINT_EORST != 0 {
47 write!(f, " EORST");
48 }
49 if w & UDINT_EORSM != 0 {
50 write!(f, " EORSM");
51 }
52 if w & UDINT_UPRSM != 0 {
53 write!(f, " UPRSM");
54 }
55
56 for i in 0..9 {
57 if w & (1 << (12 + i)) != 0 {
58 write!(f, " EP{}", i);
59 }
60 }
61 write!(f, "}}")
62 }
63}
64
65macro_rules! debug_flags {
66 ( $tyname:ident {$( $flag:ident = $offset:expr; )*} ) => {
67
68 pub struct $tyname(pub u32);
69
70 impl fmt::Debug for $tyname {
71 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
72 let w: u32 = self.0;
73 write!(f, "{{")?;
74 $(
75 if w & (1 << $offset) != 0 {
76 write!(f, "{} ", stringify!($flag))?;
77 }
78 )*
79 write!(f, "}}")
80 }
81 }
82 };
83}
84
85debug_flags!(UeconFlags {
86 BUSY1E = 25;
87 BUSY0E = 24;
88 STALLRQ = 19;
89 RSTDT = 18;
90 FIFOCON = 14;
91 KILLBK = 13;
92 NBUSYBKE = 12;
93 NREPLY = 8;
95 RXSTPE = 2;
97 TXINE = 0;
98 NAKINE = 4;
99 NAKOUTE = 3;
100 RXOUTE = 1;
101});
102
103pub const TXIN: u32 = 1 << 0;
105pub const RXOUT: u32 = 1 << 1;
106pub const RXSTP: u32 = 1 << 2;
107pub const ERRORF: u32 = 1 << 2;
108pub const NAKOUT: u32 = 1 << 3;
109pub const NAKIN: u32 = 1 << 4;
110pub const STALLED: u32 = 1 << 6;
111pub const CRCERR: u32 = 1 << 6;
112pub const RAMACERR: u32 = 1 << 11;
113pub const CTRLDIR: u32 = 1 << 17;
114pub const STALLRQ: u32 = 1 << 19;
115
116pub struct UestaFlags(pub u32);
117
118impl fmt::Debug for UestaFlags {
119 #[allow(unused_must_use)]
120 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
121 let w: u32 = self.0;
122
123 write!(f, "{{");
124 if w & TXIN != 0 {
125 write!(f, "TXIN ");
126 }
127 if w & RXOUT != 0 {
128 write!(f, "RXOUT ");
129 }
130 if w & RXSTP != 0 {
131 write!(f, "RXSTP");
132 }
133 if w & ERRORF != 0 {
134 write!(f, "/ERRORF ");
135 }
136 if w & NAKOUT != 0 {
137 write!(f, "NAKOUT ");
138 }
139 if w & NAKIN != 0 {
140 write!(f, "NAKIN ");
141 }
142 if w & STALLED != 0 {
143 write!(f, "STALLED");
144 }
145 if w & CRCERR != 0 {
146 write!(f, "/CRCERR ");
147 }
148 if w & RAMACERR != 0 {
149 write!(f, "RAMACERR ");
150 }
151 write!(f, "NBUSYBK={} ", (w >> 12) & 0x3);
152 write!(f, "CURBK={} ", (w >> 14) & 0x3);
153 write!(f, "CTRLDIR={}", if w & CTRLDIR != 0 { "IN" } else { "OUT" });
154 write!(f, "}}")
155 }
156}
157
158