@@ -9,11 +9,12 @@ mod test {
99
1010 #[ test]
1111 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 ( ) ;
1718
1819 assert_eq ! ( filter. addr0( ) . a( ) , 1 ) ;
1920 assert_eq ! ( filter. addr0( ) . b( ) , 2 ) ;
@@ -75,43 +76,11 @@ impl AddrRange {
7576 pub fn set_cfg ( & mut self , cfg : AddrConfig ) { self . cfg = cfg }
7677}
7778
78- // could've written a macro, i know
79- // but its just like 4 variables i think its fine
8079
8180/// the address filter configuration
8281#[ derive( Clone , Copy ) ]
8382pub struct AddrFilter ( pub ( super ) pt_conf_addr_filter ) ;
8483impl 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-
11584 #[ inline]
11685 pub fn addr0 ( & self ) -> AddrRange {
11786 unsafe {
@@ -143,4 +112,47 @@ impl AddrFilter {
143112 AddrConfig :: try_from ( self . 0 . config . ctl . addr3_cfg ( ) ) . unwrap ( ) )
144113 }
145114 }
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 ) }
146158}
0 commit comments