Skip to content

Commit f068bc1

Browse files
committed
combine.
1 parent c67c64d commit f068bc1

File tree

2 files changed

+15
-19
lines changed

2 files changed

+15
-19
lines changed

pymodbus/framer/base.py

+13-17
Original file line numberDiff line numberDiff line change
@@ -63,28 +63,24 @@ def buildFrame(self, message: ModbusPDU) -> bytes:
6363
frame = self.encode(data, message.dev_id, message.transaction_id)
6464
return frame
6565

66-
def handleFrame(self, data: bytes, _exp_devid: int, _exp_tid: int) -> tuple[int, ModbusPDU | None]:
66+
def handleFrame(self, data: bytes, exp_devid: int, exp_tid: int) -> tuple[int, ModbusPDU | None]:
6767
"""Process incoming data."""
6868
used_len = 0
6969
while True:
7070
if used_len >= len(data):
7171
return used_len, None
7272
Log.debug("Processing: {}", data, ":hex")
73-
data_len, pdu = self._internHandleFrame(data[used_len:])
73+
data_len, dev_id, tid, frame_data = self.decode(data)
7474
used_len += data_len
75-
if not data_len:
75+
if ( not frame_data
76+
or (exp_devid and dev_id != exp_devid)
77+
or (exp_tid and tid != exp_tid)
78+
):
79+
if data_len:
80+
continue
7681
return used_len, None
77-
if pdu:
78-
return used_len, pdu
79-
80-
def _internHandleFrame(self, data: bytes) -> tuple[int, ModbusPDU | None]:
81-
"""Assemble PDU."""
82-
used_len, dev_id, tid, frame_data = self.decode(data)
83-
if not frame_data:
84-
return used_len, None
85-
if (result := self.decoder.decode(frame_data)) is None:
86-
raise ModbusIOException("Unable to decode request")
87-
result.dev_id = dev_id
88-
result.transaction_id = tid
89-
Log.debug("Frame advanced, resetting header!!")
90-
return used_len, result
82+
if (pdu := self.decoder.decode(frame_data)) is None:
83+
raise ModbusIOException("Unable to decode request")
84+
pdu.dev_id = dev_id
85+
pdu.transaction_id = tid
86+
return used_len, pdu

test/framer/test_framer.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,8 @@ def test_framer_decode(self, test_framer):
391391
async def test_handleFrame_no(self, test_framer):
392392
"""Test handleFrame."""
393393
msg = b"\x00\x01\x00\x00\x00\x01\xfc\x1b"
394-
with mock.patch.object(test_framer, "_internHandleFrame") as mock_process:
395-
mock_process.side_effect = [(5, None), (0, None)]
394+
with mock.patch.object(test_framer, "decode") as mock_process:
395+
mock_process.side_effect = [(5, 0, 0, None), (0, 0, 0, None)]
396396
used_len, pdu = test_framer.handleFrame(msg, 0, 0)
397397
assert used_len == 5
398398
assert not pdu

0 commit comments

Comments
 (0)