Skip to content

Commit 5418054

Browse files
authored
Implement reading PDO from OD (#273) (#370)
1 parent 0285f58 commit 5418054

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

canopen/pdo/base.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ def __getitem__(self, key):
5050
def __len__(self):
5151
return len(self.map)
5252

53-
def read(self):
53+
def read(self, from_od=False):
5454
"""Read PDO configuration from node using SDO."""
5555
for pdo_map in self.map.values():
56-
pdo_map.read()
56+
pdo_map.read(from_od=from_od)
5757

5858
def save(self):
5959
"""Save PDO configuration to node using SDO."""
@@ -313,43 +313,49 @@ def add_callback(self, callback: Callable[["Map"], None]) -> None:
313313
"""
314314
self.callbacks.append(callback)
315315

316-
def read(self) -> None:
316+
def read(self, from_od=False) -> None:
317317
"""Read PDO configuration for this map using SDO."""
318-
cob_id = self.com_record[1].raw
318+
319+
def _raw_from(param):
320+
if from_od:
321+
return param.od.default
322+
return param.raw
323+
324+
cob_id = _raw_from(self.com_record[1])
319325
self.cob_id = cob_id & 0x1FFFFFFF
320326
logger.info("COB-ID is 0x%X", self.cob_id)
321327
self.enabled = cob_id & PDO_NOT_VALID == 0
322328
logger.info("PDO is %s", "enabled" if self.enabled else "disabled")
323329
self.rtr_allowed = cob_id & RTR_NOT_ALLOWED == 0
324330
logger.info("RTR is %s", "allowed" if self.rtr_allowed else "not allowed")
325-
self.trans_type = self.com_record[2].raw
331+
self.trans_type = _raw_from(self.com_record[2])
326332
logger.info("Transmission type is %d", self.trans_type)
327333
if self.trans_type >= 254:
328334
try:
329-
self.inhibit_time = self.com_record[3].raw
335+
self.inhibit_time = _raw_from(self.com_record[3])
330336
except (KeyError, SdoAbortedError) as e:
331337
logger.info("Could not read inhibit time (%s)", e)
332338
else:
333339
logger.info("Inhibit time is set to %d ms", self.inhibit_time)
334340

335341
try:
336-
self.event_timer = self.com_record[5].raw
342+
self.event_timer = _raw_from(self.com_record[5])
337343
except (KeyError, SdoAbortedError) as e:
338344
logger.info("Could not read event timer (%s)", e)
339345
else:
340346
logger.info("Event timer is set to %d ms", self.event_timer)
341347

342348
try:
343-
self.sync_start_value = self.com_record[6].raw
349+
self.sync_start_value = _raw_from(self.com_record[6])
344350
except (KeyError, SdoAbortedError) as e:
345351
logger.info("Could not read SYNC start value (%s)", e)
346352
else:
347353
logger.info("SYNC start value is set to %d ms", self.sync_start_value)
348354

349355
self.clear()
350-
nof_entries = self.map_array[0].raw
356+
nof_entries = _raw_from(self.map_array[0])
351357
for subindex in range(1, nof_entries + 1):
352-
value = self.map_array[subindex].raw
358+
value = _raw_from(self.map_array[subindex])
353359
index = value >> 16
354360
subindex = (value >> 8) & 0xFF
355361
size = value & 0xFF

0 commit comments

Comments
 (0)