@@ -215,7 +215,6 @@ def __getitem_by_name(self, value):
215
215
value , ', ' .join (valid_values )))
216
216
217
217
def __getitem__ (self , key : Union [int , str ]) -> "PdoVariable" :
218
- var = None
219
218
if isinstance (key , int ):
220
219
# there is a maximum available of 8 slots per PDO map
221
220
if key in range (0 , 8 ):
@@ -360,7 +359,7 @@ def _raw_from(param):
360
359
subindex = (value >> 8 ) & 0xFF
361
360
# Ignore the highest bit, it is never valid for <= 64 PDO length
362
361
size = value & 0x7F
363
- if hasattr (self .pdo_node .node , "curtis_hack" ) and self . pdo_node . node . curtis_hack : # Curtis HACK: mixed up field order
362
+ if getattr (self .pdo_node .node , "curtis_hack" , False ) : # Curtis HACK: mixed up field order
364
363
index = value & 0xFFFF
365
364
subindex = (value >> 16 ) & 0xFF
366
365
size = (value >> 24 ) & 0x7F
@@ -371,8 +370,10 @@ def _raw_from(param):
371
370
372
371
def save (self ) -> None :
373
372
"""Save PDO configuration for this map using SDO."""
374
- logger .info ("Setting COB-ID 0x%X and temporarily disabling PDO" ,
375
- self .cob_id )
373
+ if self .cob_id is None :
374
+ logger .debug ("Skipping %s: no cob-id set" , self .com_record .od .name )
375
+ return
376
+ logger .info ("Setting COB-ID 0x%X and temporarily disabling PDO" , self .cob_id )
376
377
self .com_record [1 ].raw = self .cob_id | PDO_NOT_VALID | (RTR_NOT_ALLOWED if not self .rtr_allowed else 0x0 )
377
378
if self .trans_type is not None :
378
379
logger .info ("Setting transmission type to %d" , self .trans_type )
@@ -387,39 +388,38 @@ def save(self) -> None:
387
388
logger .info ("Setting SYNC start value to %d" , self .sync_start_value )
388
389
self .com_record [6 ].raw = self .sync_start_value
389
390
390
- if self .map is not None :
391
- try :
392
- self .map_array [0 ].raw = 0
393
- except SdoAbortedError :
394
- # WORKAROUND for broken implementations: If the array has a
395
- # fixed number of entries (count not writable), generate dummy
396
- # mappings for an invalid object 0x0000:00 to overwrite any
397
- # excess entries with all-zeros.
398
- self ._fill_map (self .map_array [0 ].raw )
399
- subindex = 1
400
- for var in self .map :
401
- logger .info ("Writing %s (0x%X:%d, %d bits) to PDO map" ,
402
- var .name , var .index , var .subindex , var .length )
403
- if hasattr (self .pdo_node .node , "curtis_hack" ) and self .pdo_node .node .curtis_hack : # Curtis HACK: mixed up field order
404
- self .map_array [subindex ].raw = (var .index |
405
- var .subindex << 16 |
406
- var .length << 24 )
407
- else :
408
- self .map_array [subindex ].raw = (var .index << 16 |
409
- var .subindex << 8 |
410
- var .length )
411
- subindex += 1
412
- try :
413
- self .map_array [0 ].raw = len (self .map )
414
- except SdoAbortedError as e :
415
- # WORKAROUND for broken implementations: If the array
416
- # number-of-entries parameter is not writable, we have already
417
- # generated the required number of mappings above.
418
- if e .code != 0x06010002 :
419
- # Abort codes other than "Attempt to write a read-only
420
- # object" should still be reported.
421
- raise
422
- self ._update_data_size ()
391
+ try :
392
+ self .map_array [0 ].raw = 0
393
+ except SdoAbortedError :
394
+ # WORKAROUND for broken implementations: If the array has a
395
+ # fixed number of entries (count not writable), generate dummy
396
+ # mappings for an invalid object 0x0000:00 to overwrite any
397
+ # excess entries with all-zeros.
398
+ self ._fill_map (self .map_array [0 ].raw )
399
+ subindex = 1
400
+ for var in self .map :
401
+ logger .info ("Writing %s (0x%X:%d, %d bits) to PDO map" ,
402
+ var .name , var .index , var .subindex , var .length )
403
+ if getattr (self .pdo_node .node , "curtis_hack" , False ): # Curtis HACK: mixed up field order
404
+ self .map_array [subindex ].raw = (var .index |
405
+ var .subindex << 16 |
406
+ var .length << 24 )
407
+ else :
408
+ self .map_array [subindex ].raw = (var .index << 16 |
409
+ var .subindex << 8 |
410
+ var .length )
411
+ subindex += 1
412
+ try :
413
+ self .map_array [0 ].raw = len (self .map )
414
+ except SdoAbortedError as e :
415
+ # WORKAROUND for broken implementations: If the array
416
+ # number-of-entries parameter is not writable, we have already
417
+ # generated the required number of mappings above.
418
+ if e .code != 0x06010002 :
419
+ # Abort codes other than "Attempt to write a read-only
420
+ # object" should still be reported.
421
+ raise
422
+ self ._update_data_size ()
423
423
424
424
if self .enabled :
425
425
self .com_record [1 ].raw = self .cob_id | (RTR_NOT_ALLOWED if not self .rtr_allowed else 0x0 )
@@ -521,7 +521,7 @@ def remote_request(self) -> None:
521
521
Silently ignore if not allowed.
522
522
"""
523
523
if self .enabled and self .rtr_allowed :
524
- self .pdo_node .network .send_message (self .cob_id , None , remote = True )
524
+ self .pdo_node .network .send_message (self .cob_id , bytes () , remote = True )
525
525
526
526
def wait_for_reception (self , timeout : float = 10 ) -> float :
527
527
"""Wait for the next transmit PDO.
@@ -600,7 +600,7 @@ def set_data(self, data: bytes):
600
600
cur_msg_data = cur_msg_data & bitwise_not
601
601
# Set the new data on the correct position
602
602
data = (data << bit_offset ) | cur_msg_data
603
- data = od_struct .pack_into (self .pdo_parent .data , byte_offset , data )
603
+ od_struct .pack_into (self .pdo_parent .data , byte_offset , data )
604
604
else :
605
605
self .pdo_parent .data [byte_offset :byte_offset + len (data )] = data
606
606
0 commit comments