|
1 | | -# Copyright (c) 2023-2024, Rivos, Inc. |
| 1 | +# Copyright (c) 2023-2025, Rivos, Inc. |
2 | 2 | # All rights reserved. |
3 | 3 |
|
4 | 4 | """SPI device proxy. |
|
13 | 13 | SHUT_RDWR, timeout as LegacyTimeoutError) |
14 | 14 | from struct import calcsize as scalc, pack as spack |
15 | 15 | from time import sleep, time as now |
16 | | -from typing import Optional |
| 16 | +from typing import Optional, Union |
17 | 17 |
|
18 | 18 |
|
19 | 19 | class SpiDevice: |
@@ -94,15 +94,18 @@ def connect(self, host: str, port: int) -> None: |
94 | 94 | self._socket.settimeout(None) |
95 | 95 | self._socket.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1) |
96 | 96 |
|
97 | | - def quit(self) -> None: |
| 97 | + def disconnect(self) -> None: |
98 | 98 | """Close the communication socket.""" |
99 | 99 | if self._socket: |
100 | 100 | self._socket.shutdown(SHUT_RDWR) |
101 | 101 | self._socket.close() |
102 | 102 | self._socket = None |
103 | 103 |
|
| 104 | + quit = disconnect |
| 105 | + """Old API.""" |
| 106 | + |
104 | 107 | def transmit(self, cmd: Optional[int] = None, |
105 | | - in_payload: Optional[bytes | bytearray | int] = None, |
| 108 | + in_payload: Union[bytes, bytearray, int, None] = None, |
106 | 109 | out_len: int = 0, release: bool = True) -> bytes: |
107 | 110 | """SPI data transfer. |
108 | 111 |
|
@@ -137,13 +140,13 @@ def wait_idle(self, timeout: float = 1.0, pace: float = 0.0005) -> None: |
137 | 140 | available after this delay |
138 | 141 | :param pace: delay between each flash device poll request. |
139 | 142 | """ |
140 | | - timeout += now() |
| 143 | + expire = timeout + now() |
141 | 144 | while True: |
142 | 145 | status = self.read_status_register() |
143 | 146 | if not status & self.BUSY: |
144 | 147 | break |
145 | | - if now() > timeout: |
146 | | - raise TimeoutError('Flash stuck to busy') |
| 148 | + if now() > expire: |
| 149 | + raise TimeoutError(f'Busy bit stuck for {timeout:.1f}s') |
147 | 150 | sleep(pace) |
148 | 151 |
|
149 | 152 | def read_jedec_id(self) -> tuple[int, bytes]: |
@@ -309,8 +312,8 @@ def _build_cs_header(self, size: int, release: bool = True) -> bytes: |
309 | 312 | return header |
310 | 313 |
|
311 | 314 | def _transmit(self, cmd: Optional[int] = None, |
312 | | - in_payload: Optional[bytes | bytearray | int] = None, |
313 | | - out_len: int = 0, release: bool = True) -> bytes: |
| 315 | + in_payload: Union[bytes, bytearray, int, None] = None, |
| 316 | + out_len: int = 0, release: bool = True) -> bytes: |
314 | 317 | if isinstance(in_payload, int): |
315 | 318 | in_payload = bytes([0xff] * in_payload) |
316 | 319 | elif in_payload is not None: |
|
0 commit comments