Skip to content

Commit 2f0fa6a

Browse files
author
BiffoBear
committed
Changed socket.__exit__() to use hardware interrupt register.
1 parent 79413ea commit 2f0fa6a

File tree

2 files changed

+28
-15
lines changed

2 files changed

+28
-15
lines changed

adafruit_wiznet5k/adafruit_wiznet5k.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@
105105

106106
# Socket n Interrupt Register
107107
_SNIR_SEND_OK = const(0x10)
108-
_SNIR_TIMEOUT = const(0x08)
108+
SNIR_TIMEOUT = const(0x08)
109109
_SNIR_RECV = const(0x04)
110-
_SNIR_DISCON = const(0x02)
110+
SNIR_DISCON = const(0x02)
111111
_SNIR_CON = const(0x01)
112112

113113
_CH_SIZE = const(0x100)
@@ -837,7 +837,7 @@ def socket_open(self, socket_num: int, conn_mode: int = _SNMR_TCP) -> int:
837837
time.sleep(0.00025)
838838

839839
self._write_snmr(socket_num, conn_mode)
840-
self._write_snir(socket_num, 0xFF)
840+
self.write_snir(socket_num, 0xFF)
841841

842842
if self.src_port > 0:
843843
# write to socket source port
@@ -1058,7 +1058,7 @@ def socket_write(
10581058
return 0
10591059
time.sleep(0.01)
10601060

1061-
self._write_snir(socket_num, _SNIR_SEND_OK)
1061+
self.write_snir(socket_num, _SNIR_SEND_OK)
10621062
return ret
10631063

10641064
# Socket-Register Methods
@@ -1124,11 +1124,15 @@ def _read_snsr(self, sock: int) -> Optional[bytearray]:
11241124
"""Read Socket n Status Register."""
11251125
return self._read_socket(sock, _REG_SNSR)
11261126

1127+
def read_snir(self, sock: int) -> Optional[bytearray]:
1128+
"""Read Socket n Status Register."""
1129+
return self._read_socket(sock, _REG_SNIR)
1130+
11271131
def _write_snmr(self, sock: int, protocol: int) -> None:
11281132
"""Write to Socket n Mode Register."""
11291133
self._write_socket(sock, _REG_SNMR, protocol)
11301134

1131-
def _write_snir(self, sock: int, data: int) -> None:
1135+
def write_snir(self, sock: int, data: int) -> None:
11321136
"""Write to Socket n Interrupt Register."""
11331137
self._write_socket(sock, _REG_SNIR, data)
11341138

adafruit_wiznet5k/adafruit_wiznet5k_socket.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -240,16 +240,25 @@ def __enter__(self):
240240

241241
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
242242
if self._sock_type == SOCK_STREAM:
243-
self._disconnect()
244-
stamp = time.monotonic()
245-
while self._status == wiznet5k.adafruit_wiznet5k.SNSR_SOCK_FIN_WAIT:
246-
if time.monotonic() - stamp > 19: # Hardware default timeout.
247-
raise RuntimeError("Failed to disconnect socket")
248-
self.close()
249-
stamp = time.monotonic()
250-
while self._status != wiznet5k.adafruit_wiznet5k.SNSR_SOCK_CLOSED:
251-
if time.monotonic() - stamp > 19: # Hardware default timeout.
252-
raise RuntimeError("Failed to close socket")
243+
_the_interface.write_snir(
244+
self._socknum, 0xFF
245+
) # Reset socket interrupt register.
246+
_the_interface.socket_disconnect(self._socknum)
247+
mask = (
248+
wiznet5k.adafruit_wiznet5k.SNIR_TIMEOUT
249+
| wiznet5k.adafruit_wiznet5k.SNIR_DISCON
250+
)
251+
while not _the_interface.read_snir(self._socknum)[0] & mask:
252+
pass
253+
_the_interface.write_snir(
254+
self._socknum, 0xFF
255+
) # Reset socket interrupt register.
256+
_the_interface.socket_close(self._socknum)
257+
while (
258+
not _the_interface.socket_status(self._socknum)[0]
259+
& wiznet5k.adafruit_wiznet5k.SNSR_SOCK_CLOSED
260+
):
261+
pass
253262

254263
@property
255264
def _status(self) -> int:

0 commit comments

Comments
 (0)