Skip to content

Commit a28ef27

Browse files
Do not use Listener interface for NodeScanner class
1 parent db5f1d4 commit a28ef27

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

canopen/network.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def __init__(self, bus=None):
3838
self.scanner = NodeScanner(self)
3939
#: List of :class:`can.Listener` objects.
4040
#: Includes at least MessageListener.
41-
self.listeners = [MessageListener(self), self.scanner]
41+
self.listeners = [MessageListener(self)]
4242
self.notifier = None
4343
self.nodes = {}
4444
self.subscribers = {}
@@ -179,6 +179,7 @@ def notify(self, can_id, data, timestamp):
179179
if can_id in self.subscribers:
180180
callback = self.subscribers[can_id]
181181
callback(can_id, data, timestamp)
182+
self.scanner.on_message_received(can_id)
182183

183184
def __getitem__(self, node_id):
184185
return self.nodes[node_id]
@@ -220,7 +221,7 @@ def on_message_received(self, msg):
220221
logger.error(str(e))
221222

222223

223-
class NodeScanner(Listener):
224+
class NodeScanner(object):
224225
"""Observes which nodes are present on the bus.
225226
226227
Listens for the following messages:
@@ -243,12 +244,9 @@ def __init__(self, network=None):
243244
#: A :class:`list` of nodes discovered
244245
self.nodes = []
245246

246-
def on_message_received(self, msg):
247-
if (not self.active or msg.is_error_frame or msg.is_remote_frame or
248-
msg.is_extended_id):
249-
return
250-
service = msg.arbitration_id & 0x780
251-
node_id = msg.arbitration_id & 0x7F
247+
def on_message_received(self, can_id):
248+
service = can_id & 0x780
249+
node_id = can_id & 0x7F
252250
if node_id not in self.nodes and node_id != 0 and service in self.SERVICES:
253251
self.nodes.append(node_id)
254252

test/test_network.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ def test_notify(self):
2929
self.assertEqual(len(node.emcy.active), 1)
3030
self.network.notify(0x702, b'\x05', 1473418396.0)
3131
self.assertEqual(node.nmt.state, 'OPERATIONAL')
32+
self.assertListEqual(self.network.scanner.nodes, [2])
3233

3334

3435
class TestScanner(unittest.TestCase):
3536

3637
def test_passive_scanning(self):
3738
scanner = canopen.network.NodeScanner()
38-
scanner(can.Message(arbitration_id=0x586, extended_id=False))
39-
scanner(can.Message(arbitration_id=0x587, extended_id=False))
40-
scanner(can.Message(arbitration_id=0x586, extended_id=False))
41-
scanner(can.Message(arbitration_id=0x588, extended_id=True))
39+
scanner.on_message_received(0x586)
40+
scanner.on_message_received(0x587)
41+
scanner.on_message_received(0x586)
4242
self.assertListEqual(scanner.nodes, [6, 7])

0 commit comments

Comments
 (0)