Skip to content

Commit 7e26cfc

Browse files
committed
Merge branch 'main' into recv_timeout
# Conflicts: # adafruit_wiznet5k/adafruit_wiznet5k_socket.py
2 parents b9fc2f4 + ab349c6 commit 7e26cfc

9 files changed

+152
-244
lines changed

adafruit_wiznet5k/adafruit_wiznet5k.py

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@
156156
_MR_RST = const(0x80) # Mode Register RST
157157
# Socket mode register
158158
_SNMR_CLOSE = const(0x00)
159-
SNMR_TCP = const(0x21)
159+
_SNMR_TCP = const(0x21)
160160
SNMR_UDP = const(0x02)
161161
_SNMR_IPRAW = const(0x03)
162162
_SNMR_MACRAW = const(0x04)
@@ -219,10 +219,12 @@ def __init__(
219219

220220
# Reset wiznet module prior to initialization.
221221
if reset:
222+
debug_msg("* Resetting WIZnet chip", self._debug)
223+
reset.switch_to_output()
222224
reset.value = False
223225
time.sleep(0.1)
224226
reset.value = True
225-
time.sleep(0.1)
227+
time.sleep(5)
226228

227229
# Setup chip_select pin.
228230
time.sleep(1)
@@ -384,7 +386,7 @@ def mac_address(self, address: Union[MacAddressRaw, str]) -> None:
384386
"""
385387
try:
386388
address = [int(x, 16) for x in address.split(":")]
387-
except AttributeError:
389+
except TypeError:
388390
pass
389391
try:
390392
if len(address) != 6:
@@ -492,7 +494,7 @@ def ifconfig(
492494

493495
# *** Public Socket Methods ***
494496

495-
def socket_available(self, socket_num: int, sock_type: int = SNMR_TCP) -> int:
497+
def socket_available(self, socket_num: int, sock_type: int = _SNMR_TCP) -> int:
496498
"""
497499
Number of bytes available to be read from the socket.
498500
@@ -514,7 +516,7 @@ def socket_available(self, socket_num: int, sock_type: int = SNMR_TCP) -> int:
514516
self._sock_num_in_range(socket_num)
515517

516518
number_of_bytes = self._get_rx_rcv_size(socket_num)
517-
if self.read_snsr(socket_num) == SNMR_UDP:
519+
if self._read_snsr(socket_num) == SNMR_UDP:
518520
number_of_bytes -= 8 # Subtract UDP header from packet size.
519521
if number_of_bytes < 0:
520522
raise ValueError("Negative number of bytes found on socket.")
@@ -533,14 +535,14 @@ def socket_status(self, socket_num: int) -> int:
533535
534536
:return int: The connection status.
535537
"""
536-
return self.read_snsr(socket_num)
538+
return self._read_snsr(socket_num)
537539

538540
def socket_connect(
539541
self,
540542
socket_num: int,
541543
dest: IpAddress4Raw,
542544
port: int,
543-
conn_mode: int = SNMR_TCP,
545+
conn_mode: int = _SNMR_TCP,
544546
) -> int:
545547
"""
546548
Open and verify a connection from a socket to a destination IPv4 address
@@ -567,11 +569,11 @@ def socket_connect(
567569
# initialize a socket and set the mode
568570
self.socket_open(socket_num, conn_mode=conn_mode)
569571
# set socket destination IP and port
570-
self.write_sndipr(socket_num, dest)
571-
self.write_sndport(socket_num, port)
572-
self.write_sncr(socket_num, _CMD_SOCK_CONNECT)
572+
self._write_sndipr(socket_num, dest)
573+
self._write_sndport(socket_num, port)
574+
self._write_sncr(socket_num, _CMD_SOCK_CONNECT)
573575

574-
if conn_mode == SNMR_TCP:
576+
if conn_mode == _SNMR_TCP:
575577
# wait for tcp connection establishment
576578
while self.socket_status(socket_num) != SNSR_SOCK_ESTABLISHED:
577579
time.sleep(0.001)
@@ -638,7 +640,7 @@ def release_socket(self, socket_number):
638640
WIZNET5K._sockets_reserved[socket_number - 1] = False
639641

640642
def socket_listen(
641-
self, socket_num: int, port: int, conn_mode: int = SNMR_TCP
643+
self, socket_num: int, port: int, conn_mode: int = _SNMR_TCP
642644
) -> None:
643645
"""
644646
Listen on a socket's port.
@@ -665,15 +667,15 @@ def socket_listen(
665667
self.socket_open(socket_num, conn_mode=conn_mode)
666668
self.src_port = 0
667669
# Send listen command
668-
self.write_sncr(socket_num, _CMD_SOCK_LISTEN)
670+
self._write_sncr(socket_num, _CMD_SOCK_LISTEN)
669671
# Wait until ready
670672
status = SNSR_SOCK_CLOSED
671673
while status not in (
672674
SNSR_SOCK_LISTEN,
673675
SNSR_SOCK_ESTABLISHED,
674676
_SNSR_SOCK_UDP,
675677
):
676-
status = self.read_snsr(socket_num)
678+
status = self._read_snsr(socket_num)
677679
if status == SNSR_SOCK_CLOSED:
678680
raise RuntimeError("Listening socket closed.")
679681

@@ -703,7 +705,7 @@ def socket_accept(self, socket_num: int) -> Tuple[int, Tuple[str, int]]:
703705
)
704706
return next_socknum, (dest_ip, dest_port)
705707

706-
def socket_open(self, socket_num: int, conn_mode: int = SNMR_TCP) -> None:
708+
def socket_open(self, socket_num: int, conn_mode: int = _SNMR_TCP) -> None:
707709
"""
708710
Open an IP socket.
709711
@@ -720,7 +722,7 @@ def socket_open(self, socket_num: int, conn_mode: int = SNMR_TCP) -> None:
720722
self._sock_num_in_range(socket_num)
721723
self._check_link_status()
722724
debug_msg("*** Opening socket {}".format(socket_num), self._debug)
723-
if self.read_snsr(socket_num) not in (
725+
if self._read_snsr(socket_num) not in (
724726
SNSR_SOCK_CLOSED,
725727
SNSR_SOCK_TIME_WAIT,
726728
SNSR_SOCK_FIN_WAIT,
@@ -732,22 +734,22 @@ def socket_open(self, socket_num: int, conn_mode: int = SNMR_TCP) -> None:
732734
debug_msg("* Opening W5k Socket, protocol={}".format(conn_mode), self._debug)
733735
time.sleep(0.00025)
734736

735-
self.write_snmr(socket_num, conn_mode)
737+
self._write_snmr(socket_num, conn_mode)
736738
self.write_snir(socket_num, 0xFF)
737739

738740
if self.src_port > 0:
739741
# write to socket source port
740-
self.write_sock_port(socket_num, self.src_port)
742+
self._write_sock_port(socket_num, self.src_port)
741743
else:
742744
s_port = randint(49152, 65535)
743745
while s_port in self._src_ports_in_use:
744746
s_port = randint(49152, 65535)
745-
self.write_sock_port(socket_num, s_port)
747+
self._write_sock_port(socket_num, s_port)
746748
self._src_ports_in_use[socket_num] = s_port
747749

748750
# open socket
749-
self.write_sncr(socket_num, _CMD_SOCK_OPEN)
750-
if self.read_snsr(socket_num) not in [_SNSR_SOCK_INIT, _SNSR_SOCK_UDP]:
751+
self._write_sncr(socket_num, _CMD_SOCK_OPEN)
752+
if self._read_snsr(socket_num) not in [_SNSR_SOCK_INIT, _SNSR_SOCK_UDP]:
751753
raise RuntimeError("Could not open socket in TCP or UDP mode.")
752754

753755
def socket_close(self, socket_num: int) -> None:
@@ -760,14 +762,14 @@ def socket_close(self, socket_num: int) -> None:
760762
"""
761763
debug_msg("*** Closing socket {}".format(socket_num), self._debug)
762764
self._sock_num_in_range(socket_num)
763-
self.write_sncr(socket_num, _CMD_SOCK_CLOSE)
765+
self._write_sncr(socket_num, _CMD_SOCK_CLOSE)
764766
debug_msg(" Waiting for socket to close…", self._debug)
765767
timeout = time.monotonic() + 5.0
766-
while self.read_snsr(socket_num) != SNSR_SOCK_CLOSED:
768+
while self._read_snsr(socket_num) != SNSR_SOCK_CLOSED:
767769
if time.monotonic() > timeout:
768770
raise RuntimeError(
769771
"Wiznet5k failed to close socket, status = {}.".format(
770-
self.read_snsr(socket_num)
772+
self._read_snsr(socket_num)
771773
)
772774
)
773775
time.sleep(0.0001)
@@ -783,7 +785,7 @@ def socket_disconnect(self, socket_num: int) -> None:
783785
"""
784786
debug_msg("*** Disconnecting socket {}".format(socket_num), self._debug)
785787
self._sock_num_in_range(socket_num)
786-
self.write_sncr(socket_num, _CMD_SOCK_DISCON)
788+
self._write_sncr(socket_num, _CMD_SOCK_DISCON)
787789

788790
def socket_read(self, socket_num: int, length: int) -> Tuple[int, bytes]:
789791
"""
@@ -819,7 +821,7 @@ def socket_read(self, socket_num: int, length: int) -> Tuple[int, bytes]:
819821
# After reading the received data, update Sn_RX_RD register.
820822
pointer = (pointer + bytes_on_socket) & 0xFFFF
821823
self._write_snrx_rd(socket_num, pointer)
822-
self.write_sncr(socket_num, _CMD_SOCK_RECV)
824+
self._write_sncr(socket_num, _CMD_SOCK_RECV)
823825
else:
824826
# no data on socket
825827
if self._read_snmr(socket_num) in (
@@ -906,7 +908,7 @@ def socket_write(
906908
# update sn_tx_wr to the value + data size
907909
pointer = (pointer + bytes_to_write) & 0xFFFF
908910
self._write_sntx_wr(socket_num, pointer)
909-
self.write_sncr(socket_num, _CMD_SOCK_SEND)
911+
self._write_sncr(socket_num, _CMD_SOCK_SEND)
910912

911913
# check data was transferred correctly
912914
while not self.read_snir(socket_num) & _SNIR_SEND_OK:
@@ -1057,6 +1059,11 @@ def _check_link_status(self):
10571059
if not self.link_status:
10581060
raise ConnectionError("The Ethernet connection is down.")
10591061

1062+
@staticmethod
1063+
def _read_socket_reservations() -> list[int]:
1064+
"""Return the list of reserved sockets."""
1065+
return WIZNET5K._sockets_reserved
1066+
10601067
def _read_mr(self) -> int:
10611068
"""Read from the Mode Register (MR)."""
10621069
return int.from_bytes(self._read(_REG_MR[self._chip_type], 0x00), "big")
@@ -1175,18 +1182,22 @@ def _read_sndipr(self, sock) -> bytes:
11751182
)
11761183
return bytes(data)
11771184

1178-
def write_sndipr(self, sock: int, ip_addr: bytes) -> None:
1185+
def _write_sndipr(self, sock: int, ip_addr: bytes) -> None:
11791186
"""Write to socket destination IP Address."""
11801187
for offset, value in enumerate(ip_addr):
11811188
self._write_socket_register(
11821189
sock, _REG_SNDIPR[self._chip_type] + offset, value
11831190
)
11841191

1185-
def write_sndport(self, sock: int, port: int) -> None:
1192+
def _read_sndport(self, sock: int) -> int:
1193+
"""Read socket destination port."""
1194+
return self._read_two_byte_sock_reg(sock, _REG_SNDPORT[self._chip_type])
1195+
1196+
def _write_sndport(self, sock: int, port: int) -> None:
11861197
"""Write to socket destination port."""
11871198
self._write_two_byte_sock_reg(sock, _REG_SNDPORT[self._chip_type], port)
11881199

1189-
def read_snsr(self, sock: int) -> int:
1200+
def _read_snsr(self, sock: int) -> int:
11901201
"""Read Socket n Status Register."""
11911202
return self._read_socket_register(sock, _REG_SNSR[self._chip_type])
11921203

@@ -1202,15 +1213,15 @@ def _read_snmr(self, sock: int) -> int:
12021213
"""Read the socket MR register."""
12031214
return self._read_socket_register(sock, _REG_SNMR)
12041215

1205-
def write_snmr(self, sock: int, protocol: int) -> None:
1216+
def _write_snmr(self, sock: int, protocol: int) -> None:
12061217
"""Write to Socket n Mode Register."""
12071218
self._write_socket_register(sock, _REG_SNMR, protocol)
12081219

1209-
def write_sock_port(self, sock: int, port: int) -> None:
1220+
def _write_sock_port(self, sock: int, port: int) -> None:
12101221
"""Write to the socket port number."""
12111222
self._write_two_byte_sock_reg(sock, _REG_SNPORT[self._chip_type], port)
12121223

1213-
def write_sncr(self, sock: int, data: int) -> None:
1224+
def _write_sncr(self, sock: int, data: int) -> None:
12141225
"""Write to socket command register."""
12151226
self._write_socket_register(sock, _REG_SNCR[self._chip_type], data)
12161227
# Wait for command to complete before continuing.

0 commit comments

Comments
 (0)