diff --git a/Kconfig b/Kconfig index 3439bfb..f798f2d 100644 --- a/Kconfig +++ b/Kconfig @@ -78,4 +78,19 @@ config MQTT_TASK_STACK_SIZE help MQTT task stack size +config MQTT_TASK_CORE_SELECTION_ENABLED + bool "Enable MQTT task core selection" + default false + help + This will enable core selection + +choice + depends on MQTT_TASK_CORE_SELECTION_ENABLED + prompt "Core to use ?" + config MQTT_USE_CORE_0 + bool "Core 0" + config MQTT_USE_CORE_1 + bool "Core 1" + endchoice + endmenu diff --git a/include/mqtt_config.h b/include/mqtt_config.h index b10744e..c0b4ab7 100644 --- a/include/mqtt_config.h +++ b/include/mqtt_config.h @@ -59,6 +59,19 @@ #define MQTT_WSS_DEFAULT_PORT 443 #endif +#define MQTT_CORE_SELECTION_ENABLED CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED + +#ifdef CONFIG_MQTT_USE_CORE_0 + #define MQTT_TASK_CORE 0 +#else + #ifdef CONFIG_MQTT_USE_CORE_1 + #define MQTT_TASK_CORE 1 + #else + #define MQTT_TASK_CORE 0 + #endif +#endif + + #define MQTT_ENABLE_SSL CONFIG_MQTT_TRANSPORT_SSL #define MQTT_ENABLE_WS CONFIG_MQTT_TRANSPORT_WEBSOCKET #define MQTT_ENABLE_WSS CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE diff --git a/mqtt_client.c b/mqtt_client.c index 58b518c..8264024 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -736,10 +736,19 @@ esp_err_t esp_mqtt_client_start(esp_mqtt_client_handle_t client) ESP_LOGE(TAG, "Client has started"); return ESP_FAIL; } - if (xTaskCreate(esp_mqtt_task, "mqtt_task", client->config->task_stack, client, client->config->task_prio, NULL) != pdTRUE) { - ESP_LOGE(TAG, "Error create mqtt task"); - return ESP_FAIL; - } +#if MQTT_CORE_SELECTION_ENABLED + ESP_LOGD(TAG, "Core selection enabled on %u", MQTT_TASK_CORE); + if (xTaskCreatePinnedToCore(esp_mqtt_task, "mqtt_task", client->config->task_stack, client, client->config->task_prio, NULL, MQTT_TASK_CORE) != pdTRUE) { + ESP_LOGE(TAG, "Error create mqtt task"); + return ESP_FAIL; + } +#else + ESP_LOGD(TAG, "Core selection disabled"); + if (xTaskCreate(esp_mqtt_task, "mqtt_task", client->config->task_stack, client, client->config->task_prio, NULL) != pdTRUE) { + ESP_LOGE(TAG, "Error create mqtt task") ; + return ESP_FAIL; + } +#endif return ESP_OK; }