@@ -42,6 +42,10 @@ pub enum Messages {
42
42
LargerIntsWithOffsets ( LargerIntsWithOffsets ) ,
43
43
/// MsgWithoutSignals
44
44
MsgWithoutSignals ( MsgWithoutSignals ) ,
45
+ /// TruncatedBeSignal
46
+ TruncatedBeSignal ( TruncatedBeSignal ) ,
47
+ /// TruncatedLeSignal
48
+ TruncatedLeSignal ( TruncatedLeSignal ) ,
45
49
}
46
50
47
51
impl Messages {
@@ -59,6 +63,8 @@ impl Messages {
59
63
1344 => Messages :: NegativeFactorTest ( NegativeFactorTest :: try_from ( payload) ?) ,
60
64
1338 => Messages :: LargerIntsWithOffsets ( LargerIntsWithOffsets :: try_from ( payload) ?) ,
61
65
513 => Messages :: MsgWithoutSignals ( MsgWithoutSignals :: try_from ( payload) ?) ,
66
+ 9001 => Messages :: TruncatedBeSignal ( TruncatedBeSignal :: try_from ( payload) ?) ,
67
+ 9002 => Messages :: TruncatedLeSignal ( TruncatedLeSignal :: try_from ( payload) ?) ,
62
68
n => return Err ( CanError :: UnknownMessageId ( n) ) ,
63
69
} ;
64
70
Ok ( res)
@@ -159,9 +165,8 @@ impl Foo {
159
165
/// - Value type: Signed
160
166
#[ inline( always) ]
161
167
pub fn current_raw ( & self ) -> f32 {
162
- let signal = self . raw . view_bits :: < Lsb0 > ( ) [ 0 ..16 ] . load_le :: < u16 > ( ) ;
168
+ let signal = self . raw . view_bits :: < Lsb0 > ( ) [ 0 ..16 ] . load_le :: < i16 > ( ) ;
163
169
164
- let signal = i16:: from_ne_bytes ( signal. to_ne_bytes ( ) ) ;
165
170
let factor = 0.0625_f32 ;
166
171
let offset = 0_f32 ;
167
172
( signal as f32 ) * factor + offset
@@ -1930,9 +1935,8 @@ impl NegativeFactorTest {
1930
1935
/// - Value type: Signed
1931
1936
#[ inline( always) ]
1932
1937
pub fn width_more_than_min_max_raw ( & self ) -> i16 {
1933
- let signal = self . raw . view_bits :: < Lsb0 > ( ) [ 16 ..26 ] . load_le :: < u16 > ( ) ;
1938
+ let signal = self . raw . view_bits :: < Lsb0 > ( ) [ 16 ..26 ] . load_le :: < i16 > ( ) ;
1934
1939
1935
- let signal = i16:: from_ne_bytes ( signal. to_ne_bytes ( ) ) ;
1936
1940
let factor = 1 ;
1937
1941
let signal = signal as i16 ;
1938
1942
i16:: from ( signal) . saturating_mul ( factor) . saturating_add ( 0 )
@@ -2215,6 +2219,222 @@ impl<'a> Arbitrary<'a> for MsgWithoutSignals {
2215
2219
}
2216
2220
}
2217
2221
2222
+ /// TruncatedBeSignal
2223
+ ///
2224
+ /// - ID: 9001 (0x2329)
2225
+ /// - Size: 8 bytes
2226
+ /// - Transmitter: Ipsum
2227
+ #[ derive( Clone , Copy ) ]
2228
+ pub struct TruncatedBeSignal {
2229
+ raw : [ u8 ; 8 ] ,
2230
+ }
2231
+
2232
+ impl TruncatedBeSignal {
2233
+ pub const MESSAGE_ID : u32 = 9001 ;
2234
+
2235
+ pub const FOO_MIN : i16 = -100_i16 ;
2236
+ pub const FOO_MAX : i16 = 100_i16 ;
2237
+
2238
+ /// Construct new TruncatedBeSignal from values
2239
+ pub fn new ( foo : i16 ) -> Result < Self , CanError > {
2240
+ let mut res = Self { raw : [ 0u8 ; 8 ] } ;
2241
+ res. set_foo ( foo) ?;
2242
+ Ok ( res)
2243
+ }
2244
+
2245
+ /// Access message payload raw value
2246
+ pub fn raw ( & self ) -> & [ u8 ; 8 ] {
2247
+ & self . raw
2248
+ }
2249
+
2250
+ /// Foo
2251
+ ///
2252
+ /// - Min: -100
2253
+ /// - Max: 100
2254
+ /// - Unit: ""
2255
+ /// - Receivers: Vector__XXX
2256
+ #[ inline( always) ]
2257
+ pub fn foo ( & self ) -> i16 {
2258
+ self . foo_raw ( )
2259
+ }
2260
+
2261
+ /// Get raw value of Foo
2262
+ ///
2263
+ /// - Start bit: 0
2264
+ /// - Signal size: 12 bits
2265
+ /// - Factor: 1
2266
+ /// - Offset: 0
2267
+ /// - Byte order: BigEndian
2268
+ /// - Value type: Signed
2269
+ #[ inline( always) ]
2270
+ pub fn foo_raw ( & self ) -> i16 {
2271
+ let signal = self . raw . view_bits :: < Msb0 > ( ) [ 7 ..19 ] . load_be :: < i16 > ( ) ;
2272
+
2273
+ let factor = 1 ;
2274
+ let signal = signal as i16 ;
2275
+ i16:: from ( signal) . saturating_mul ( factor) . saturating_add ( 0 )
2276
+ }
2277
+
2278
+ /// Set value of Foo
2279
+ #[ inline( always) ]
2280
+ pub fn set_foo ( & mut self , value : i16 ) -> Result < ( ) , CanError > {
2281
+ if value < -100_i16 || 100_i16 < value {
2282
+ return Err ( CanError :: ParameterOutOfRange { message_id : 9001 } ) ;
2283
+ }
2284
+ let factor = 1 ;
2285
+ let value = value
2286
+ . checked_sub ( 0 )
2287
+ . ok_or ( CanError :: ParameterOutOfRange { message_id : 9001 } ) ?;
2288
+ let value = ( value / factor) as i16 ;
2289
+
2290
+ let value = u16:: from_ne_bytes ( value. to_ne_bytes ( ) ) ;
2291
+ self . raw . view_bits_mut :: < Msb0 > ( ) [ 7 ..19 ] . store_be ( value) ;
2292
+ Ok ( ( ) )
2293
+ }
2294
+ }
2295
+
2296
+ impl core:: convert:: TryFrom < & [ u8 ] > for TruncatedBeSignal {
2297
+ type Error = CanError ;
2298
+
2299
+ #[ inline( always) ]
2300
+ fn try_from ( payload : & [ u8 ] ) -> Result < Self , Self :: Error > {
2301
+ if payload. len ( ) != 8 {
2302
+ return Err ( CanError :: InvalidPayloadSize ) ;
2303
+ }
2304
+ let mut raw = [ 0u8 ; 8 ] ;
2305
+ raw. copy_from_slice ( & payload[ ..8 ] ) ;
2306
+ Ok ( Self { raw } )
2307
+ }
2308
+ }
2309
+
2310
+ impl core:: fmt:: Debug for TruncatedBeSignal {
2311
+ fn fmt ( & self , f : & mut core:: fmt:: Formatter < ' _ > ) -> core:: fmt:: Result {
2312
+ if f. alternate ( ) {
2313
+ f. debug_struct ( "TruncatedBeSignal" )
2314
+ . field ( "foo" , & self . foo ( ) )
2315
+ . finish ( )
2316
+ } else {
2317
+ f. debug_tuple ( "TruncatedBeSignal" ) . field ( & self . raw ) . finish ( )
2318
+ }
2319
+ }
2320
+ }
2321
+
2322
+ #[ cfg( feature = "arb" ) ]
2323
+ impl < ' a > Arbitrary < ' a > for TruncatedBeSignal {
2324
+ fn arbitrary ( u : & mut Unstructured < ' a > ) -> Result < Self , arbitrary:: Error > {
2325
+ let foo = u. int_in_range ( -100 ..=100 ) ?;
2326
+ TruncatedBeSignal :: new ( foo) . map_err ( |_| arbitrary:: Error :: IncorrectFormat )
2327
+ }
2328
+ }
2329
+
2330
+ /// TruncatedLeSignal
2331
+ ///
2332
+ /// - ID: 9002 (0x232a)
2333
+ /// - Size: 8 bytes
2334
+ /// - Transmitter: Ipsum
2335
+ #[ derive( Clone , Copy ) ]
2336
+ pub struct TruncatedLeSignal {
2337
+ raw : [ u8 ; 8 ] ,
2338
+ }
2339
+
2340
+ impl TruncatedLeSignal {
2341
+ pub const MESSAGE_ID : u32 = 9002 ;
2342
+
2343
+ pub const FOO_MIN : i16 = -100_i16 ;
2344
+ pub const FOO_MAX : i16 = 100_i16 ;
2345
+
2346
+ /// Construct new TruncatedLeSignal from values
2347
+ pub fn new ( foo : i16 ) -> Result < Self , CanError > {
2348
+ let mut res = Self { raw : [ 0u8 ; 8 ] } ;
2349
+ res. set_foo ( foo) ?;
2350
+ Ok ( res)
2351
+ }
2352
+
2353
+ /// Access message payload raw value
2354
+ pub fn raw ( & self ) -> & [ u8 ; 8 ] {
2355
+ & self . raw
2356
+ }
2357
+
2358
+ /// Foo
2359
+ ///
2360
+ /// - Min: -100
2361
+ /// - Max: 100
2362
+ /// - Unit: ""
2363
+ /// - Receivers: Vector__XXX
2364
+ #[ inline( always) ]
2365
+ pub fn foo ( & self ) -> i16 {
2366
+ self . foo_raw ( )
2367
+ }
2368
+
2369
+ /// Get raw value of Foo
2370
+ ///
2371
+ /// - Start bit: 0
2372
+ /// - Signal size: 12 bits
2373
+ /// - Factor: 1
2374
+ /// - Offset: 0
2375
+ /// - Byte order: LittleEndian
2376
+ /// - Value type: Signed
2377
+ #[ inline( always) ]
2378
+ pub fn foo_raw ( & self ) -> i16 {
2379
+ let signal = self . raw . view_bits :: < Lsb0 > ( ) [ 0 ..12 ] . load_le :: < i16 > ( ) ;
2380
+
2381
+ let factor = 1 ;
2382
+ let signal = signal as i16 ;
2383
+ i16:: from ( signal) . saturating_mul ( factor) . saturating_add ( 0 )
2384
+ }
2385
+
2386
+ /// Set value of Foo
2387
+ #[ inline( always) ]
2388
+ pub fn set_foo ( & mut self , value : i16 ) -> Result < ( ) , CanError > {
2389
+ if value < -100_i16 || 100_i16 < value {
2390
+ return Err ( CanError :: ParameterOutOfRange { message_id : 9002 } ) ;
2391
+ }
2392
+ let factor = 1 ;
2393
+ let value = value
2394
+ . checked_sub ( 0 )
2395
+ . ok_or ( CanError :: ParameterOutOfRange { message_id : 9002 } ) ?;
2396
+ let value = ( value / factor) as i16 ;
2397
+
2398
+ let value = u16:: from_ne_bytes ( value. to_ne_bytes ( ) ) ;
2399
+ self . raw . view_bits_mut :: < Lsb0 > ( ) [ 0 ..12 ] . store_le ( value) ;
2400
+ Ok ( ( ) )
2401
+ }
2402
+ }
2403
+
2404
+ impl core:: convert:: TryFrom < & [ u8 ] > for TruncatedLeSignal {
2405
+ type Error = CanError ;
2406
+
2407
+ #[ inline( always) ]
2408
+ fn try_from ( payload : & [ u8 ] ) -> Result < Self , Self :: Error > {
2409
+ if payload. len ( ) != 8 {
2410
+ return Err ( CanError :: InvalidPayloadSize ) ;
2411
+ }
2412
+ let mut raw = [ 0u8 ; 8 ] ;
2413
+ raw. copy_from_slice ( & payload[ ..8 ] ) ;
2414
+ Ok ( Self { raw } )
2415
+ }
2416
+ }
2417
+
2418
+ impl core:: fmt:: Debug for TruncatedLeSignal {
2419
+ fn fmt ( & self , f : & mut core:: fmt:: Formatter < ' _ > ) -> core:: fmt:: Result {
2420
+ if f. alternate ( ) {
2421
+ f. debug_struct ( "TruncatedLeSignal" )
2422
+ . field ( "foo" , & self . foo ( ) )
2423
+ . finish ( )
2424
+ } else {
2425
+ f. debug_tuple ( "TruncatedLeSignal" ) . field ( & self . raw ) . finish ( )
2426
+ }
2427
+ }
2428
+ }
2429
+
2430
+ #[ cfg( feature = "arb" ) ]
2431
+ impl < ' a > Arbitrary < ' a > for TruncatedLeSignal {
2432
+ fn arbitrary ( u : & mut Unstructured < ' a > ) -> Result < Self , arbitrary:: Error > {
2433
+ let foo = u. int_in_range ( -100 ..=100 ) ?;
2434
+ TruncatedLeSignal :: new ( foo) . map_err ( |_| arbitrary:: Error :: IncorrectFormat )
2435
+ }
2436
+ }
2437
+
2218
2438
/// This is just to make testing easier
2219
2439
#[ allow( dead_code) ]
2220
2440
fn main ( ) { }
0 commit comments