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,14 @@ 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
+ lease = self ._lease or 60
296
+ self ._lease_timeout = ticks_add (self ._start_ticks , lease * 1000 )
297
+ self ._t1_timeout = ticks_add (
298
+ self ._start_ticks , (self ._t1 or (lease // 2 )) * 1000
299
+ )
300
+ self ._t2_timeout = ticks_add (
301
+ self ._start_ticks , (self ._t2 or (lease - lease // 8 )) * 1000
295
302
)
296
- self ._lease = ticks_add (self ._lease , self ._start_ticks )
297
303
self ._increment_transaction_id ()
298
304
if not self ._renew :
299
305
self ._eth .ifconfig = (
@@ -391,16 +397,16 @@ def _dhcp_state_machine(self, *, blocking: bool = False) -> None:
391
397
while True :
392
398
if self ._dhcp_state == _STATE_BOUND :
393
399
now = ticks_ms ()
394
- if ticks_diff (now , self ._t1 ) < 0 :
400
+ if ticks_less (now , self ._t1_timeout ) :
395
401
debug_msg ("No timers have expired. Exiting FSM." , self ._debug )
396
402
return
397
- if ticks_diff ( now , self ._lease ) > 0 :
403
+ if ticks_less ( self ._lease_timeout , now ) :
398
404
debug_msg (
399
405
"Lease has expired, switching state to INIT." , self ._debug
400
406
)
401
407
self ._blocking = True
402
408
self ._dhcp_state = _STATE_INIT
403
- elif ticks_diff ( now , self ._t2 ) > 0 :
409
+ elif ticks_less ( self ._t2_timeout , now ) :
404
410
debug_msg (
405
411
"T2 has expired, switching state to REBINDING." , self ._debug
406
412
)
@@ -414,16 +420,20 @@ def _dhcp_state_machine(self, *, blocking: bool = False) -> None:
414
420
if self ._dhcp_state == _STATE_RENEWING :
415
421
debug_msg ("FSM state is RENEWING." , self ._debug )
416
422
self ._renew = "renew"
417
- self ._start_time = time .monotonic ()
418
423
self ._start_ticks = ticks_ms ()
424
+ self ._lease = None
425
+ self ._t1 = None
426
+ self ._t2 = None
419
427
self ._dhcp_state = _STATE_REQUESTING
420
428
421
429
if self ._dhcp_state == _STATE_REBINDING :
422
430
debug_msg ("FSM state is REBINDING." , self ._debug )
423
431
self ._renew = "rebind"
424
432
self .dhcp_server_ip = _BROADCAST_SERVER_ADDR
425
- self ._start_time = time .monotonic ()
426
433
self ._start_ticks = ticks_ms ()
434
+ self ._lease = None
435
+ self ._t1 = None
436
+ self ._t2 = None
427
437
self ._dhcp_state = _STATE_REQUESTING
428
438
429
439
if self ._dhcp_state == _STATE_INIT :
0 commit comments