Skip to content

Commit 1be9102

Browse files
committed
Migrate to vars access methods and deprecate attr
1 parent b48c472 commit 1be9102

File tree

6 files changed

+45
-41
lines changed

6 files changed

+45
-41
lines changed

canopen/nmt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ def send_command(self, code: int) -> None:
230230
# The heartbeat service should start on the transition
231231
# between INITIALIZING and PRE-OPERATIONAL state
232232
if old_state == 0 and self._state == 127:
233-
heartbeat_time_ms = self._local_node.sdo[0x1017].raw
233+
heartbeat_time_ms = self._local_node.sdo[0x1017].get_raw()
234234
self.start_heartbeat(heartbeat_time_ms)
235235
else:
236236
self.update_heartbeat()

canopen/node/remote.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,9 @@ def __load_configuration_helper(self, index, subindex, name, value):
135135
subindex=subindex,
136136
name=name,
137137
value=value)))
138-
self.sdo[index][subindex].raw = value
138+
self.sdo[index][subindex].set_raw(value)
139139
else:
140-
self.sdo[index].raw = value
140+
self.sdo[index].set_raw(value)
141141
logger.info(str('SDO [{index:#06x}]: {name}: {value:#06x}'.format(
142142
index=index,
143143
name=name,

canopen/pdo/base.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -343,41 +343,41 @@ def add_callback(self, callback: Callable[["Map"], None]) -> None:
343343

344344
def read(self) -> None:
345345
"""Read PDO configuration for this map using SDO."""
346-
cob_id = self.com_record[1].raw
346+
cob_id = self.com_record[1].get_raw()
347347
self.cob_id = cob_id & 0x1FFFFFFF
348348
logger.info("COB-ID is 0x%X", self.cob_id)
349349
self.enabled = cob_id & PDO_NOT_VALID == 0
350350
logger.info("PDO is %s", "enabled" if self.enabled else "disabled")
351351
self.rtr_allowed = cob_id & RTR_NOT_ALLOWED == 0
352352
logger.info("RTR is %s", "allowed" if self.rtr_allowed else "not allowed")
353-
self.trans_type = self.com_record[2].raw
353+
self.trans_type = self.com_record[2].get_raw()
354354
logger.info("Transmission type is %d", self.trans_type)
355355
if self.trans_type >= 254:
356356
try:
357-
self.inhibit_time = self.com_record[3].raw
357+
self.inhibit_time = self.com_record[3].get_raw()
358358
except (KeyError, SdoAbortedError) as e:
359359
logger.info("Could not read inhibit time (%s)", e)
360360
else:
361361
logger.info("Inhibit time is set to %d ms", self.inhibit_time)
362362

363363
try:
364-
self.event_timer = self.com_record[5].raw
364+
self.event_timer = self.com_record[5].get_raw()
365365
except (KeyError, SdoAbortedError) as e:
366366
logger.info("Could not read event timer (%s)", e)
367367
else:
368368
logger.info("Event timer is set to %d ms", self.event_timer)
369369

370370
try:
371-
self.sync_start_value = self.com_record[6].raw
371+
self.sync_start_value = self.com_record[6].get_raw()
372372
except (KeyError, SdoAbortedError) as e:
373373
logger.info("Could not read SYNC start value (%s)", e)
374374
else:
375375
logger.info("SYNC start value is set to %d ms", self.sync_start_value)
376376

377377
self.clear()
378-
nof_entries = self.map_array[0].raw
378+
nof_entries = self.map_array[0].get_raw()
379379
for subindex in range(1, nof_entries + 1):
380-
value = self.map_array[subindex].raw
380+
value = self.map_array[subindex].get_raw()
381381
index = value >> 16
382382
subindex = (value >> 8) & 0xFF
383383
size = value & 0xFF
@@ -443,44 +443,44 @@ def save(self) -> None:
443443
"""Save PDO configuration for this map using SDO."""
444444
logger.info("Setting COB-ID 0x%X and temporarily disabling PDO",
445445
self.cob_id)
446-
self.com_record[1].raw = self.cob_id | PDO_NOT_VALID | (RTR_NOT_ALLOWED if not self.rtr_allowed else 0x0)
446+
self.com_record[1].set_raw(self.cob_id | PDO_NOT_VALID | (RTR_NOT_ALLOWED if not self.rtr_allowed else 0x0))
447447
if self.trans_type is not None:
448448
logger.info("Setting transmission type to %d", self.trans_type)
449-
self.com_record[2].raw = self.trans_type
449+
self.com_record[2].set_raw(self.trans_type)
450450
if self.inhibit_time is not None:
451451
logger.info("Setting inhibit time to %d us", (self.inhibit_time * 100))
452-
self.com_record[3].raw = self.inhibit_time
452+
self.com_record[3].set_raw(self.inhibit_time)
453453
if self.event_timer is not None:
454454
logger.info("Setting event timer to %d ms", self.event_timer)
455-
self.com_record[5].raw = self.event_timer
455+
self.com_record[5].set_raw(self.event_timer)
456456
if self.sync_start_value is not None:
457457
logger.info("Setting SYNC start value to %d", self.sync_start_value)
458-
self.com_record[6].raw = self.sync_start_value
458+
self.com_record[6].set_raw(self.sync_start_value)
459459

460460
if self.map is not None:
461461
try:
462-
self.map_array[0].raw = 0
462+
self.map_array[0].set_raw(0)
463463
except SdoAbortedError:
464464
# WORKAROUND for broken implementations: If the array has a
465465
# fixed number of entries (count not writable), generate dummy
466466
# mappings for an invalid object 0x0000:00 to overwrite any
467467
# excess entries with all-zeros.
468-
self._fill_map(self.map_array[0].raw)
468+
self._fill_map(self.map_array[0].get_raw())
469469
subindex = 1
470470
for var in self.map:
471471
logger.info("Writing %s (0x%X:%d, %d bits) to PDO map",
472472
var.name, var.index, var.subindex, var.length)
473473
if hasattr(self.pdo_node.node, "curtis_hack") and self.pdo_node.node.curtis_hack: # Curtis HACK: mixed up field order
474-
self.map_array[subindex].raw = (var.index |
475-
var.subindex << 16 |
476-
var.length << 24)
474+
self.map_array[subindex].set_raw(var.index |
475+
var.subindex << 16 |
476+
var.length << 24)
477477
else:
478-
self.map_array[subindex].raw = (var.index << 16 |
479-
var.subindex << 8 |
480-
var.length)
478+
self.map_array[subindex].set_raw(var.index << 16 |
479+
var.subindex << 8 |
480+
var.length)
481481
subindex += 1
482482
try:
483-
self.map_array[0].raw = len(self.map)
483+
self.map_array[0].set_raw(len(self.map))
484484
except SdoAbortedError as e:
485485
# WORKAROUND for broken implementations: If the array
486486
# number-of-entries parameter is not writable, we have already
@@ -492,7 +492,7 @@ def save(self) -> None:
492492
self._update_data_size()
493493

494494
if self.enabled:
495-
self.com_record[1].raw = self.cob_id | (RTR_NOT_ALLOWED if not self.rtr_allowed else 0x0)
495+
self.com_record[1].set_raw(self.cob_id | (RTR_NOT_ALLOWED if not self.rtr_allowed else 0x0))
496496
self.subscribe()
497497

498498
def subscribe(self) -> None:

canopen/profiles/p402.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ def op_mode(self):
402402
code = self.tpdo_values[0x6061]
403403
except KeyError:
404404
logger.warning('The object 0x6061 is not a configured TPDO, fallback to SDO')
405-
code = self.sdo[0x6061].raw
405+
code = self.sdo[0x6061].get_raw()
406406
return OperationMode.CODE2NAME[code]
407407

408408
@op_mode.setter
@@ -414,12 +414,12 @@ def op_mode(self, mode):
414414
'Operation mode {m} not suppported on node {n}.'.format(n=self.id, m=mode))
415415
# Update operation mode in RPDO if possible, fall back to SDO
416416
if 0x6060 in self.rpdo_pointers:
417-
self.rpdo_pointers[0x6060].raw = OperationMode.NAME2CODE[mode]
417+
self.rpdo_pointers[0x6060].set_raw(OperationMode.NAME2CODE[mode])
418418
pdo = self.rpdo_pointers[0x6060].pdo_parent
419419
if not pdo.is_periodic:
420420
pdo.transmit()
421421
else:
422-
self.sdo[0x6060].raw = OperationMode.NAME2CODE[mode]
422+
self.sdo[0x6060].set_raw(OperationMode.NAME2CODE[mode])
423423
timeout = time.monotonic() + self.TIMEOUT_SWITCH_OP_MODE
424424
while self.op_mode != mode:
425425
if time.monotonic() > timeout:
@@ -436,7 +436,7 @@ def _clear_target_values(self):
436436
# [target velocity, target position, target torque]
437437
for target_index in [0x60FF, 0x607A, 0x6071]:
438438
if target_index in self.sdo.keys():
439-
self.sdo[target_index].raw = 0
439+
self.sdo[target_index].set_raw(0)
440440

441441
def is_op_mode_supported(self, mode):
442442
"""Check if the operation mode is supported by the node.
@@ -450,7 +450,7 @@ def is_op_mode_supported(self, mode):
450450
"""
451451
if not hasattr(self, '_op_mode_support'):
452452
# Cache value only on first lookup, this object should never change.
453-
self._op_mode_support = self.sdo[0x6502].raw
453+
self._op_mode_support = self.sdo[0x6502].get_raw()
454454
logger.info('Caching node {n} supported operation modes 0x{m:04X}'.format(
455455
n=self.id, m=self._op_mode_support))
456456
bits = OperationMode.SUPPORTED[mode]
@@ -463,7 +463,7 @@ def on_TPDOs_update_callback(self, mapobject):
463463
:type mapobject: canopen.pdo.Map
464464
"""
465465
for obj in mapobject:
466-
self.tpdo_values[obj.index] = obj.raw
466+
self.tpdo_values[obj.index] = obj.get_raw()
467467

468468
@property
469469
def statusword(self):
@@ -477,7 +477,7 @@ def statusword(self):
477477
return self.tpdo_values[0x6041]
478478
except KeyError:
479479
logger.warning('The object 0x6041 is not a configured TPDO, fallback to SDO')
480-
return self.sdo[0x6041].raw
480+
return self.sdo[0x6041].get_raw()
481481

482482
def check_statusword(self, timeout=None):
483483
"""Report an up-to-date reading of the statusword (0x6041) from the device.
@@ -512,12 +512,12 @@ def controlword(self):
512512
def controlword(self, value):
513513
logger.warning("Accessing BaseNode402.controlword setter is deprecated")
514514
if 0x6040 in self.rpdo_pointers:
515-
self.rpdo_pointers[0x6040].raw = value
515+
self.rpdo_pointers[0x6040].set_raw(value)
516516
pdo = self.rpdo_pointers[0x6040].pdo_parent
517517
if not pdo.is_periodic:
518518
pdo.transmit()
519519
else:
520-
self.sdo[0x6040].raw = value
520+
self.sdo[0x6040].set_raw(value)
521521

522522
@property
523523
def state(self):

canopen/sdo/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def __iter__(self) -> Iterable[int]:
127127
return iter(range(1, len(self) + 1))
128128

129129
def __len__(self) -> int:
130-
return self[0].raw
130+
return self[0].get_raw()
131131

132132
def __contains__(self, subindex: int) -> bool:
133133
return 0 <= subindex <= len(self)

canopen/variable.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def get_raw(self) -> Union[int, bool, float, str, bytes]:
8787
return self._get_raw(self.get_data())
8888

8989
async def aget_raw(self) -> Union[int, bool, float, str, bytes]:
90+
"""Raw representation of the object, async variant"""
9091
return self._get_raw(await self.aget_data())
9192

9293
def _get_raw(self, data: bytes) -> Union[int, bool, float, str, bytes]:
@@ -101,7 +102,7 @@ def _get_raw(self, data: bytes) -> Union[int, bool, float, str, bytes]:
101102

102103
@raw.setter
103104
def raw(self, value: Union[int, bool, float, str, bytes]):
104-
logger.warning("Accessing Variable.data setter is deprecated")
105+
logger.warning("Accessing Variable.raw setter is deprecated")
105106
self.set_raw(value)
106107

107108
def set_raw(self, value: Union[int, bool, float, str, bytes]):
@@ -174,6 +175,9 @@ def desc(self, desc: str):
174175
def set_desc(self, desc: str):
175176
self.set_raw(self.od.encode_desc(desc))
176177

178+
async def aset_desc(self, desc: str):
179+
await self.aset_raw(self.od.encode_desc(desc))
180+
177181
@property
178182
def bits(self) -> "Bits":
179183
"""Access bits using integers, slices, or bit descriptions."""
@@ -223,11 +227,11 @@ def write(
223227
- 'desc'
224228
"""
225229
if fmt == "raw":
226-
self.raw = value
230+
self.set_raw(value)
227231
elif fmt == "phys":
228-
self.phys = value
232+
self.set_phys(value)
229233
elif fmt == "desc":
230-
self.desc = value
234+
self.set_desc(value)
231235

232236
async def awrite(
233237
self, value: Union[int, bool, float, str, bytes], fmt: str = "raw"
@@ -281,7 +285,7 @@ def __len__(self):
281285
return len(self.variable.od.bit_definitions)
282286

283287
def read(self):
284-
self.raw = self.variable.raw
288+
self.raw = self.variable.get_raw()
285289

286290
def write(self):
287-
self.variable.raw = self.raw
291+
self.variable.set_raw(self.raw)

0 commit comments

Comments
 (0)