[go: nahoru, domu]

Skip to content

Commit

Permalink
signal.lsb
Browse files Browse the repository at this point in the history
  • Loading branch information
erzoe committed Jun 29, 2021
1 parent 24a2fea commit dd7137a
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 1 deletion.
25 changes: 24 additions & 1 deletion cantools/database/can/signal.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,10 @@ def name(self, value):

@property
def start(self):
"""The start bit position of the signal within its message.
"""The start bit position of the signal within its message as it is saved in the dbc file.
lsb in case of little_endian,
msb in case of big_endian.
"""

return self._start
Expand All @@ -184,6 +186,27 @@ def start(self):
def start(self, value):
self._start = value

@property
def lsb(self):
"""The Startbit as displayed in Vector CANdb++.
The position of the least significant bit of this signal.
This is equivalent to start iff byte_order == little_endian.
"""

if self.byte_order == 'big_endian':
i = self.start
for j in range(self.length-1):
if i % 8 == 0:
i += 16
i -= 1
return i
elif self.byte_order == 'little_endian':
return self.start
else:
raise ValueError("invalid value for byte_order: %s" % self.byte_order)


@property
def length(self):
"""The length of the signal in bits.
Expand Down
109 changes: 109 additions & 0 deletions tests/test_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -4638,6 +4638,115 @@ def test_bus_comment(self):
self.assert_dbc_dump(db, filename)


def test_lsb(self):
filename = 'tests/files/dbc/signed.dbc'
db = cantools.database.load_file(filename)
msg = db.get_message_by_name('Message378910')
msg_sigs = (
(
'Message378910',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s7', 1, 7),
('s8big', 9, 8),
('s9', 17, 9),
('s8', 26, 8),
('s3', 34, 3),
('s3big', 37, 3),
('s7big', 56, 7),
('s10big', 63, 10),
)
),
(
'Message64',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s64', 0, 64),
)
),
(
'Message64big',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s64big', 56, 64),
)
),
(
'Message63',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s63', 0, 63),
)
),
(
'Message63big',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s63big', 57, 63),
)
),
(
'Message63_1',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s63', 1, 63),
)
),
(
'Message63big_1',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s63big', 56, 63),
)
),
(
'Message33',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s33', 0, 33),
)
),
(
'Message33big',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s33big', 39, 33),
)
),
(
'Message32',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s32', 0, 32),
)
),
(
'Message32big',
(
# data as displayed in CANdb++ Editor
# Name, Startbit, Length
('s32big', 24, 32),
)
),
)
for msg, signal_lsb_len in msg_sigs:
msg = db.get_message_by_name(msg)
for sig, expected_lsb, length in signal_lsb_len:
sig = msg.get_signal_by_name(sig)
self.assertEqual(sig.length, length)
self.assertEqual(sig.lsb, expected_lsb, f'{msg.name}.{sig.name} wrong value for lsb')


# This file is not '__main__' when executed via 'python setup.py3
# test'.
logging.basicConfig(level=logging.DEBUG)
Expand Down

0 comments on commit dd7137a

Please sign in to comment.