mirror of
https://github.com/espressif/esp-mqtt.git
synced 2025-07-30 02:38:19 +02:00
Add reconnect time as a configurable parameter.
Closes IDF-1126
This commit is contained in:
@ -166,6 +166,7 @@ typedef struct {
|
|||||||
int refresh_connection_after_ms; /*!< Refresh connection after this value (in milliseconds) */
|
int refresh_connection_after_ms; /*!< Refresh connection after this value (in milliseconds) */
|
||||||
const struct psk_key_hint* psk_hint_key; /*!< Pointer to PSK struct defined in esp_tls.h to enable PSK authentication (as alternative to certificate verification). If not NULL and server/client certificates are NULL, PSK is enabled */
|
const struct psk_key_hint* psk_hint_key; /*!< Pointer to PSK struct defined in esp_tls.h to enable PSK authentication (as alternative to certificate verification). If not NULL and server/client certificates are NULL, PSK is enabled */
|
||||||
bool use_global_ca_store; /*!< Use a global ca_store for all the connections in which this bool is set. */
|
bool use_global_ca_store; /*!< Use a global ca_store for all the connections in which this bool is set. */
|
||||||
|
int reconnect_timeout_ms; /*!< Reconnect to the broker after this value in miliseconds if auto reconnect is not disabled */
|
||||||
} esp_mqtt_client_config_t;
|
} esp_mqtt_client_config_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#define MQTT_PROTOCOL_311 CONFIG_MQTT_PROTOCOL_311
|
#define MQTT_PROTOCOL_311 CONFIG_MQTT_PROTOCOL_311
|
||||||
#define MQTT_RECONNECT_TIMEOUT_MS (10*1000)
|
#define MQTT_RECON_DEFAULT_MS (10*1000)
|
||||||
#define MQTT_POLL_READ_TIMEOUT_MS (1000)
|
#define MQTT_POLL_READ_TIMEOUT_MS (1000)
|
||||||
|
|
||||||
#if CONFIG_MQTT_BUFFER_SIZE
|
#if CONFIG_MQTT_BUFFER_SIZE
|
||||||
|
@ -77,6 +77,7 @@ typedef struct {
|
|||||||
void *user_context;
|
void *user_context;
|
||||||
int network_timeout_ms;
|
int network_timeout_ms;
|
||||||
int refresh_connection_after_ms;
|
int refresh_connection_after_ms;
|
||||||
|
int reconnect_timeout_ms;
|
||||||
} mqtt_config_storage_t;
|
} mqtt_config_storage_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -245,6 +246,13 @@ esp_err_t esp_mqtt_set_config(esp_mqtt_client_handle_t client, const esp_mqtt_cl
|
|||||||
if (config->disable_auto_reconnect == cfg->auto_reconnect) {
|
if (config->disable_auto_reconnect == cfg->auto_reconnect) {
|
||||||
cfg->auto_reconnect = !config->disable_auto_reconnect;
|
cfg->auto_reconnect = !config->disable_auto_reconnect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config->reconnect_timeout_ms) {
|
||||||
|
cfg->reconnect_timeout_ms = config->reconnect_timeout_ms;
|
||||||
|
} else {
|
||||||
|
cfg->reconnect_timeout_ms = MQTT_RECON_DEFAULT_MS;
|
||||||
|
}
|
||||||
|
|
||||||
MQTT_API_UNLOCK_FROM_OTHER_TASK(client);
|
MQTT_API_UNLOCK_FROM_OTHER_TASK(client);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
_mqtt_set_config_failed:
|
_mqtt_set_config_failed:
|
||||||
@ -353,7 +361,7 @@ static esp_err_t esp_mqtt_connect(esp_mqtt_client_handle_t client, int timeout_m
|
|||||||
static esp_err_t esp_mqtt_abort_connection(esp_mqtt_client_handle_t client)
|
static esp_err_t esp_mqtt_abort_connection(esp_mqtt_client_handle_t client)
|
||||||
{
|
{
|
||||||
esp_transport_close(client->transport);
|
esp_transport_close(client->transport);
|
||||||
client->wait_timeout_ms = MQTT_RECONNECT_TIMEOUT_MS;
|
client->wait_timeout_ms = client->config->reconnect_timeout_ms;
|
||||||
client->reconnect_tick = platform_tick_get_ms();
|
client->reconnect_tick = platform_tick_get_ms();
|
||||||
client->state = MQTT_STATE_WAIT_TIMEOUT;
|
client->state = MQTT_STATE_WAIT_TIMEOUT;
|
||||||
ESP_LOGD(TAG, "Reconnect after %d ms", client->wait_timeout_ms);
|
ESP_LOGD(TAG, "Reconnect after %d ms", client->wait_timeout_ms);
|
||||||
@ -1379,7 +1387,7 @@ int esp_mqtt_client_publish(esp_mqtt_client_handle_t client, const char *topic,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qos > 0) {
|
if (qos > 0) {
|
||||||
//Tick is set after transmit to avoid retransmitting too early due slow network speed / big messages
|
//Tick is set after transmit to avoid retransmitting too early due slow network speed / big messages
|
||||||
outbox_set_tick(client->outbox, pending_msg_id, platform_tick_get_ms());
|
outbox_set_tick(client->outbox, pending_msg_id, platform_tick_get_ms());
|
||||||
outbox_set_pending(client->outbox, pending_msg_id, TRANSMITTED);
|
outbox_set_pending(client->outbox, pending_msg_id, TRANSMITTED);
|
||||||
|
Reference in New Issue
Block a user