Skip to content

Commit 7a1d856

Browse files
committed
prepare 0.4.9
1 parent 26a421e commit 7a1d856

File tree

4 files changed

+15
-34
lines changed

4 files changed

+15
-34
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# next release
1+
# 0.4.9
22

33
* harding stack by checking message length
44

src/durand/services/lss.py

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,6 @@ class LSSState(IntEnum):
1717
CONFIGURATION = 1
1818

1919

20-
def check_length(length: int):
21-
""" Decorator for cmd_ methods checking the expected packet length """
22-
def wrap(cmd_method):
23-
def wrapped_cmd(self, msg: bytes):
24-
if len(msg) == length:
25-
return cmd_method(self, msg)
26-
log.info('LSS got packet with wrong length {msg!r}, expected {length} bytes')
27-
return wrapped_cmd
28-
return wrap
29-
30-
3120
class LSSSlave:
3221
def __init__(self, node: "Node"):
3322
self._node = node
@@ -62,7 +51,7 @@ def _get_own_address(self):
6251

6352
def handle_msg(self, _cob_id: int, msg: bytes):
6453
if len(msg) < 1:
65-
log.info(f'LSS got packet with wrong length {msg!r}')
54+
log.debug(f'LSS got packet with wrong length {msg!r}')
6655
return
6756

6857
cs = msg[0]
@@ -75,16 +64,17 @@ def handle_msg(self, _cob_id: int, msg: bytes):
7564
if method is None:
7665
return
7766

78-
method(self, msg)
67+
try:
68+
method(self, msg)
69+
except (IndexError, struct.error):
70+
log.debug(f'LSS got packet with wrong length {msg!r}')
7971

80-
@check_length(2)
8172
def cmd_switch_mode_global_configuration(self, msg: bytes):
8273
if msg[1] != 1: # check if requested mode is CONFIGURATION
8374
return
8475

8576
self._state = LSSState.CONFIGURATION
8677

87-
@check_length(2)
8878
def cmd_switch_mode_global_waiting(self, msg: bytes):
8979
if msg[1] != 0: # check if requested mode is WAITING
9080
return
@@ -94,7 +84,6 @@ def cmd_switch_mode_global_waiting(self, msg: bytes):
9484

9585
self._state = LSSState.WAITING
9686

97-
@check_length(6)
9887
def cmd_switch_mode_selective(self, msg: bytes):
9988
index = msg[0] - 0x40
10089

@@ -111,19 +100,16 @@ def cmd_switch_mode_selective(self, msg: bytes):
111100

112101
self._received_selective_address = [None] * 4
113102

114-
@check_length(1)
115103
def cmd_inquire_identity(self, msg: bytes):
116104
index = msg[0] - 0x5A
117105
value = self._get_own_address()[index]
118106
self._node.network.send(0x7E4, msg[:1] + value.to_bytes(4, "little") + bytes(3))
119107

120-
@check_length(1)
121108
def cmd_inquire_node_id(self, _msg: bytes):
122109
self._node.network.send(
123110
0x7E4, b"\x5e" + self._node.node_id.to_bytes(1, "little") + bytes(6)
124111
)
125112

126-
@check_length(2)
127113
def cmd_configure_node_id(self, msg: bytes):
128114
node_id = msg[1]
129115

@@ -137,7 +123,6 @@ def cmd_configure_node_id(self, msg: bytes):
137123
0x7E4, b"\x11" + result.to_bytes(1, "little") + bytes(6)
138124
)
139125

140-
@check_length(4)
141126
def cmd_configure_bit_timing(self, msg: bytes):
142127
valid_table_entries = (0, 1, 2, 3, 4, 6, 7, 8)
143128
selector, index = msg[1:3]
@@ -153,7 +138,6 @@ def cmd_configure_bit_timing(self, msg: bytes):
153138
self._pending_baudrate = index
154139
self._node.network.send(0x7E4, b"\x13\x00" + bytes(6))
155140

156-
@check_length(4)
157141
def cmd_activate_bit_timing(self, msg: bytes):
158142
delay = int.from_bytes(msg[1:3], "little") / 1000 # [seconds]
159143

@@ -166,12 +150,10 @@ def _change_baudrate(self, delay: float):
166150
self._pending_baudrate = None
167151
get_scheduler().add(delay, self._node.nmt.reset)
168152

169-
@check_length(1)
170153
def cmd_store_configuration(self, _msg: bytes):
171154
# store configuration is not supported
172155
self._node.network.send(0x7E4, b"\x17\x01" + bytes(6))
173156

174-
@check_length(6)
175157
def cmd_identify_remote_responders(self, msg: bytes):
176158
index = msg[0] - 0x46
177159
value = int.from_bytes(msg[1:5], "little")
@@ -195,12 +177,10 @@ def cmd_identify_remote_responders(self, msg: bytes):
195177

196178
self._remote_responder_address = [None] * 6
197179

198-
@check_length(1)
199180
def cmd_identify_nonconfigured_remote_responders(self, _msg: bytes):
200181
if self._node.node_id == 0xFF:
201182
self._node.network.send(0x7E4, b"\x50" + bytes(7))
202183

203-
@check_length(5)
204184
def cmd_fastscan(self, msg: bytes):
205185
if self._node.node_id != 0xFF:
206186
return

src/durand/services/nmt.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def __init__(self, node: "Node"):
3333

3434
def handle_msg(self, _cob_id: int, msg: bytes):
3535
if len(msg) != 2:
36-
log.info(f'NMT got packet with wrong length {msg!r}')
36+
log.debug(f'NMT got packet with wrong length {msg!r}')
3737
return
3838

3939
cs, node_id = msg[:2]
@@ -51,7 +51,7 @@ def handle_msg(self, _cob_id: int, msg: bytes):
5151
self.set_state(StateEnum.INITIALISATION)
5252
self.set_state(StateEnum.PRE_OPERATIONAL)
5353
else:
54-
log.info("Unknown NMT command specifier 0x%02X", cs)
54+
log.debug("Unknown NMT command specifier 0x%02X", cs)
5555

5656
def reset(self):
5757
self.set_state(StateEnum.INITIALISATION)

src/durand/services/sdo/server.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,7 @@ def handle_msg(self, cob_id: int, msg: bytes) -> None:
182182
cob_id == self._cob_rx
183183
), "Cob RX id invalid (0x{cob_id:X}, expected 0x{self._cob_rx:X})"
184184

185-
try:
186-
if len(msg) != 8:
187-
raise SDODomainAbort(0x08000000)
188-
185+
try:
189186
ccs = (msg[0] & 0xE0) >> 5
190187

191188
if msg[0] == 0x80: # abort
@@ -208,9 +205,13 @@ def handle_msg(self, cob_id: int, msg: bytes) -> None:
208205
response += struct.pack("<I", exc.code)
209206
self._node.network.send(self._cob_tx, response)
210207
except Exception as exc:
211-
_, index, subindex = SDO_STRUCT.unpack(msg[:4])
208+
if len(msg) >= 4:
209+
_, index, subindex = SDO_STRUCT.unpack(msg[:4])
210+
else:
211+
index, subindex = (0,0)
212+
212213
# TODO: use index, subindex only when available in msg
213-
log.exception("Exception during processing %r", msg)
214+
log.debug(f"{exc!r} during processing {msg!r}")
214215

215216
response = SDO_STRUCT.pack(0x80, index, subindex) + b"\x00\x00\x00\x08"
216217
self._node.network.send(self._cob_tx, response) # report general error

0 commit comments

Comments
 (0)