From fdf57245e213bd1b04481a9302f472e0b01eea84 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Mon, 2 Sep 2024 14:33:00 +0200 Subject: [PATCH] TPDO mappings may be read-only --- canopen/pdo/base.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/canopen/pdo/base.py b/canopen/pdo/base.py index f2a7d205..04bc28b5 100644 --- a/canopen/pdo/base.py +++ b/canopen/pdo/base.py @@ -427,15 +427,19 @@ def save(self) -> None: for var in self.map: logger.info("Writing %s (0x%04X:%02X, %d bits) to PDO map", var.name, var.index, var.subindex, var.length) - if getattr(self.pdo_node.node, "curtis_hack", False): - # Curtis HACK: mixed up field order - self.map_array[subindex].raw = (var.index | - var.subindex << 16 | - var.length << 24) - else: - self.map_array[subindex].raw = (var.index << 16 | - var.subindex << 8 | - var.length) + try: + if getattr(self.pdo_node.node, "curtis_hack", False): + # Curtis HACK: mixed up field order + self.map_array[subindex].raw = (var.index | + var.subindex << 16 | + var.length << 24) + else: + self.map_array[subindex].raw = (var.index << 16 | + var.subindex << 8 | + var.length) + except SdoAbortedError as e: + if e.code != 0x06010002: + raise subindex += 1 try: self.map_array[0].raw = len(self.map)