@@ -163,7 +163,7 @@ def get_wifi_creds_from_scanlist(transport_mode, obj_transport,
163163
164164def provision_device (transport_mode , pop , userid , secretkey ,
165165 ssid = None , passphrase = None , security_version = None ,
166- sec2_username = '' , sec2_password = '' , device_name = None , session = None ):
166+ sec2_username = '' , sec2_password = '' , device_name = None , session = None , no_retry = False ):
167167 """
168168 Wi-Fi Provision a device
169169
@@ -209,6 +209,9 @@ def provision_device(transport_mode, pop, userid, secretkey,
209209 :param session: Authenticated session object for challenge-response
210210 :type session: object, optional
211211
212+ :param no_retry: If True, exit immediately if prov-ctrl succeeds without prompting for retry
213+ :type no_retry: bool, optional
214+
212215 :return: nodeid (Node Identifier) on Success, None on Failure
213216 :rtype: str | None
214217 """
@@ -337,6 +340,7 @@ def provision_device(transport_mode, pop, userid, secretkey,
337340 print ("No session provided, proceeding with traditional flow" )
338341
339342 dynamic_credentials = not bool (ssid and passphrase )
343+ prov_ctrl_succeeded = False # Track if prov-ctrl reset succeeded
340344
341345 def prompt_yes_no (prompt , default = False ):
342346 while True :
@@ -350,35 +354,48 @@ def prompt_yes_no(prompt, default=False):
350354 print ('Please respond with yes or no (y/n).' )
351355
352356 def request_device_reset ():
357+ nonlocal prov_ctrl_succeeded
353358 # Try reset silently - only show messages if it succeeds
354359 try :
355360 reset_ok = esp_prov .ctrl_reset (obj_transport , obj_security )
356361 except RuntimeError as err :
362+ prov_ctrl_succeeded = False
357363 return False
358364
359365 if not reset_ok :
366+ prov_ctrl_succeeded = False
360367 return False
361368
362369 # Only show message if reset succeeded
363370 print ('Device reset via prov-ctrl successful.' )
371+ prov_ctrl_succeeded = True
364372 time .sleep (2 )
365373 return True
366374
367375 def handle_retry (reason_msg ):
368- nonlocal ssid , passphrase , dynamic_credentials
376+ nonlocal ssid , passphrase , dynamic_credentials , prov_ctrl_succeeded
369377 if reason_msg :
370378 print (reason_msg )
371379
372380 # Try to reset device state before asking user if they want to retry
373381 if not request_device_reset ():
374382 # If reset failed, print error message and exit without offering retry
375383 # Don't mention prov-ctrl since it failed silently
384+ prov_ctrl_succeeded = False
376385 print ('Provisioning Failed. Reset your board to factory defaults and retry.' )
377386 return False
378387
388+ # If --no-retry is set and reset succeeded, exit with message
389+ # Don't show factory defaults message since prov-ctrl succeeded
390+ if no_retry :
391+ print ('Device is reset to provisioning. Please try again' )
392+ return False
393+
379394 # Only offer retry if reset succeeded
380395 if not prompt_yes_no ('Would you like to retry provisioning? [y/N]: ' ):
381- print ('Provisioning Failed. Reset your board to factory defaults and retry.' )
396+ # User declined retry, but prov-ctrl succeeded, so don't ask to reset to factory defaults
397+ # Since prov-ctrl succeeded, device is already reset to provisioning state
398+ print ('Provisioning cancelled.' )
382399 return False
383400
384401 # If we have an SSID, offer to retry with the same SSID but new password
@@ -444,13 +461,15 @@ def wait_for_wifi_connection():
444461 passphrase ):
445462 if handle_retry ("Sending Wi-Fi credentials to node - Failed" ):
446463 continue
447- return None
464+ # Return tuple with prov_ctrl_succeeded flag
465+ return (None , False , prov_ctrl_succeeded )
448466 print ("Sending Wi-Fi credentials to node - Successful" )
449467
450468 if not esp_prov .apply_wifi_config (obj_transport , obj_security ):
451469 if handle_retry ("Applying Wi-Fi config to node - Failed" ):
452470 continue
453- return None
471+ # Return tuple with prov_ctrl_succeeded flag
472+ return (None , False , prov_ctrl_succeeded )
454473 print ("Applying Wi-Fi config to node - Successful" )
455474
456475 success , status = wait_for_wifi_connection ()
@@ -464,7 +483,8 @@ def wait_for_wifi_connection():
464483 reason_msg = f"Wi-Fi Provisioning Failed. Unexpected status: { status } "
465484
466485 if not handle_retry (reason_msg ):
467- return None
486+ # Return tuple with prov_ctrl_succeeded flag
487+ return (None , False , prov_ctrl_succeeded )
468488
469489
470490if __name__ == '__main__' :
0 commit comments