26
26
27
27
28
28
import gc
29
- import time
30
29
from random import randint
31
30
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
33
32
from adafruit_wiznet5k .adafruit_wiznet5k_debug import ( # pylint: disable=ungrouped-imports
34
33
debug_msg ,
35
34
)
@@ -152,7 +151,6 @@ def __init__(
152
151
# DHCP state machine
153
152
self ._dhcp_state = _STATE_INIT
154
153
self ._transaction_id = randint (1 , 0x7FFFFFFF )
155
- self ._start_time = 0.0
156
154
self ._start_ticks = 0
157
155
self ._blocking = False
158
156
self ._renew = None
@@ -165,9 +163,12 @@ def __init__(
165
163
self .dns_server_ip = _UNASSIGNED_IP_ADDR
166
164
167
165
# 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
171
172
172
173
# Host name
173
174
mac_string = "" .join ("{:02X}" .format (o ) for o in mac_address )
@@ -210,8 +211,10 @@ def _dsm_reset(self) -> None:
210
211
self .dns_server_ip = _UNASSIGNED_IP_ADDR
211
212
self ._renew = None
212
213
self ._increment_transaction_id ()
213
- self ._start_time = time .monotonic ()
214
214
self ._start_ticks = ticks_ms ()
215
+ self ._lease = None
216
+ self ._t1 = None
217
+ self ._t2 = None
215
218
216
219
def _increment_transaction_id (self ) -> None :
217
220
"""Increment the transaction ID and roll over from 0x7fffffff to 0."""
@@ -289,11 +292,10 @@ def _process_messaging_states(self, *, message_type: int):
289
292
self ._dhcp_state = _STATE_INIT
290
293
elif message_type == _DHCP_ACK :
291
294
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 )
297
299
self ._increment_transaction_id ()
298
300
if not self ._renew :
299
301
self ._eth .ifconfig = (
@@ -391,16 +393,16 @@ def _dhcp_state_machine(self, *, blocking: bool = False) -> None:
391
393
while True :
392
394
if self ._dhcp_state == _STATE_BOUND :
393
395
now = ticks_ms ()
394
- if ticks_diff (now , self ._t1 ) < 0 :
396
+ if ticks_less (now , self ._t1_timeout ) :
395
397
debug_msg ("No timers have expired. Exiting FSM." , self ._debug )
396
398
return
397
- if ticks_diff ( now , self ._lease ) > 0 :
399
+ if ticks_less ( self ._lease_timeout , now ) :
398
400
debug_msg (
399
401
"Lease has expired, switching state to INIT." , self ._debug
400
402
)
401
403
self ._blocking = True
402
404
self ._dhcp_state = _STATE_INIT
403
- elif ticks_diff ( now , self ._t2 ) > 0 :
405
+ elif ticks_less ( self ._t2_timeout , now ) :
404
406
debug_msg (
405
407
"T2 has expired, switching state to REBINDING." , self ._debug
406
408
)
@@ -414,16 +416,20 @@ def _dhcp_state_machine(self, *, blocking: bool = False) -> None:
414
416
if self ._dhcp_state == _STATE_RENEWING :
415
417
debug_msg ("FSM state is RENEWING." , self ._debug )
416
418
self ._renew = "renew"
417
- self ._start_time = time .monotonic ()
418
419
self ._start_ticks = ticks_ms ()
420
+ self ._lease = None
421
+ self ._t1 = None
422
+ self ._t2 = None
419
423
self ._dhcp_state = _STATE_REQUESTING
420
424
421
425
if self ._dhcp_state == _STATE_REBINDING :
422
426
debug_msg ("FSM state is REBINDING." , self ._debug )
423
427
self ._renew = "rebind"
424
428
self .dhcp_server_ip = _BROADCAST_SERVER_ADDR
425
- self ._start_time = time .monotonic ()
426
429
self ._start_ticks = ticks_ms ()
430
+ self ._lease = None
431
+ self ._t1 = None
432
+ self ._t2 = None
427
433
self ._dhcp_state = _STATE_REQUESTING
428
434
429
435
if self ._dhcp_state == _STATE_INIT :
0 commit comments