@@ -17,17 +17,6 @@ class LSSState(IntEnum):
1717 CONFIGURATION = 1
1818
1919
20- def check_length (length : int ):
21- """ Decorator for cmd_ methods checking the expected packet length """
22- def wrap (cmd_method ):
23- def wrapped_cmd (self , msg : bytes ):
24- if len (msg ) == length :
25- return cmd_method (self , msg )
26- log .info ('LSS got packet with wrong length {msg!r}, expected {length} bytes' )
27- return wrapped_cmd
28- return wrap
29-
30-
3120class LSSSlave :
3221 def __init__ (self , node : "Node" ):
3322 self ._node = node
@@ -62,7 +51,7 @@ def _get_own_address(self):
6251
6352 def handle_msg (self , _cob_id : int , msg : bytes ):
6453 if len (msg ) < 1 :
65- log .info (f'LSS got packet with wrong length { msg !r} ' )
54+ log .debug (f'LSS got packet with wrong length { msg !r} ' )
6655 return
6756
6857 cs = msg [0 ]
@@ -75,16 +64,17 @@ def handle_msg(self, _cob_id: int, msg: bytes):
7564 if method is None :
7665 return
7766
78- method (self , msg )
67+ try :
68+ method (self , msg )
69+ except (IndexError , struct .error ):
70+ log .debug (f'LSS got packet with wrong length { msg !r} ' )
7971
80- @check_length (2 )
8172 def cmd_switch_mode_global_configuration (self , msg : bytes ):
8273 if msg [1 ] != 1 : # check if requested mode is CONFIGURATION
8374 return
8475
8576 self ._state = LSSState .CONFIGURATION
8677
87- @check_length (2 )
8878 def cmd_switch_mode_global_waiting (self , msg : bytes ):
8979 if msg [1 ] != 0 : # check if requested mode is WAITING
9080 return
@@ -94,7 +84,6 @@ def cmd_switch_mode_global_waiting(self, msg: bytes):
9484
9585 self ._state = LSSState .WAITING
9686
97- @check_length (6 )
9887 def cmd_switch_mode_selective (self , msg : bytes ):
9988 index = msg [0 ] - 0x40
10089
@@ -111,19 +100,16 @@ def cmd_switch_mode_selective(self, msg: bytes):
111100
112101 self ._received_selective_address = [None ] * 4
113102
114- @check_length (1 )
115103 def cmd_inquire_identity (self , msg : bytes ):
116104 index = msg [0 ] - 0x5A
117105 value = self ._get_own_address ()[index ]
118106 self ._node .network .send (0x7E4 , msg [:1 ] + value .to_bytes (4 , "little" ) + bytes (3 ))
119107
120- @check_length (1 )
121108 def cmd_inquire_node_id (self , _msg : bytes ):
122109 self ._node .network .send (
123110 0x7E4 , b"\x5e " + self ._node .node_id .to_bytes (1 , "little" ) + bytes (6 )
124111 )
125112
126- @check_length (2 )
127113 def cmd_configure_node_id (self , msg : bytes ):
128114 node_id = msg [1 ]
129115
@@ -137,7 +123,6 @@ def cmd_configure_node_id(self, msg: bytes):
137123 0x7E4 , b"\x11 " + result .to_bytes (1 , "little" ) + bytes (6 )
138124 )
139125
140- @check_length (4 )
141126 def cmd_configure_bit_timing (self , msg : bytes ):
142127 valid_table_entries = (0 , 1 , 2 , 3 , 4 , 6 , 7 , 8 )
143128 selector , index = msg [1 :3 ]
@@ -153,7 +138,6 @@ def cmd_configure_bit_timing(self, msg: bytes):
153138 self ._pending_baudrate = index
154139 self ._node .network .send (0x7E4 , b"\x13 \x00 " + bytes (6 ))
155140
156- @check_length (4 )
157141 def cmd_activate_bit_timing (self , msg : bytes ):
158142 delay = int .from_bytes (msg [1 :3 ], "little" ) / 1000 # [seconds]
159143
@@ -166,12 +150,10 @@ def _change_baudrate(self, delay: float):
166150 self ._pending_baudrate = None
167151 get_scheduler ().add (delay , self ._node .nmt .reset )
168152
169- @check_length (1 )
170153 def cmd_store_configuration (self , _msg : bytes ):
171154 # store configuration is not supported
172155 self ._node .network .send (0x7E4 , b"\x17 \x01 " + bytes (6 ))
173156
174- @check_length (6 )
175157 def cmd_identify_remote_responders (self , msg : bytes ):
176158 index = msg [0 ] - 0x46
177159 value = int .from_bytes (msg [1 :5 ], "little" )
@@ -195,12 +177,10 @@ def cmd_identify_remote_responders(self, msg: bytes):
195177
196178 self ._remote_responder_address = [None ] * 6
197179
198- @check_length (1 )
199180 def cmd_identify_nonconfigured_remote_responders (self , _msg : bytes ):
200181 if self ._node .node_id == 0xFF :
201182 self ._node .network .send (0x7E4 , b"\x50 " + bytes (7 ))
202183
203- @check_length (5 )
204184 def cmd_fastscan (self , msg : bytes ):
205185 if self ._node .node_id != 0xFF :
206186 return
0 commit comments