Skip to content

Commit 93087f3

Browse files
committed
Separate timeout fields from relative time for timeouts.
Use T1 and T2 times from DHCP response if available. Convert relative timeouts to ms. Remove unused _start_time field
1 parent c63bf6b commit 93087f3

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

adafruit_wiznet5k/adafruit_wiznet5k_dhcp.py

+23-17
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@
2626

2727

2828
import gc
29-
import time
3029
from random import randint
3130
from micropython import const
32-
from adafruit_ticks import ticks_ms, ticks_diff, ticks_add
31+
from adafruit_ticks import ticks_ms, ticks_diff, ticks_add, ticks_less
3332
from adafruit_wiznet5k.adafruit_wiznet5k_debug import ( # pylint: disable=ungrouped-imports
3433
debug_msg,
3534
)
@@ -152,7 +151,6 @@ def __init__(
152151
# DHCP state machine
153152
self._dhcp_state = _STATE_INIT
154153
self._transaction_id = randint(1, 0x7FFFFFFF)
155-
self._start_time = 0.0
156154
self._start_ticks = 0
157155
self._blocking = False
158156
self._renew = None
@@ -165,9 +163,12 @@ def __init__(
165163
self.dns_server_ip = _UNASSIGNED_IP_ADDR
166164

167165
# Lease expiry times
168-
self._t1 = 0
169-
self._t2 = 0
170-
self._lease = 0
166+
self._t1_timeout = 0
167+
self._t2_timeout = 0
168+
self._lease_timeout = 0
169+
self._t1 = None
170+
self._t2 = None
171+
self._lease = None
171172

172173
# Host name
173174
mac_string = "".join("{:02X}".format(o) for o in mac_address)
@@ -210,8 +211,10 @@ def _dsm_reset(self) -> None:
210211
self.dns_server_ip = _UNASSIGNED_IP_ADDR
211212
self._renew = None
212213
self._increment_transaction_id()
213-
self._start_time = time.monotonic()
214214
self._start_ticks = ticks_ms()
215+
self._lease = None
216+
self._t1 = None
217+
self._t2 = None
215218

216219
def _increment_transaction_id(self) -> None:
217220
"""Increment the transaction ID and roll over from 0x7fffffff to 0."""
@@ -289,11 +292,10 @@ def _process_messaging_states(self, *, message_type: int):
289292
self._dhcp_state = _STATE_INIT
290293
elif message_type == _DHCP_ACK:
291294
debug_msg("Message is ACK, setting FSM state to BOUND.", self._debug)
292-
self._t1 = ticks_add(self._start_ticks, self._lease // 2)
293-
self._t2 = ticks_diff(
294-
ticks_add(self._start_ticks, self._lease), self._lease // 8
295-
)
296-
self._lease = ticks_add(self._lease, self._start_ticks)
295+
lease = self._lease or 60
296+
self._lease_timeout = ticks_add(self._start_ticks, lease * 1000)
297+
self._t1_timeout = ticks_add(self._start_ticks, (self._t1 or (lease // 2)) * 1000)
298+
self._t2_timeout = ticks_add(self._start_ticks, (self._t2 or (lease - lease // 8)) * 1000)
297299
self._increment_transaction_id()
298300
if not self._renew:
299301
self._eth.ifconfig = (
@@ -391,16 +393,16 @@ def _dhcp_state_machine(self, *, blocking: bool = False) -> None:
391393
while True:
392394
if self._dhcp_state == _STATE_BOUND:
393395
now = ticks_ms()
394-
if ticks_diff(now, self._t1) < 0:
396+
if ticks_less(now, self._t1_timeout):
395397
debug_msg("No timers have expired. Exiting FSM.", self._debug)
396398
return
397-
if ticks_diff(now, self._lease) > 0:
399+
if ticks_less(self._lease_timeout, now):
398400
debug_msg(
399401
"Lease has expired, switching state to INIT.", self._debug
400402
)
401403
self._blocking = True
402404
self._dhcp_state = _STATE_INIT
403-
elif ticks_diff(now, self._t2) > 0:
405+
elif ticks_less(self._t2_timeout, now):
404406
debug_msg(
405407
"T2 has expired, switching state to REBINDING.", self._debug
406408
)
@@ -414,16 +416,20 @@ def _dhcp_state_machine(self, *, blocking: bool = False) -> None:
414416
if self._dhcp_state == _STATE_RENEWING:
415417
debug_msg("FSM state is RENEWING.", self._debug)
416418
self._renew = "renew"
417-
self._start_time = time.monotonic()
418419
self._start_ticks = ticks_ms()
420+
self._lease = None
421+
self._t1 = None
422+
self._t2 = None
419423
self._dhcp_state = _STATE_REQUESTING
420424

421425
if self._dhcp_state == _STATE_REBINDING:
422426
debug_msg("FSM state is REBINDING.", self._debug)
423427
self._renew = "rebind"
424428
self.dhcp_server_ip = _BROADCAST_SERVER_ADDR
425-
self._start_time = time.monotonic()
426429
self._start_ticks = ticks_ms()
430+
self._lease = None
431+
self._t1 = None
432+
self._t2 = None
427433
self._dhcp_state = _STATE_REQUESTING
428434

429435
if self._dhcp_state == _STATE_INIT:

0 commit comments

Comments
 (0)