main/task_mqtt.c

changeset 15
64028e178ff1
parent 12
bb72d448e282
child 18
12506716211c
--- a/main/task_mqtt.c	Tue Apr 04 14:33:26 2023 +0200
+++ b/main/task_mqtt.c	Tue Apr 04 20:57:49 2023 +0200
@@ -47,12 +47,23 @@
 extern uint8_t			Dimmer4;
 
 
-void connect_mqtt(bool state)
+void request_mqtt(bool state)
 {
-    if (state)
-    	xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECT);
-    else
-    	xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_DISCONNECT);
+    if (state) {
+	if (xEventGroupGetBits(xEventGroupMQTT) & TASK_MQTT_CONNECTED) {
+	    ESP_LOGW(TAG, "request_mqtt(true) but already connected");
+	} else {
+    	    xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECT);
+	}
+    } else {
+	if (xEventGroupGetBits(xEventGroupMQTT) & TASK_MQTT_DISCONNECT) {
+	    ESP_LOGW(TAG, "request_mqtt(false) already in progress");
+	} else if (! (xEventGroupGetBits(xEventGroupMQTT) & TASK_MQTT_CONNECTED)) {
+	    ESP_LOGW(TAG, "request_mqtt(false) but already disconnected");
+	} else {
+    	    xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_DISCONNECT);
+	}
+    }
 }
 
 
@@ -446,7 +457,7 @@
 	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT);
 
 	} else if (uxBits & TASK_MQTT_DISCONNECT) {
-	    ESP_LOGI(TAG, "Request MQTT disconnect");
+	    ESP_LOGI(TAG, "Request MQTT disconnect start");
 	    /*
 	     * Unsubscribe if connected
 	     */
@@ -479,7 +490,10 @@
                 ESP_LOGI(TAG, "stopped");
             }
 
+	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECTED);
+	    xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED);
 	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_DISCONNECT);
+	    ESP_LOGI(TAG, "Request MQTT disconnect done");
 	}
     }
 }

mercurial