Skip to content

Commit 6f9f06e

Browse files
authored
Use smaller of response size and size in OD (#395)
1 parent 5418054 commit 6f9f06e

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

canopen/sdo/client.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -114,21 +114,22 @@ def upload(self, index: int, subindex: int) -> bytes:
114114
When node responds with an error.
115115
"""
116116
with self.open(index, subindex, buffering=0) as fp:
117-
size = fp.size
117+
response_size = fp.size
118118
data = fp.read()
119-
if size is None:
120-
# Node did not specify how many bytes to use
121-
# Try to find out using Object Dictionary
122-
var = self.od.get_variable(index, subindex)
123-
if var is not None:
124-
# Found a matching variable in OD
125-
# If this is a data type (string, domain etc) the size is
126-
# unknown anyway so keep the data as is
127-
if var.data_type not in objectdictionary.DATA_TYPES:
128-
# Get the size in bytes for this variable
129-
size = len(var) // 8
119+
120+
# If size is available through variable in OD, then use the smaller of the two sizes.
121+
# Some devices send U32/I32 even if variable is smaller in OD
122+
var = self.od.get_variable(index, subindex)
123+
if var is not None:
124+
# Found a matching variable in OD
125+
# If this is a data type (string, domain etc) the size is
126+
# unknown anyway so keep the data as is
127+
if var.data_type not in objectdictionary.DATA_TYPES:
128+
# Get the size in bytes for this variable
129+
var_size = len(var) // 8
130+
if response_size is None or var_size < response_size:
130131
# Truncate the data to specified size
131-
data = data[0:size]
132+
data = data[0:var_size]
132133
return data
133134

134135
def download(

0 commit comments

Comments
 (0)