diff --git a/canopen/network.py b/canopen/network.py index e886b655..31584085 100644 --- a/canopen/network.py +++ b/canopen/network.py @@ -25,6 +25,9 @@ class Network(MutableMapping): """Representation of one CAN bus containing one or more nodes.""" + NOTIFIER_CYCLE: float = 1.0 #: Maximum waiting time for one notifier iteration. + NOTIFIER_SHUTDOWN_TIMEOUT: float = 5.0 #: Maximum waiting time to stop notifiers. + def __init__(self, bus: Optional[can.BusABC] = None): """ :param can.BusABC bus: @@ -105,7 +108,7 @@ def connect(self, *args, **kwargs) -> Network: if self.bus is None: self.bus = can.Bus(*args, **kwargs) logger.info("Connected to '%s'", self.bus.channel_info) - self.notifier = can.Notifier(self.bus, self.listeners, 1) + self.notifier = can.Notifier(self.bus, self.listeners, self.NOTIFIER_CYCLE) return self def disconnect(self) -> None: @@ -117,7 +120,7 @@ def disconnect(self) -> None: if hasattr(node, "pdo"): node.pdo.stop() if self.notifier is not None: - self.notifier.stop() + self.notifier.stop(self.NOTIFIER_SHUTDOWN_TIMEOUT) if self.bus is not None: self.bus.shutdown() self.bus = None diff --git a/test/test_emcy.py b/test/test_emcy.py index a09b8eb9..b8d7b4e1 100644 --- a/test/test_emcy.py +++ b/test/test_emcy.py @@ -185,6 +185,7 @@ def setUp(self): self.txbus = can.Bus(interface="virtual") self.rxbus = can.Bus(interface="virtual") self.net = canopen.Network(self.txbus) + self.net.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 self.net.connect() self.emcy = canopen.emcy.EmcyProducer(0x80 + 1) self.emcy.network = self.net diff --git a/test/test_local.py b/test/test_local.py index 9c5fc0c1..5f7929c9 100644 --- a/test/test_local.py +++ b/test/test_local.py @@ -13,10 +13,12 @@ class TestSDO(unittest.TestCase): @classmethod def setUpClass(cls): cls.network1 = canopen.Network() + cls.network1.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 cls.network1.connect("test", interface="virtual") cls.remote_node = cls.network1.add_node(2, SAMPLE_EDS) cls.network2 = canopen.Network() + cls.network2.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 cls.network2.connect("test", interface="virtual") cls.local_node = cls.network2.create_node(2, SAMPLE_EDS) @@ -176,10 +178,12 @@ class TestPDO(unittest.TestCase): @classmethod def setUpClass(cls): cls.network1 = canopen.Network() + cls.network1.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 cls.network1.connect("test", interface="virtual") cls.remote_node = cls.network1.add_node(2, SAMPLE_EDS) cls.network2 = canopen.Network() + cls.network2.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 cls.network2.connect("test", interface="virtual") cls.local_node = cls.network2.create_node(2, SAMPLE_EDS) diff --git a/test/test_network.py b/test/test_network.py index a87954d3..3a59a597 100644 --- a/test/test_network.py +++ b/test/test_network.py @@ -11,6 +11,7 @@ class TestNetwork(unittest.TestCase): def setUp(self): self.network = canopen.Network() + self.network.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 def test_network_add_node(self): # Add using str. @@ -328,6 +329,7 @@ def test_scanner_search(self): self.addCleanup(txbus.shutdown) net = canopen.Network(txbus) + net.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 net.connect() self.addCleanup(net.disconnect) @@ -347,6 +349,7 @@ def test_scanner_search(self): def test_scanner_search_limit(self): bus = can.Bus(interface="virtual", receive_own_messages=True) net = canopen.Network(bus) + net.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 net.connect() self.addCleanup(net.disconnect) diff --git a/test/test_nmt.py b/test/test_nmt.py index 059e1982..ae295435 100644 --- a/test/test_nmt.py +++ b/test/test_nmt.py @@ -52,6 +52,7 @@ def setUp(self): receive_own_messages=True, ) net = canopen.Network(bus) + net.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 net.connect() with self.assertLogs(): node = net.add_node(self.NODE_ID, SAMPLE_EDS) @@ -127,11 +128,13 @@ def test_nmt_master_node_guarding(self): class TestNmtSlave(unittest.TestCase): def setUp(self): self.network1 = canopen.Network() + self.network1.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 self.network1.connect("test", interface="virtual") with self.assertLogs(): self.remote_node = self.network1.add_node(2, SAMPLE_EDS) self.network2 = canopen.Network() + self.network2.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 self.network2.connect("test", interface="virtual") with self.assertLogs(): self.local_node = self.network2.create_node(2, SAMPLE_EDS) diff --git a/test/test_sdo.py b/test/test_sdo.py index f399a33f..d3d0dfb6 100644 --- a/test/test_sdo.py +++ b/test/test_sdo.py @@ -31,6 +31,7 @@ def _send_message(self, can_id, data, remote=False): def setUp(self): network = canopen.Network() + network.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 network.send_message = self._send_message node = network.add_node(2, SAMPLE_EDS) node.sdo.RESPONSE_TIMEOUT = 0.01 @@ -181,6 +182,7 @@ def _send_message(self, can_id, data, remote=False): def setUp(self): network = canopen.Network() + network.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 network.send_message = self._send_message node = network.add_node(2, DATATYPES_EDS) node.sdo.RESPONSE_TIMEOUT = 0.01 diff --git a/test/test_sync.py b/test/test_sync.py index 2ff3e9d3..f376d2a1 100644 --- a/test/test_sync.py +++ b/test/test_sync.py @@ -12,6 +12,7 @@ class TestSync(unittest.TestCase): def setUp(self): self.net = canopen.Network() + self.net.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 self.net.connect(interface="virtual") self.sync = canopen.sync.SyncProducer(self.net) self.rxbus = can.Bus(interface="virtual") diff --git a/test/test_time.py b/test/test_time.py index a5922442..71a84622 100644 --- a/test/test_time.py +++ b/test/test_time.py @@ -6,6 +6,7 @@ class TestTime(unittest.TestCase): def test_time_producer(self): network = canopen.Network() + network.NOTIFIER_SHUTDOWN_TIMEOUT = 0.0 network.connect(interface="virtual", receive_own_messages=True) producer = canopen.timestamp.TimeProducer(network) producer.transmit(1486236238)