156
156
_MR_RST = const (0x80 ) # Mode Register RST
157
157
# Socket mode register
158
158
_SNMR_CLOSE = const (0x00 )
159
- SNMR_TCP = const (0x21 )
159
+ _SNMR_TCP = const (0x21 )
160
160
SNMR_UDP = const (0x02 )
161
161
_SNMR_IPRAW = const (0x03 )
162
162
_SNMR_MACRAW = const (0x04 )
@@ -492,7 +492,7 @@ def ifconfig(
492
492
493
493
# *** Public Socket Methods ***
494
494
495
- def socket_available (self , socket_num : int , sock_type : int = SNMR_TCP ) -> int :
495
+ def socket_available (self , socket_num : int , sock_type : int = _SNMR_TCP ) -> int :
496
496
"""
497
497
Number of bytes available to be read from the socket.
498
498
@@ -514,7 +514,7 @@ def socket_available(self, socket_num: int, sock_type: int = SNMR_TCP) -> int:
514
514
self ._sock_num_in_range (socket_num )
515
515
516
516
number_of_bytes = self ._get_rx_rcv_size (socket_num )
517
- if self .read_snsr (socket_num ) == SNMR_UDP :
517
+ if self ._read_snsr (socket_num ) == SNMR_UDP :
518
518
number_of_bytes -= 8 # Subtract UDP header from packet size.
519
519
if number_of_bytes < 0 :
520
520
raise ValueError ("Negative number of bytes found on socket." )
@@ -533,14 +533,14 @@ def socket_status(self, socket_num: int) -> int:
533
533
534
534
:return int: The connection status.
535
535
"""
536
- return self .read_snsr (socket_num )
536
+ return self ._read_snsr (socket_num )
537
537
538
538
def socket_connect (
539
539
self ,
540
540
socket_num : int ,
541
541
dest : IpAddress4Raw ,
542
542
port : int ,
543
- conn_mode : int = SNMR_TCP ,
543
+ conn_mode : int = _SNMR_TCP ,
544
544
) -> int :
545
545
"""
546
546
Open and verify a connection from a socket to a destination IPv4 address
@@ -567,11 +567,11 @@ def socket_connect(
567
567
# initialize a socket and set the mode
568
568
self .socket_open (socket_num , conn_mode = conn_mode )
569
569
# 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 )
570
+ self ._write_sndipr (socket_num , dest )
571
+ self ._write_sndport (socket_num , port )
572
+ self ._write_sncr (socket_num , _CMD_SOCK_CONNECT )
573
573
574
- if conn_mode == SNMR_TCP :
574
+ if conn_mode == _SNMR_TCP :
575
575
# wait for tcp connection establishment
576
576
while self .socket_status (socket_num ) != SNSR_SOCK_ESTABLISHED :
577
577
time .sleep (0.001 )
@@ -638,7 +638,7 @@ def release_socket(self, socket_number):
638
638
WIZNET5K ._sockets_reserved [socket_number - 1 ] = False
639
639
640
640
def socket_listen (
641
- self , socket_num : int , port : int , conn_mode : int = SNMR_TCP
641
+ self , socket_num : int , port : int , conn_mode : int = _SNMR_TCP
642
642
) -> None :
643
643
"""
644
644
Listen on a socket's port.
@@ -665,15 +665,15 @@ def socket_listen(
665
665
self .socket_open (socket_num , conn_mode = conn_mode )
666
666
self .src_port = 0
667
667
# Send listen command
668
- self .write_sncr (socket_num , _CMD_SOCK_LISTEN )
668
+ self ._write_sncr (socket_num , _CMD_SOCK_LISTEN )
669
669
# Wait until ready
670
670
status = SNSR_SOCK_CLOSED
671
671
while status not in (
672
672
SNSR_SOCK_LISTEN ,
673
673
SNSR_SOCK_ESTABLISHED ,
674
674
_SNSR_SOCK_UDP ,
675
675
):
676
- status = self .read_snsr (socket_num )
676
+ status = self ._read_snsr (socket_num )
677
677
if status == SNSR_SOCK_CLOSED :
678
678
raise RuntimeError ("Listening socket closed." )
679
679
@@ -703,7 +703,7 @@ def socket_accept(self, socket_num: int) -> Tuple[int, Tuple[str, int]]:
703
703
)
704
704
return next_socknum , (dest_ip , dest_port )
705
705
706
- def socket_open (self , socket_num : int , conn_mode : int = SNMR_TCP ) -> None :
706
+ def socket_open (self , socket_num : int , conn_mode : int = _SNMR_TCP ) -> None :
707
707
"""
708
708
Open an IP socket.
709
709
@@ -720,7 +720,7 @@ def socket_open(self, socket_num: int, conn_mode: int = SNMR_TCP) -> None:
720
720
self ._sock_num_in_range (socket_num )
721
721
self ._check_link_status ()
722
722
debug_msg ("*** Opening socket {}" .format (socket_num ), self ._debug )
723
- if self .read_snsr (socket_num ) not in (
723
+ if self ._read_snsr (socket_num ) not in (
724
724
SNSR_SOCK_CLOSED ,
725
725
SNSR_SOCK_TIME_WAIT ,
726
726
SNSR_SOCK_FIN_WAIT ,
@@ -732,22 +732,22 @@ def socket_open(self, socket_num: int, conn_mode: int = SNMR_TCP) -> None:
732
732
debug_msg ("* Opening W5k Socket, protocol={}" .format (conn_mode ), self ._debug )
733
733
time .sleep (0.00025 )
734
734
735
- self .write_snmr (socket_num , conn_mode )
735
+ self ._write_snmr (socket_num , conn_mode )
736
736
self .write_snir (socket_num , 0xFF )
737
737
738
738
if self .src_port > 0 :
739
739
# write to socket source port
740
- self .write_sock_port (socket_num , self .src_port )
740
+ self ._write_sock_port (socket_num , self .src_port )
741
741
else :
742
742
s_port = randint (49152 , 65535 )
743
743
while s_port in self ._src_ports_in_use :
744
744
s_port = randint (49152 , 65535 )
745
- self .write_sock_port (socket_num , s_port )
745
+ self ._write_sock_port (socket_num , s_port )
746
746
self ._src_ports_in_use [socket_num ] = s_port
747
747
748
748
# 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 ]:
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
751
raise RuntimeError ("Could not open socket in TCP or UDP mode." )
752
752
753
753
def socket_close (self , socket_num : int ) -> None :
@@ -760,14 +760,14 @@ def socket_close(self, socket_num: int) -> None:
760
760
"""
761
761
debug_msg ("*** Closing socket {}" .format (socket_num ), self ._debug )
762
762
self ._sock_num_in_range (socket_num )
763
- self .write_sncr (socket_num , _CMD_SOCK_CLOSE )
763
+ self ._write_sncr (socket_num , _CMD_SOCK_CLOSE )
764
764
debug_msg (" Waiting for socket to close…" , self ._debug )
765
765
timeout = time .monotonic () + 5.0
766
- while self .read_snsr (socket_num ) != SNSR_SOCK_CLOSED :
766
+ while self ._read_snsr (socket_num ) != SNSR_SOCK_CLOSED :
767
767
if time .monotonic () > timeout :
768
768
raise RuntimeError (
769
769
"Wiznet5k failed to close socket, status = {}." .format (
770
- self .read_snsr (socket_num )
770
+ self ._read_snsr (socket_num )
771
771
)
772
772
)
773
773
time .sleep (0.0001 )
@@ -783,7 +783,7 @@ def socket_disconnect(self, socket_num: int) -> None:
783
783
"""
784
784
debug_msg ("*** Disconnecting socket {}" .format (socket_num ), self ._debug )
785
785
self ._sock_num_in_range (socket_num )
786
- self .write_sncr (socket_num , _CMD_SOCK_DISCON )
786
+ self ._write_sncr (socket_num , _CMD_SOCK_DISCON )
787
787
788
788
def socket_read (self , socket_num : int , length : int ) -> Tuple [int , bytes ]:
789
789
"""
@@ -819,7 +819,7 @@ def socket_read(self, socket_num: int, length: int) -> Tuple[int, bytes]:
819
819
# After reading the received data, update Sn_RX_RD register.
820
820
pointer = (pointer + bytes_on_socket ) & 0xFFFF
821
821
self ._write_snrx_rd (socket_num , pointer )
822
- self .write_sncr (socket_num , _CMD_SOCK_RECV )
822
+ self ._write_sncr (socket_num , _CMD_SOCK_RECV )
823
823
else :
824
824
# no data on socket
825
825
if self ._read_snmr (socket_num ) in (
@@ -906,7 +906,7 @@ def socket_write(
906
906
# update sn_tx_wr to the value + data size
907
907
pointer = (pointer + bytes_to_write ) & 0xFFFF
908
908
self ._write_sntx_wr (socket_num , pointer )
909
- self .write_sncr (socket_num , _CMD_SOCK_SEND )
909
+ self ._write_sncr (socket_num , _CMD_SOCK_SEND )
910
910
911
911
# check data was transferred correctly
912
912
while not self .read_snir (socket_num ) & _SNIR_SEND_OK :
@@ -1057,6 +1057,11 @@ def _check_link_status(self):
1057
1057
if not self .link_status :
1058
1058
raise ConnectionError ("The Ethernet connection is down." )
1059
1059
1060
+ @staticmethod
1061
+ def _read_socket_reservations () -> list [int ]:
1062
+ """Return the list of reserved sockets."""
1063
+ return WIZNET5K ._sockets_reserved
1064
+
1060
1065
def _read_mr (self ) -> int :
1061
1066
"""Read from the Mode Register (MR)."""
1062
1067
return int .from_bytes (self ._read (_REG_MR [self ._chip_type ], 0x00 ), "big" )
@@ -1175,18 +1180,22 @@ def _read_sndipr(self, sock) -> bytes:
1175
1180
)
1176
1181
return bytes (data )
1177
1182
1178
- def write_sndipr (self , sock : int , ip_addr : bytes ) -> None :
1183
+ def _write_sndipr (self , sock : int , ip_addr : bytes ) -> None :
1179
1184
"""Write to socket destination IP Address."""
1180
1185
for offset , value in enumerate (ip_addr ):
1181
1186
self ._write_socket_register (
1182
1187
sock , _REG_SNDIPR [self ._chip_type ] + offset , value
1183
1188
)
1184
1189
1185
- def write_sndport (self , sock : int , port : int ) -> None :
1190
+ def _read_sndport (self , sock : int ) -> int :
1191
+ """Read socket destination port."""
1192
+ return self ._read_two_byte_sock_reg (sock , _REG_SNDPORT [self ._chip_type ])
1193
+
1194
+ def _write_sndport (self , sock : int , port : int ) -> None :
1186
1195
"""Write to socket destination port."""
1187
1196
self ._write_two_byte_sock_reg (sock , _REG_SNDPORT [self ._chip_type ], port )
1188
1197
1189
- def read_snsr (self , sock : int ) -> int :
1198
+ def _read_snsr (self , sock : int ) -> int :
1190
1199
"""Read Socket n Status Register."""
1191
1200
return self ._read_socket_register (sock , _REG_SNSR [self ._chip_type ])
1192
1201
@@ -1202,15 +1211,15 @@ def _read_snmr(self, sock: int) -> int:
1202
1211
"""Read the socket MR register."""
1203
1212
return self ._read_socket_register (sock , _REG_SNMR )
1204
1213
1205
- def write_snmr (self , sock : int , protocol : int ) -> None :
1214
+ def _write_snmr (self , sock : int , protocol : int ) -> None :
1206
1215
"""Write to Socket n Mode Register."""
1207
1216
self ._write_socket_register (sock , _REG_SNMR , protocol )
1208
1217
1209
- def write_sock_port (self , sock : int , port : int ) -> None :
1218
+ def _write_sock_port (self , sock : int , port : int ) -> None :
1210
1219
"""Write to the socket port number."""
1211
1220
self ._write_two_byte_sock_reg (sock , _REG_SNPORT [self ._chip_type ], port )
1212
1221
1213
- def write_sncr (self , sock : int , data : int ) -> None :
1222
+ def _write_sncr (self , sock : int , data : int ) -> None :
1214
1223
"""Write to socket command register."""
1215
1224
self ._write_socket_register (sock , _REG_SNCR [self ._chip_type ], data )
1216
1225
# Wait for command to complete before continuing.
0 commit comments