@@ -486,14 +486,19 @@ esp_err_t esp_rmaker_self_claim_perform(esp_rmaker_claim_data_t *claim_data)
486486 ESP_LOGE (TAG , "Self claiming not initialised." );
487487 return ESP_ERR_INVALID_STATE ;
488488 }
489+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_STARTED , NULL , 0 );
489490 esp_err_t err = esp_rmaker_claim_perform_init (claim_data );
490491 if (err != ESP_OK ) {
491492 ESP_LOGE (TAG , "Claim Init Sequence Failed." );
493+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_FAILED , NULL , 0 );
492494 return err ;
493495 }
494496 err = esp_rmaker_claim_perform_verify (claim_data );
495497 if (err == ESP_OK ) {
496498 ESP_LOGI (TAG , "Self Claiming was successful. Certificate received." );
499+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_SUCCESSFUL , NULL , 0 );
500+ } else {
501+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_FAILED , NULL , 0 );
497502 }
498503 esp_rmaker_claim_data_free (claim_data );
499504 return err ;
@@ -601,6 +606,7 @@ esp_err_t esp_rmaker_assisted_claim_handle_start(RmakerClaim__RMakerClaimPayload
601606 response -> resppayload -> status = RMAKER_CLAIM__RMAKER_CLAIM_STATUS__Success ;
602607 claim_data -> state = RMAKER_CLAIM_STATE_INIT ;
603608 ESP_LOGI (TAG , "Assisted Claiming Started." );
609+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_STARTED , NULL , 0 );
604610 return ESP_OK ;
605611}
606612
@@ -729,11 +735,16 @@ esp_err_t esp_rmaker_assisted_claim_handle_verify(RmakerClaim__RMakerClaimPayloa
729735 if (handle_claim_verify_response (claim_data ) == ESP_OK ) {
730736 ESP_LOGI (TAG ,"Assisted Claiming was Successful." );
731737 claim_data -> state = RMAKER_CLAIM_STATE_VERIFY_DONE ;
738+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_SUCCESSFUL , NULL , 0 );
732739 if (claim_event_group ) {
733740 xEventGroupSetBits (claim_event_group , CLAIM_TASK_BIT );
734741 }
735742 } else {
743+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_FAILED , NULL , 0 );
736744 response -> resppayload -> status = RMAKER_CLAIM__RMAKER_CLAIM_STATUS__InvalidParam ;
745+ if (claim_event_group ) {
746+ xEventGroupSetBits (claim_event_group , CLAIM_TASK_BIT );
747+ }
737748 return ESP_OK ;
738749 }
739750 }
@@ -792,6 +803,10 @@ esp_err_t esp_rmaker_claiming_handler(uint32_t session_id, const uint8_t *inbuf,
792803 claim_data -> state = RMAKER_CLAIM_STATE_PK_GENERATED ;
793804 resppayload .status = RMAKER_CLAIM__RMAKER_CLAIM_STATUS__Success ;
794805 ESP_LOGW (TAG , "Assisted Claiming Aborted." );
806+ esp_rmaker_post_event (RMAKER_EVENT_CLAIM_FAILED , NULL , 0 );
807+ if (claim_event_group ) {
808+ xEventGroupSetBits (claim_event_group , CLAIM_TASK_BIT );
809+ }
795810 break ;
796811 default :
797812 break ;
@@ -921,10 +936,13 @@ static esp_rmaker_claim_data_t *esp_rmaker_claim_init(void)
921936 ESP_LOGE (TAG , "Claim already initialised" );
922937 return NULL ;
923938 }
924- claim_event_group = xEventGroupCreate ();
939+ /* Create event group if it doesn't exist (for assisted claiming, it may already exist) */
925940 if (!claim_event_group ) {
926- ESP_LOGE (TAG , "Couldn't create event group" );
927- return NULL ;
941+ claim_event_group = xEventGroupCreate ();
942+ if (!claim_event_group ) {
943+ ESP_LOGE (TAG , "Couldn't create event group" );
944+ return NULL ;
945+ }
928946 }
929947 esp_rmaker_claim_data_t * claim_data = NULL ;
930948
@@ -935,14 +953,23 @@ static esp_rmaker_claim_data_t *esp_rmaker_claim_init(void)
935953 if (xTaskCreate (& esp_rmaker_claim_task , "claim_task" , ESP_RMAKER_CLAIM_TASK_STACK_SIZE ,
936954 & claim_data , tskIDLE_PRIORITY , NULL ) != pdPASS ) {
937955 ESP_LOGE (TAG , "Couldn't create Claim task" );
956+ /* On failure, delete event group and reset handle */
938957 vEventGroupDelete (claim_event_group );
958+ claim_event_group = NULL ;
939959 return NULL ;
940960 }
941961
942962 /* Wait for claim init to complete */
943963 xEventGroupWaitBits (claim_event_group , CLAIM_TASK_BIT , false, true, portMAX_DELAY );
964+ #ifdef CONFIG_ESP_RMAKER_SELF_CLAIM
965+ /* For self-claiming, delete event group after PK generation */
944966 vEventGroupDelete (claim_event_group );
945967 claim_event_group = NULL ;
968+ #else
969+ /* For assisted claiming, clear the bit as it would be re-used later*/
970+ xEventGroupClearBits (claim_event_group , CLAIM_TASK_BIT );
971+ #endif
972+ /* For assisted claiming, keep event group for claiming completion signaling */
946973 return claim_data ;
947974}
948975
@@ -960,12 +987,11 @@ esp_err_t esp_rmaker_assisted_claim_perform(esp_rmaker_claim_data_t *claim_data)
960987 ESP_LOGE (TAG , "Assisted claiming not initialised." );
961988 return ESP_ERR_INVALID_STATE ;
962989 }
963- claim_event_group = xEventGroupCreate ();
964990 if (!claim_event_group ) {
965- ESP_LOGE (TAG , "Couldn't create event group" );
966- return ESP_ERR_NO_MEM ;
991+ ESP_LOGE (TAG , "Claim event group not created. " );
992+ return ESP_ERR_INVALID_STATE ;
967993 }
968- /* Wait for assisted claim to complete */
994+ /* Wait for assisted claim to complete (returns immediately if bit already set) */
969995 ESP_LOGI (TAG , "Waiting for assisted claim to finish." );
970996 xEventGroupWaitBits (claim_event_group , CLAIM_TASK_BIT , false, true, portMAX_DELAY );
971997 esp_err_t err = ESP_FAIL ;
@@ -976,16 +1002,20 @@ esp_err_t esp_rmaker_assisted_claim_perform(esp_rmaker_claim_data_t *claim_data)
9761002 esp_event_handler_unregister (NETWORK_PROV_EVENT , NETWORK_PROV_START , & event_handler );
9771003 esp_rmaker_claim_data_free (claim_data );
9781004 vEventGroupDelete (claim_event_group );
1005+ claim_event_group = NULL ;
9791006 return err ;
9801007}
9811008esp_rmaker_claim_data_t * esp_rmaker_assisted_claim_init (void )
9821009{
9831010 ESP_LOGI (TAG , "Initialising Assisted Claiming. This may take time." );
1011+ /* esp_rmaker_claim_init() will create the event group, and for assisted claiming,
1012+ * it will be kept after PK generation for claiming completion signaling */
9841013 esp_rmaker_claim_data_t * claim_data = esp_rmaker_claim_init ();
9851014 if (claim_data ) {
9861015 esp_event_handler_register (NETWORK_PROV_EVENT , NETWORK_PROV_INIT , & event_handler , claim_data );
9871016 esp_event_handler_register (NETWORK_PROV_EVENT , NETWORK_PROV_START , & event_handler , claim_data );
9881017 }
1018+ /* If claim init failed, event group is already cleaned up in esp_rmaker_claim_init() */
9891019 return claim_data ;
9901020}
9911021#endif
0 commit comments