diff --git a/ports/zephyr-cp/tests/__init__.py b/ports/zephyr-cp/tests/__init__.py index c042d744d7d..78b9a17a676 100644 --- a/ports/zephyr-cp/tests/__init__.py +++ b/ports/zephyr-cp/tests/__init__.py @@ -28,6 +28,14 @@ def close(self): self.stdin.close() self.stdout.close() + def read_some(self, limit=65536): + # read1() hands back whatever is already buffered and does at most one + # read on the pipe, so it blocks only when nothing has arrived yet. + data = self.stdout.read1(limit) + if data == b"": + raise EOFError("stdout closed") + return data + @property def in_waiting(self): if self.stdout is None: @@ -47,13 +55,22 @@ def __init__(self, serial_obj, name="serial"): self._stop = threading.Event() self._lock = threading.Lock() self._cv = threading.Condition(self._lock) + self._read_some = getattr(serial_obj, "read_some", None) self._reader = threading.Thread(target=self._reader_loop, daemon=True) self._reader.start() def _reader_loop(self): while not self._stop.is_set(): try: - read = self.serial.read(1) + if self._read_some is not None: + read = self._read_some() + else: + read = self.serial.read(1) + # in_waiting is a non-blocking check on a real serial port, + # so draining it here is free. + waiting = self.serial.in_waiting + if waiting: + read += self.serial.read(waiting) except Exception: # Serial port closed or device disconnected. break diff --git a/ports/zephyr-cp/tests/bsim/test_bsim_ble_packet_buffer.py b/ports/zephyr-cp/tests/bsim/test_bsim_ble_packet_buffer.py index 27bb703f379..d5ff222ff5d 100644 --- a/ports/zephyr-cp/tests/bsim/test_bsim_ble_packet_buffer.py +++ b/ports/zephyr-cp/tests/bsim/test_bsim_ble_packet_buffer.py @@ -604,7 +604,6 @@ def test_bsim_packet_buffer_write_header(bsim_phy, circuitpython1, circuitpython """ -@pytest.mark.duration(5) @pytest.mark.circuitpy_drive({"code.py": BSIM_PB_LENGTHS_CODE}) def test_bsim_packet_buffer_packet_lengths(bsim_phy, circuitpython): """incoming_packet_length and outgoing_packet_length properties."""