Skip to content

Commit 31e565c

Browse files
committed
Merge branch 'feature/mqtt_example_for_user_data' into 'master'
mqtt: Clarify usage of handler args in examples See merge request espressif/esp-idf!12125
2 parents 1544f64 + b568261 commit 31e565c

File tree

5 files changed

+307
-251
lines changed

5 files changed

+307
-251
lines changed

examples/protocols/mqtt/ssl/main/app_main.c

+68-62
Original file line numberDiff line numberDiff line change
@@ -41,78 +41,83 @@ static void send_binary(esp_mqtt_client_handle_t client)
4141
{
4242
spi_flash_mmap_handle_t out_handle;
4343
const void *binary_address;
44-
const esp_partition_t* partition = esp_ota_get_running_partition();
44+
const esp_partition_t *partition = esp_ota_get_running_partition();
4545
esp_partition_mmap(partition, 0, partition->size, SPI_FLASH_MMAP_DATA, &binary_address, &out_handle);
4646
// sending only the configured portion of the partition (if it's less than the partition size)
4747
int binary_size = MIN(CONFIG_BROKER_BIN_SIZE_TO_SEND,partition->size);
4848
int msg_id = esp_mqtt_client_publish(client, "/topic/binary", binary_address, binary_size, 0, 0);
4949
ESP_LOGI(TAG, "binary sent with msg_id=%d", msg_id);
5050
}
5151

52-
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
52+
/*
53+
* @brief Event handler registered to receive MQTT events
54+
*
55+
* This function is called by the MQTT client event loop.
56+
*
57+
* @param handler_args user data registered to the event.
58+
* @param base Event base for the handler(always MQTT Base in this example).
59+
* @param event_id The id for the received event.
60+
* @param event_data The data for the event, esp_mqtt_event_handle_t.
61+
*/
62+
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
5363
{
64+
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
65+
esp_mqtt_event_handle_t event = event_data;
5466
esp_mqtt_client_handle_t client = event->client;
5567
int msg_id;
56-
// your_context_t *context = event->context;
57-
switch (event->event_id) {
58-
case MQTT_EVENT_CONNECTED:
59-
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
60-
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0);
61-
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
62-
63-
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1);
64-
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
65-
66-
msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1");
67-
ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id);
68-
break;
69-
case MQTT_EVENT_DISCONNECTED:
70-
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
71-
break;
72-
73-
case MQTT_EVENT_SUBSCRIBED:
74-
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
75-
msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
76-
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
77-
break;
78-
case MQTT_EVENT_UNSUBSCRIBED:
79-
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
80-
break;
81-
case MQTT_EVENT_PUBLISHED:
82-
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
83-
break;
84-
case MQTT_EVENT_DATA:
85-
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
86-
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
87-
printf("DATA=%.*s\r\n", event->data_len, event->data);
88-
if (strncmp(event->data, "send binary please", event->data_len) == 0) {
89-
ESP_LOGI(TAG, "Sending the binary");
90-
send_binary(client);
91-
}
92-
break;
93-
case MQTT_EVENT_ERROR:
94-
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
95-
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
96-
ESP_LOGI(TAG, "Last error code reported from esp-tls: 0x%x", event->error_handle->esp_tls_last_esp_err);
97-
ESP_LOGI(TAG, "Last tls stack error number: 0x%x", event->error_handle->esp_tls_stack_err);
98-
ESP_LOGI(TAG, "Last captured errno : %d (%s)", event->error_handle->esp_transport_sock_errno,
99-
strerror(event->error_handle->esp_transport_sock_errno));
100-
} else if (event->error_handle->error_type == MQTT_ERROR_TYPE_CONNECTION_REFUSED) {
101-
ESP_LOGI(TAG, "Connection refused error: 0x%x", event->error_handle->connect_return_code);
102-
} else {
103-
ESP_LOGW(TAG, "Unknown error type: 0x%x", event->error_handle->error_type);
104-
}
105-
break;
106-
default:
107-
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
108-
break;
68+
switch ((esp_mqtt_event_id_t)event_id) {
69+
case MQTT_EVENT_CONNECTED:
70+
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
71+
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0);
72+
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
73+
74+
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1);
75+
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
76+
77+
msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1");
78+
ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id);
79+
break;
80+
case MQTT_EVENT_DISCONNECTED:
81+
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
82+
break;
83+
84+
case MQTT_EVENT_SUBSCRIBED:
85+
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
86+
msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
87+
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
88+
break;
89+
case MQTT_EVENT_UNSUBSCRIBED:
90+
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
91+
break;
92+
case MQTT_EVENT_PUBLISHED:
93+
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
94+
break;
95+
case MQTT_EVENT_DATA:
96+
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
97+
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
98+
printf("DATA=%.*s\r\n", event->data_len, event->data);
99+
if (strncmp(event->data, "send binary please", event->data_len) == 0) {
100+
ESP_LOGI(TAG, "Sending the binary");
101+
send_binary(client);
102+
}
103+
break;
104+
case MQTT_EVENT_ERROR:
105+
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
106+
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
107+
ESP_LOGI(TAG, "Last error code reported from esp-tls: 0x%x", event->error_handle->esp_tls_last_esp_err);
108+
ESP_LOGI(TAG, "Last tls stack error number: 0x%x", event->error_handle->esp_tls_stack_err);
109+
ESP_LOGI(TAG, "Last captured errno : %d (%s)", event->error_handle->esp_transport_sock_errno,
110+
strerror(event->error_handle->esp_transport_sock_errno));
111+
} else if (event->error_handle->error_type == MQTT_ERROR_TYPE_CONNECTION_REFUSED) {
112+
ESP_LOGI(TAG, "Connection refused error: 0x%x", event->error_handle->connect_return_code);
113+
} else {
114+
ESP_LOGW(TAG, "Unknown error type: 0x%x", event->error_handle->error_type);
115+
}
116+
break;
117+
default:
118+
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
119+
break;
109120
}
110-
return ESP_OK;
111-
}
112-
113-
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
114-
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
115-
mqtt_event_handler_cb(event_data);
116121
}
117122

118123
static void mqtt_app_start(void)
@@ -124,7 +129,8 @@ static void mqtt_app_start(void)
124129

125130
ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());
126131
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
127-
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
132+
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
133+
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
128134
esp_mqtt_client_start(client);
129135
}
130136

examples/protocols/mqtt/ssl_mutual_auth/main/app_main.c

+66-46
Original file line numberDiff line numberDiff line change
@@ -38,56 +38,75 @@ extern const uint8_t client_key_pem_end[] asm("_binary_client_key_end");
3838
extern const uint8_t server_cert_pem_start[] asm("_binary_mosquitto_org_crt_start");
3939
extern const uint8_t server_cert_pem_end[] asm("_binary_mosquitto_org_crt_end");
4040

41-
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
41+
static void log_error_if_nonzero(const char *message, int error_code)
4242
{
43-
esp_mqtt_client_handle_t client = event->client;
44-
int msg_id;
45-
// your_context_t *context = event->context;
46-
switch (event->event_id) {
47-
case MQTT_EVENT_CONNECTED:
48-
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
49-
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0);
50-
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
51-
52-
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1);
53-
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
54-
55-
msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1");
56-
ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id);
57-
break;
58-
case MQTT_EVENT_DISCONNECTED:
59-
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
60-
break;
61-
62-
case MQTT_EVENT_SUBSCRIBED:
63-
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
64-
msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
65-
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
66-
break;
67-
case MQTT_EVENT_UNSUBSCRIBED:
68-
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
69-
break;
70-
case MQTT_EVENT_PUBLISHED:
71-
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
72-
break;
73-
case MQTT_EVENT_DATA:
74-
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
75-
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
76-
printf("DATA=%.*s\r\n", event->data_len, event->data);
77-
break;
78-
case MQTT_EVENT_ERROR:
79-
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
80-
break;
81-
default:
82-
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
83-
break;
43+
if (error_code != 0) {
44+
ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code);
8445
}
85-
return ESP_OK;
8646
}
8747

88-
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
48+
/*
49+
* @brief Event handler registered to receive MQTT events
50+
*
51+
* This function is called by the MQTT client event loop.
52+
*
53+
* @param handler_args user data registered to the event.
54+
* @param base Event base for the handler(always MQTT Base in this example).
55+
* @param event_id The id for the received event.
56+
* @param event_data The data for the event, esp_mqtt_event_handle_t.
57+
*/
58+
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
59+
{
8960
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
90-
mqtt_event_handler_cb(event_data);
61+
esp_mqtt_event_handle_t event = event_data;
62+
esp_mqtt_client_handle_t client = event->client;
63+
int msg_id;
64+
switch ((esp_mqtt_event_id_t)event_id) {
65+
case MQTT_EVENT_CONNECTED:
66+
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
67+
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0);
68+
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
69+
70+
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1);
71+
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
72+
73+
msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1");
74+
ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id);
75+
break;
76+
case MQTT_EVENT_DISCONNECTED:
77+
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
78+
break;
79+
80+
case MQTT_EVENT_SUBSCRIBED:
81+
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
82+
msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
83+
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
84+
break;
85+
case MQTT_EVENT_UNSUBSCRIBED:
86+
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
87+
break;
88+
case MQTT_EVENT_PUBLISHED:
89+
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
90+
break;
91+
case MQTT_EVENT_DATA:
92+
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
93+
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
94+
printf("DATA=%.*s\r\n", event->data_len, event->data);
95+
break;
96+
case MQTT_EVENT_ERROR:
97+
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
98+
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
99+
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
100+
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
101+
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
102+
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
103+
104+
}
105+
break;
106+
default:
107+
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
108+
break;
109+
}
91110
}
92111

93112
static void mqtt_app_start(void)
@@ -101,7 +120,8 @@ static void mqtt_app_start(void)
101120

102121
ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());
103122
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
104-
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
123+
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
124+
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
105125
esp_mqtt_client_start(client);
106126
}
107127

0 commit comments

Comments
 (0)