@@ -9,11 +9,12 @@ mod test {
9
9
10
10
#[ test]
11
11
fn test_addrfilter ( ) {
12
- let mut filter = AddrFilter :: new ( ) ;
13
- filter. set_addr0 ( AddrRange :: new ( 1 , 2 , AddrConfig :: DISABLED ) ) ;
14
- filter. set_addr1 ( AddrRange :: new ( 3 , 4 , AddrConfig :: FILTER ) ) ;
15
- filter. set_addr2 ( AddrRange :: new ( 5 , 6 , AddrConfig :: STOP ) ) ;
16
- filter. set_addr3 ( AddrRange :: new ( 7 , 8 , AddrConfig :: DISABLED ) ) ;
12
+ let mut filter = AddrFilterBuilder :: new ( )
13
+ . addr0 ( AddrRange :: new ( 1 , 2 , AddrConfig :: DISABLED ) )
14
+ . addr1 ( AddrRange :: new ( 3 , 4 , AddrConfig :: FILTER ) )
15
+ . addr2 ( AddrRange :: new ( 5 , 6 , AddrConfig :: STOP ) )
16
+ . addr3 ( AddrRange :: new ( 7 , 8 , AddrConfig :: DISABLED ) )
17
+ . finish ( ) ;
17
18
18
19
assert_eq ! ( filter. addr0( ) . a( ) , 1 ) ;
19
20
assert_eq ! ( filter. addr0( ) . b( ) , 2 ) ;
@@ -75,43 +76,11 @@ impl AddrRange {
75
76
pub fn set_cfg ( & mut self , cfg : AddrConfig ) { self . cfg = cfg }
76
77
}
77
78
78
- // could've written a macro, i know
79
- // but its just like 4 variables i think its fine
80
79
81
80
/// the address filter configuration
82
81
#[ derive( Clone , Copy ) ]
83
82
pub struct AddrFilter ( pub ( super ) pt_conf_addr_filter ) ;
84
83
impl AddrFilter {
85
- pub fn new ( ) -> Self { unsafe { mem:: zeroed ( ) } }
86
-
87
- #[ inline]
88
- pub fn set_addr0 ( & mut self , range : AddrRange ) {
89
- self . 0 . addr0_a = range. a ;
90
- self . 0 . addr0_b = range. b ;
91
- unsafe { self . 0 . config . ctl . set_addr0_cfg ( range. cfg as u32 ) } ;
92
- }
93
-
94
- #[ inline]
95
- pub fn set_addr1 ( & mut self , range : AddrRange ) {
96
- self . 0 . addr1_a = range. a ;
97
- self . 0 . addr1_b = range. b ;
98
- unsafe { self . 0 . config . ctl . set_addr1_cfg ( range. cfg as u32 ) } ;
99
- }
100
-
101
- #[ inline]
102
- pub fn set_addr2 ( & mut self , range : AddrRange ) {
103
- self . 0 . addr2_a = range. a ;
104
- self . 0 . addr2_b = range. b ;
105
- unsafe { self . 0 . config . ctl . set_addr2_cfg ( range. cfg as u32 ) } ;
106
- }
107
-
108
- #[ inline]
109
- pub fn set_addr3 ( & mut self , range : AddrRange ) {
110
- self . 0 . addr3_a = range. a ;
111
- self . 0 . addr3_b = range. b ;
112
- unsafe { self . 0 . config . ctl . set_addr3_cfg ( range. cfg as u32 ) } ;
113
- }
114
-
115
84
#[ inline]
116
85
pub fn addr0 ( & self ) -> AddrRange {
117
86
unsafe {
@@ -143,4 +112,47 @@ impl AddrFilter {
143
112
AddrConfig :: try_from ( self . 0 . config . ctl . addr3_cfg ( ) ) . unwrap ( ) )
144
113
}
145
114
}
115
+ }
116
+
117
+ pub struct AddrFilterBuilder ( pub ( super ) pt_conf_addr_filter ) ;
118
+ impl AddrFilterBuilder {
119
+ pub fn new ( ) -> Self { unsafe { mem:: zeroed ( ) } }
120
+
121
+ #[ inline]
122
+ pub fn addr0 ( & mut self , range : AddrRange ) -> & mut Self {
123
+ self . 0 . addr0_a = range. a ;
124
+ self . 0 . addr0_b = range. b ;
125
+ unsafe { self . 0 . config . ctl . set_addr0_cfg ( range. cfg as u32 ) } ;
126
+
127
+ self
128
+ }
129
+
130
+ #[ inline]
131
+ pub fn addr1 ( & mut self , range : AddrRange ) -> & mut Self {
132
+ self . 0 . addr1_a = range. a ;
133
+ self . 0 . addr1_b = range. b ;
134
+ unsafe { self . 0 . config . ctl . set_addr1_cfg ( range. cfg as u32 ) } ;
135
+
136
+ self
137
+ }
138
+
139
+ #[ inline]
140
+ pub fn addr2 ( & mut self , range : AddrRange ) -> & mut Self {
141
+ self . 0 . addr2_a = range. a ;
142
+ self . 0 . addr2_b = range. b ;
143
+ unsafe { self . 0 . config . ctl . set_addr2_cfg ( range. cfg as u32 ) } ;
144
+
145
+ self
146
+ }
147
+
148
+ #[ inline]
149
+ pub fn addr3 ( & mut self , range : AddrRange ) -> & mut Self {
150
+ self . 0 . addr3_a = range. a ;
151
+ self . 0 . addr3_b = range. b ;
152
+ unsafe { self . 0 . config . ctl . set_addr3_cfg ( range. cfg as u32 ) } ;
153
+
154
+ self
155
+ }
156
+
157
+ pub fn finish ( & self ) -> AddrFilter { AddrFilter ( self . 0 ) }
146
158
}
0 commit comments