Fix serial io read loop.
This commit is contained in:
parent
06c9d68390
commit
a13a5a1e2a
@ -64,24 +64,25 @@ class PrinterSerialIO(threading.Thread):
|
|||||||
data = to_bytes(data, encoding="ascii", errors="replace")
|
data = to_bytes(data, encoding="ascii", errors="replace")
|
||||||
self.input_bytes.task_done()
|
self.input_bytes.task_done()
|
||||||
|
|
||||||
line, buffer = self._read_next_line_buffered(data, buffer)
|
buffer += data
|
||||||
|
line, buffer = self._read_next_line(buffer)
|
||||||
while line is not None:
|
while line is not None:
|
||||||
self._received_lines += 1
|
self._received_lines += 1
|
||||||
self._process_input_gcode_line(line)
|
self._process_input_gcode_line(line)
|
||||||
line, buffer = self._read_next_line_buffered(data, buffer)
|
line, buffer = self._read_next_line(buffer)
|
||||||
except queue.Empty:
|
except queue.Empty:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
self._log.debug("Closing IO read loop")
|
self._log.debug("Closing IO read loop")
|
||||||
|
|
||||||
def _read_next_line_buffered(self, additional: bytes, buffer: bytes):
|
def _read_next_line(self, buffer: bytes):
|
||||||
buffer += additional
|
|
||||||
new_line_pos = buffer.find(b"\n") + 1
|
new_line_pos = buffer.find(b"\n") + 1
|
||||||
if new_line_pos > 0:
|
if new_line_pos > 0:
|
||||||
additional = buffer[:new_line_pos]
|
line = buffer[:new_line_pos]
|
||||||
buffer = buffer[new_line_pos:]
|
buffer = buffer[new_line_pos:]
|
||||||
|
return line, buffer
|
||||||
return additional, buffer
|
else:
|
||||||
|
return None, buffer
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self.flush()
|
self.flush()
|
||||||
|
@ -96,6 +96,7 @@ def ftps_session_mock(files_info_ftp):
|
|||||||
ftps_session.size.side_effect = DictGetter(
|
ftps_session.size.side_effect = DictGetter(
|
||||||
{file: info[0] for file, info in files_info_ftp.items()}
|
{file: info[0] for file, info in files_info_ftp.items()}
|
||||||
)
|
)
|
||||||
|
|
||||||
ftps_session.sendcmd.side_effect = DictGetter(
|
ftps_session.sendcmd.side_effect = DictGetter(
|
||||||
{f"MDTM {file}": info[1] for file, info in files_info_ftp.items()}
|
{f"MDTM {file}": info[1] for file, info in files_info_ftp.items()}
|
||||||
)
|
)
|
||||||
@ -141,7 +142,7 @@ def test_initial_state(printer: BambuVirtualPrinter):
|
|||||||
|
|
||||||
def test_list_sd_card(printer: BambuVirtualPrinter):
|
def test_list_sd_card(printer: BambuVirtualPrinter):
|
||||||
printer.write(b"M20\n") # GCode for listing SD card
|
printer.write(b"M20\n") # GCode for listing SD card
|
||||||
printer.flush()
|
printer.close()
|
||||||
result = printer.readlines()
|
result = printer.readlines()
|
||||||
assert result == "" # Replace with the actual expected result
|
assert result == "" # Replace with the actual expected result
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user