1+ from __future__ import annotations
2+
13import logging
24from typing import Dict , Union
35
4- from canopen .node .base import BaseNode
5- from canopen .sdo import SdoServer , SdoAbortedError
6- from canopen .pdo import PDO , TPDO , RPDO
7- from canopen .nmt import NmtSlave
6+ import canopen .network
7+ from canopen import objectdictionary
88from canopen .emcy import EmcyProducer
9+ from canopen .nmt import NmtSlave
10+ from canopen .node .base import BaseNode
911from canopen .objectdictionary import ObjectDictionary
10- from canopen import objectdictionary
12+ from canopen .pdo import PDO , RPDO , TPDO
13+ from canopen .sdo import SdoAbortedError , SdoServer
14+
1115
1216logger = logging .getLogger (__name__ )
1317
@@ -34,7 +38,9 @@ def __init__(
3438 self .add_write_callback (self .nmt .on_write )
3539 self .emcy = EmcyProducer (0x80 + self .id )
3640
37- def associate_network (self , network ):
41+ def associate_network (self , network : canopen .network .Network ):
42+ if self .has_network ():
43+ raise RuntimeError ("Node is already associated with a network" )
3844 self .network = network
3945 self .sdo .network = network
4046 self .tpdo .network = network
@@ -44,15 +50,17 @@ def associate_network(self, network):
4450 network .subscribe (self .sdo .rx_cobid , self .sdo .on_request )
4551 network .subscribe (0 , self .nmt .on_command )
4652
47- def remove_network (self ):
53+ def remove_network (self ) -> None :
54+ if not self .has_network ():
55+ return
4856 self .network .unsubscribe (self .sdo .rx_cobid , self .sdo .on_request )
4957 self .network .unsubscribe (0 , self .nmt .on_command )
50- self .network = None
51- self .sdo .network = None
52- self .tpdo .network = None
53- self .rpdo .network = None
54- self .nmt .network = None
55- self .emcy .network = None
58+ self .network = canopen . network . _UNINITIALIZED_NETWORK
59+ self .sdo .network = canopen . network . _UNINITIALIZED_NETWORK
60+ self .tpdo .network = canopen . network . _UNINITIALIZED_NETWORK
61+ self .rpdo .network = canopen . network . _UNINITIALIZED_NETWORK
62+ self .nmt .network = canopen . network . _UNINITIALIZED_NETWORK
63+ self .emcy .network = canopen . network . _UNINITIALIZED_NETWORK
5664
5765 def add_read_callback (self , callback ):
5866 self ._read_callbacks .append (callback )
0 commit comments