1pub trait ResponsePresent {}
3pub trait Response8 {}
5pub trait Response32 {}
7pub trait Response136 {}
9pub trait ResponseBusy {}
11pub trait ResponseCrc {}
13
14pub trait Response {
15 fn val(&self) -> u32;
16}
17
18pub struct NoResponse;
19impl Response for NoResponse {
20 #[inline(always)]
21 fn val(&self) -> u32 {
22 ResponseType::NoResponse as u32
23 }
24}
25
26#[derive(Default)]
27pub struct CmdR1R6;
28impl ResponsePresent for CmdR1R6 {}
29impl ResponseCrc for CmdR1R6 {}
30impl Response for CmdR1R6 {
31 #[inline(always)]
32 fn val(&self) -> u32 {
33 ResponseType::CmdR1R6 as u32
34 }
35}
36
37#[derive(Default)]
38pub struct CmdR1B;
39impl ResponsePresent for CmdR1B {}
40impl ResponseBusy for CmdR1B {}
41impl ResponseCrc for CmdR1B {}
42impl Response for CmdR1B {
43 #[inline(always)]
44 fn val(&self) -> u32 {
45 ResponseType::CmdR1B as u32
46 }
47}
48
49#[derive(Default)]
50pub struct CmdR2;
51impl ResponsePresent for CmdR2 {}
52impl Response8 for CmdR2 {}
53impl Response136 for CmdR2 {}
54impl ResponseCrc for CmdR2 {}
55impl Response for CmdR2 {
56 #[inline(always)]
57 fn val(&self) -> u32 {
58 ResponseType::CmdR2 as u32
59 }
60}
61
62#[derive(Default)]
63pub struct CmdR3R4;
64impl ResponsePresent for CmdR3R4 {}
65impl Response32 for CmdR3R4 {}
66impl Response for CmdR3R4 {
67 #[inline(always)]
68 fn val(&self) -> u32 {
69 ResponseType::CmdR3R4 as u32
70 }
71}
72
73#[derive(Default)]
74pub struct CmdR5;
75impl ResponsePresent for CmdR5 {}
76impl Response8 for CmdR5 {}
77impl ResponseCrc for CmdR5 {}
78impl Response for CmdR5 {
79 #[inline(always)]
80 fn val(&self) -> u32 {
81 ResponseType::CmdR5 as u32
82 }
83}
84
85#[derive(Default)]
86pub struct CmdR7;
87impl ResponsePresent for CmdR7 {}
88impl Response32 for CmdR7 {}
89impl ResponseCrc for CmdR7 {}
90impl Response for CmdR7 {
91 #[inline(always)]
92 fn val(&self) -> u32 {
93 ResponseType::CmdR7 as u32
94 }
95}
96
97pub enum ResponseFlags {
98 ResponsePresent = 1 << 8,
99 Response8 = 1 << 9,
100 Response32 = 1 << 10,
101 Response136 = 1 << 11,
102 ResponseCrc = 1 << 12,
103 ResponseBusy = 1 << 13,
104}
105
106pub enum ResponseType {
107 NoResponse = 0,
108 CmdR1R6 = ResponseFlags::ResponsePresent as isize | ResponseFlags::ResponseCrc as isize,
109 CmdR1B = ResponseFlags::ResponsePresent as isize
110 | ResponseFlags::ResponseCrc as isize
111 | ResponseFlags::ResponseBusy as isize,
112 CmdR2 = ResponseFlags::ResponsePresent as isize
113 | ResponseFlags::Response8 as isize
114 | ResponseFlags::Response136 as isize
115 | ResponseFlags::ResponseCrc as isize,
116 CmdR3R4 = ResponseFlags::ResponsePresent as isize | ResponseFlags::Response32 as isize,
117 CmdR5 = ResponseFlags::ResponsePresent as isize
118 | ResponseFlags::Response8 as isize
119 | ResponseFlags::ResponseCrc as isize,
120 CmdR7 = ResponseFlags::ResponsePresent as isize
121 | ResponseFlags::Response32 as isize
122 | ResponseFlags::ResponseCrc as isize,
123}