Actions
Feature #27
closedcanbus-binding: add support for per-signal endianness (was: Little endian encoded uint16 are not properly decoded by canbus-binding)
Start date:
08/16/2022
Due date:
% Done:
0%
Estimated time:
Hardware platform:
Desktop SDK (openSUSE Leap 15.3)
OS Affects Version/s:
arz-1.0
OS Fix Version/s:
arz-1.0.1
Labels:
Description
Canplayer was used to send message 0x601 = 0x010203 to canbus-binding (can0 601 [3] 01 02 03).
Here's the definition of message 0x601 (3 bytes in total, 1 uint8 followed by a uint16):
"0x601": { "name": "EMOJY.SysInfo.ConvertersDC", "bus": "hs", "length": 3, "is_fd": false, "is_j1939": false, "is_extended": false, "byte_frame_is_big_endian": false, "bit_position_reversed": false, "signals": { "idConvertersDC": { "name": "EMOJY.SysInfo.ConvertersDC.idConvertersDC", "bit_position": 0, "bit_size": 8, "factor": 1, "offset": 1, "writable": false, "unit": "N/A", "min_value": 1, "max_value": 2 }, "softwareVersion": { "name": "EMOJY.SysInfo.ConvertersDC.softwareVersion", "bit_position": 8, "bit_size": 16, "factor": 1, "offset": 0, "writable": false, "unit": "N/A", "min_value": 0, "max_value": 65535 } } }
The expected values are:
- for EMOJY.SysInfo.ConvertersDC.idConvertersDC: 2, because the value sent is 0x01, the factor is 1 and the offset is 1.
- for EMOJY.SysInfo.ConvertersDC.softwareVersion: 770, because the value sent is 0x0203 in little endian, the factor is 1 and the offset 0.
Here're canbus-binding logs:
<sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Data available: 16 bytes read. BCM head, opcode: 12, can_id: 1537, nframes: 1 <sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Got a legacy CAN frame <sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Found id: 601, format: 0, length: 3, data 0102030000000000 <sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Here is the next can message : id 1537 length 3, data 12300000 <sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Decoded message from parse_signal_bitfield: 515.000000 <sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Emojy_v1.5/ CAN signals processed.
EMOJY.SysInfo.ConvertersDC.softwareVersion is decoded as 515 (0x0203) instead of 770 (0x0302).
<sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Here is the next can message : id 1537 length 3, data 12300000 <sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Decoded message from parse_signal_bitfield: 2.000000 <sup>[[95mDEBUG<sup>[[0m:</sup></sup> <sup>[[1m[API</sup> canbus]<sup>[[0m</sup> Emojy_v1.5/EMOJY.SysInfo.ConvertersDC.idConvertersDC CAN signals processed.
EMOJY.SysInfo.ConvertersDC.idConvertersDC is decoded as 2 as expected.
Actions