Skip to content

Commit a9a9fe7

Browse files
euripedesrochadavid-cermak
authored andcommitted
Adds unregister event API
- Added to enable users to unregister event handler. Closes espressif/esp-idf#9194
1 parent f14eeb9 commit a9a9fe7

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

include/mqtt_client.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,19 @@ esp_err_t esp_mqtt_client_register_event(esp_mqtt_client_handle_t client,
547547
esp_event_handler_t event_handler,
548548
void *event_handler_arg);
549549

550+
/**
551+
* @brief Unregisters mqtt event
552+
*
553+
* @param client mqtt client handle
554+
* @param event event ID
555+
* @param event_handler handler to unregister
556+
*
557+
* @return ESP_ERR_NO_MEM if failed to allocate
558+
* ESP_ERR_INVALID_ARG on invalid event ID
559+
* ESP_OK on success
560+
*/
561+
esp_err_t esp_mqtt_client_unregister_event(esp_mqtt_client_handle_t client, esp_mqtt_event_id_t event, esp_event_handler_t event_handler);
562+
550563
/**
551564
* @brief Get outbox size
552565
*

mqtt_client.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2056,6 +2056,23 @@ esp_err_t esp_mqtt_client_register_event(esp_mqtt_client_handle_t client, esp_mq
20562056
#endif
20572057
}
20582058

2059+
esp_err_t esp_mqtt_client_unregister_event(esp_mqtt_client_handle_t client, esp_mqtt_event_id_t event, esp_event_handler_t event_handler)
2060+
{
2061+
if (client == NULL) {
2062+
return ESP_ERR_INVALID_ARG;
2063+
}
2064+
#ifdef MQTT_SUPPORTED_FEATURE_EVENT_LOOP
2065+
if (client->config->event_handle) {
2066+
ESP_LOGW(TAG, "Unregistering event loop while event callback is not null, clearing callback");
2067+
client->config->event_handle = NULL;
2068+
}
2069+
2070+
return esp_event_handler_unregister_with(client->config->event_loop_handle, MQTT_EVENTS, event, event_handler);
2071+
#else
2072+
ESP_LOGE(TAG, "Unregistering event handler while event loop not available in IDF version %s", IDF_VER);
2073+
return ESP_FAIL;
2074+
#endif
2075+
}
20592076

20602077
static void esp_mqtt_client_dispatch_transport_error(esp_mqtt_client_handle_t client)
20612078
{

0 commit comments

Comments
 (0)