@@ -23,7 +23,7 @@ impl Messages {
2323 #[ inline( never) ]
2424 pub fn from_can_message ( id : u32 , payload : & [ u8 ] ) -> Result < Self , CanError > {
2525 use core:: convert:: TryFrom ;
26-
26+
2727 let res = match id {
2828 256 => Messages :: Foo ( Foo :: try_from ( payload) ?) ,
2929 512 => Messages :: Bar ( Bar :: try_from ( payload) ?) ,
@@ -46,20 +46,20 @@ pub struct Foo {
4646
4747impl Foo {
4848 pub const MESSAGE_ID : u32 = 256 ;
49-
49+
5050 /// Construct new Foo from values
5151 pub fn new ( voltage : f32 , current : f32 ) -> Result < Self , CanError > {
5252 let mut res = Self { raw : [ 0u8 ; 4 ] } ;
5353 res. set_voltage ( voltage) ?;
5454 res. set_current ( current) ?;
5555 Ok ( res)
5656 }
57-
57+
5858 /// Access message payload raw value
5959 pub fn raw ( & self ) -> & [ u8 ] {
6060 & self . raw
6161 }
62-
62+
6363 /// Voltage
6464 ///
6565 /// - Min: 0
@@ -70,7 +70,7 @@ impl Foo {
7070 pub fn voltage ( & self ) -> f32 {
7171 self . voltage_raw ( )
7272 }
73-
73+
7474 /// Get raw value of Voltage
7575 ///
7676 /// - Start bit: 16
@@ -82,29 +82,27 @@ impl Foo {
8282 #[ inline( always) ]
8383 pub fn voltage_raw ( & self ) -> f32 {
8484 let signal = u16:: unpack_le_bits ( & self . raw , 16 , 16 ) ;
85-
85+
8686 let factor = 0.000976562_f32 ;
8787 let offset = 0_f32 ;
8888 ( signal as f32 ) * factor + offset
8989 }
90-
90+
9191 /// Set value of Voltage
9292 #[ inline( always) ]
9393 pub fn set_voltage ( & mut self , value : f32 ) -> Result < ( ) , CanError > {
9494 #[ cfg( feature = "range_checked" ) ]
95- if value < 0_f32 || 63.9990234375_f32 < value {
96- return Err ( CanError :: ParameterOutOfRange { message_id : 256 } ) ;
97- }
95+ if value < 0_f32 || 63.9990234375_f32 < value { return Err ( CanError :: ParameterOutOfRange { message_id : 256 } ) ; }
9896 let factor = 0.000976562_f32 ;
9997 let offset = 0_f32 ;
10098 let value = ( ( value - offset) / factor) as u16 ;
101-
99+
102100 let start_bit = 16 ;
103101 let bits = 16 ;
104102 value. pack_le_bits ( & mut self . raw , start_bit, bits) ;
105103 Ok ( ( ) )
106104 }
107-
105+
108106 /// Current
109107 ///
110108 /// - Min: -2048
@@ -115,7 +113,7 @@ impl Foo {
115113 pub fn current ( & self ) -> f32 {
116114 self . current_raw ( )
117115 }
118-
116+
119117 /// Get raw value of Current
120118 ///
121119 /// - Start bit: 0
@@ -127,44 +125,42 @@ impl Foo {
127125 #[ inline( always) ]
128126 pub fn current_raw ( & self ) -> f32 {
129127 let signal = i16:: unpack_le_bits ( & self . raw , 0 , 16 ) ;
130-
128+
131129 let factor = 0.0625_f32 ;
132130 let offset = 0_f32 ;
133131 ( signal as f32 ) * factor + offset
134132 }
135-
133+
136134 /// Set value of Current
137135 #[ inline( always) ]
138136 pub fn set_current ( & mut self , value : f32 ) -> Result < ( ) , CanError > {
139137 #[ cfg( feature = "range_checked" ) ]
140- if value < -2048_f32 || 2047.9375_f32 < value {
141- return Err ( CanError :: ParameterOutOfRange { message_id : 256 } ) ;
142- }
138+ if value < -2048_f32 || 2047.9375_f32 < value { return Err ( CanError :: ParameterOutOfRange { message_id : 256 } ) ; }
143139 let factor = 0.0625_f32 ;
144140 let offset = 0_f32 ;
145141 let value = ( ( value - offset) / factor) as i16 ;
146-
142+
147143 let start_bit = 0 ;
148144 let bits = 16 ;
149145 value. pack_le_bits ( & mut self . raw , start_bit, bits) ;
150146 Ok ( ( ) )
151147 }
148+
152149}
153150
154151impl core:: convert:: TryFrom < & [ u8 ] > for Foo {
155152 type Error = CanError ;
156-
153+
157154 #[ inline( always) ]
158155 fn try_from ( payload : & [ u8 ] ) -> Result < Self , Self :: Error > {
159- if payload. len ( ) != 4 {
160- return Err ( CanError :: InvalidPayloadSize ) ;
161- }
156+ if payload. len ( ) != 4 { return Err ( CanError :: InvalidPayloadSize ) ; }
162157 let mut raw = [ 0u8 ; 4 ] ;
163158 raw. copy_from_slice ( & payload[ ..4 ] ) ;
164159 Ok ( Self { raw } )
165160 }
166161}
167162
163+
168164/// Bar
169165///
170166/// - ID: 512 (0x200)
@@ -178,7 +174,7 @@ pub struct Bar {
178174
179175impl Bar {
180176 pub const MESSAGE_ID : u32 = 512 ;
181-
177+
182178 /// Construct new Bar from values
183179 pub fn new ( one : u8 , two : f32 , three : u8 , four : u8 , five : bool ) -> Result < Self , CanError > {
184180 let mut res = Self { raw : [ 0u8 ; 8 ] } ;
@@ -189,12 +185,12 @@ impl Bar {
189185 res. set_five ( five) ?;
190186 Ok ( res)
191187 }
192-
188+
193189 /// Access message payload raw value
194190 pub fn raw ( & self ) -> & [ u8 ] {
195191 & self . raw
196192 }
197-
193+
198194 /// One
199195 ///
200196 /// - Min: 0
@@ -205,7 +201,7 @@ impl Bar {
205201 pub fn one ( & self ) -> u8 {
206202 self . one_raw ( )
207203 }
208-
204+
209205 /// Get raw value of One
210206 ///
211207 /// - Start bit: 15
@@ -217,23 +213,21 @@ impl Bar {
217213 #[ inline( always) ]
218214 pub fn one_raw ( & self ) -> u8 {
219215 let signal = u8:: unpack_be_bits ( & self . raw , ( 15 - ( 2 - 1 ) ) , 2 ) ;
220-
216+
221217 signal
222218 }
223-
219+
224220 /// Set value of One
225221 #[ inline( always) ]
226222 pub fn set_one ( & mut self , value : u8 ) -> Result < ( ) , CanError > {
227223 #[ cfg( feature = "range_checked" ) ]
228- if value < 0_u8 || 3_u8 < value {
229- return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ;
230- }
224+ if value < 0_u8 || 3_u8 < value { return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ; }
231225 let start_bit = 15 ;
232226 let bits = 2 ;
233227 value. pack_be_bits ( & mut self . raw , start_bit, bits) ;
234228 Ok ( ( ) )
235229 }
236-
230+
237231 /// Two
238232 ///
239233 /// - Min: 0
@@ -244,7 +238,7 @@ impl Bar {
244238 pub fn two ( & self ) -> f32 {
245239 self . two_raw ( )
246240 }
247-
241+
248242 /// Get raw value of Two
249243 ///
250244 /// - Start bit: 7
@@ -256,29 +250,27 @@ impl Bar {
256250 #[ inline( always) ]
257251 pub fn two_raw ( & self ) -> f32 {
258252 let signal = u8:: unpack_be_bits ( & self . raw , ( 7 - ( 8 - 1 ) ) , 8 ) ;
259-
253+
260254 let factor = 0.39_f32 ;
261255 let offset = 0_f32 ;
262256 ( signal as f32 ) * factor + offset
263257 }
264-
258+
265259 /// Set value of Two
266260 #[ inline( always) ]
267261 pub fn set_two ( & mut self , value : f32 ) -> Result < ( ) , CanError > {
268262 #[ cfg( feature = "range_checked" ) ]
269- if value < 0_f32 || 100_f32 < value {
270- return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ;
271- }
263+ if value < 0_f32 || 100_f32 < value { return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ; }
272264 let factor = 0.39_f32 ;
273265 let offset = 0_f32 ;
274266 let value = ( ( value - offset) / factor) as u8 ;
275-
267+
276268 let start_bit = 7 ;
277269 let bits = 8 ;
278270 value. pack_be_bits ( & mut self . raw , start_bit, bits) ;
279271 Ok ( ( ) )
280272 }
281-
273+
282274 /// Three
283275 ///
284276 /// - Min: 0
@@ -295,7 +287,7 @@ impl Bar {
295287 x => BarThree :: Other ( x) ,
296288 }
297289 }
298-
290+
299291 /// Get raw value of Three
300292 ///
301293 /// - Start bit: 13
@@ -307,23 +299,21 @@ impl Bar {
307299 #[ inline( always) ]
308300 pub fn three_raw ( & self ) -> u8 {
309301 let signal = u8:: unpack_be_bits ( & self . raw , ( 13 - ( 3 - 1 ) ) , 3 ) ;
310-
302+
311303 signal
312304 }
313-
305+
314306 /// Set value of Three
315307 #[ inline( always) ]
316308 pub fn set_three ( & mut self , value : u8 ) -> Result < ( ) , CanError > {
317309 #[ cfg( feature = "range_checked" ) ]
318- if value < 0_u8 || 7_u8 < value {
319- return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ;
320- }
310+ if value < 0_u8 || 7_u8 < value { return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ; }
321311 let start_bit = 13 ;
322312 let bits = 3 ;
323313 value. pack_be_bits ( & mut self . raw , start_bit, bits) ;
324314 Ok ( ( ) )
325315 }
326-
316+
327317 /// Four
328318 ///
329319 /// - Min: 0
@@ -340,7 +330,7 @@ impl Bar {
340330 x => BarFour :: Other ( x) ,
341331 }
342332 }
343-
333+
344334 /// Get raw value of Four
345335 ///
346336 /// - Start bit: 10
@@ -352,34 +342,38 @@ impl Bar {
352342 #[ inline( always) ]
353343 pub fn four_raw ( & self ) -> u8 {
354344 let signal = u8:: unpack_be_bits ( & self . raw , ( 10 - ( 2 - 1 ) ) , 2 ) ;
355-
345+
356346 signal
357347 }
358-
348+
359349 /// Set value of Four
360350 #[ inline( always) ]
361351 pub fn set_four ( & mut self , value : u8 ) -> Result < ( ) , CanError > {
362352 #[ cfg( feature = "range_checked" ) ]
363- if value < 0_u8 || 3_u8 < value {
364- return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ;
365- }
353+ if value < 0_u8 || 3_u8 < value { return Err ( CanError :: ParameterOutOfRange { message_id : 512 } ) ; }
366354 let start_bit = 10 ;
367355 let bits = 2 ;
368356 value. pack_be_bits ( & mut self . raw , start_bit, bits) ;
369357 Ok ( ( ) )
370358 }
371-
359+
372360 /// Five
373361 ///
374362 /// - Min: 0
375363 /// - Max: 1
376364 /// - Unit: "boolean"
377365 /// - Receivers: Dolor
378366 #[ inline( always) ]
379- pub fn five ( & self ) -> bool {
380- self . five_raw ( )
367+ pub fn five ( & self ) -> BarFive {
368+ match self . five_raw ( ) {
369+ false => BarFive :: X0off ,
370+ true => BarFive :: X1on ,
371+ false => BarFive :: X2oner ,
372+ false => BarFive :: X3onest ,
373+ x => BarFive :: Other ( x) ,
374+ }
381375 }
382-
376+
383377 /// Get raw value of Five
384378 ///
385379 /// - Start bit: 30
@@ -391,10 +385,10 @@ impl Bar {
391385 #[ inline( always) ]
392386 pub fn five_raw ( & self ) -> bool {
393387 let signal = u8:: unpack_be_bits ( & self . raw , ( 30 - ( 1 - 1 ) ) , 1 ) ;
394-
388+
395389 signal == 1
396390 }
397-
391+
398392 /// Set value of Five
399393 #[ inline( always) ]
400394 pub fn set_five ( & mut self , value : bool ) -> Result < ( ) , CanError > {
@@ -404,16 +398,15 @@ impl Bar {
404398 value. pack_be_bits ( & mut self . raw , start_bit, bits) ;
405399 Ok ( ( ) )
406400 }
401+
407402}
408403
409404impl core:: convert:: TryFrom < & [ u8 ] > for Bar {
410405 type Error = CanError ;
411-
406+
412407 #[ inline( always) ]
413408 fn try_from ( payload : & [ u8 ] ) -> Result < Self , Self :: Error > {
414- if payload. len ( ) != 8 {
415- return Err ( CanError :: InvalidPayloadSize ) ;
416- }
409+ if payload. len ( ) != 8 { return Err ( CanError :: InvalidPayloadSize ) ; }
417410 let mut raw = [ 0u8 ; 8 ] ;
418411 raw. copy_from_slice ( & payload[ ..8 ] ) ;
419412 Ok ( Self { raw } )
@@ -440,6 +433,17 @@ pub enum BarFour {
440433 Onest ,
441434 Other ( u8 ) ,
442435}
436+ /// Defined values for Five
437+ #[ derive( Clone , Copy , PartialEq ) ]
438+ #[ cfg_attr( feature = "debug" , derive( Debug ) ) ]
439+ pub enum BarFive {
440+ X0off ,
441+ X1on ,
442+ X2oner ,
443+ X3onest ,
444+ Other ( bool ) ,
445+ }
446+
443447
444448/// This is just to make testing easier
445449fn main ( ) { }
@@ -456,3 +460,4 @@ pub enum CanError {
456460 } ,
457461 InvalidPayloadSize ,
458462}
463+
0 commit comments