From 4f655c608196619050ab3798a8473e281c8d2406 Mon Sep 17 00:00:00 2001
From: Moritz Perschke <moritz.perschke@uibk.ac.at>
Date: Mon, 5 Dec 2022 14:51:22 +0100
Subject: [PATCH] host change should now be handled properly

---
 .../client/lib/espnow/src/ESPNow.cpp          | 29 ++++++++++++-------
 host/esp-t-sim7000g/src/main.cpp              |  6 ++--
 2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp
index 81d1195..990ed1f 100644
--- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp
+++ b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp
@@ -22,7 +22,7 @@ void get_host_mac(uint8_t *destination)
 		preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
 	} else {
 		memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-		ESP_LOGE(TAG, "Backup MAC address used");
+		ESP_LOGI(TAG, "Backup MAC address used");
 	}
 	preferences.end();
 }
@@ -53,47 +53,54 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
 	// assume host change not happening, rare event
 	// => on host change, broadcast 
 	ESP_LOGE(TAG, "Message recieved");
-	preferences.begin("config", false);
 	config received_msg;
 	memcpy(&received_msg, incomingData, sizeof(received_msg)); // TODO: check for valid mac
 														  // all the esp32 macs so far use the same first 3(?) bytes so maybe use that	
 	switch (received_msg.type){
 		case dataAck:{
+			ESP_LOGI(TAG, "dataAck received.");
 			msg_recv = true;
 			Time::getInstance().setTime(
 			received_msg.epoch_seconds); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
 			Serial.println(Time::getInstance().getEpochSeconds());
+			preferences.begin("config", false);		
 			if (!preferences.isKey("host")) {
-				preferences.putBytes("host", received_msg.host, sizeof(received_msg.host));
+				if(preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)) > 0){;
 				ESP_LOGI(TAG, "host MAC address saved to flash");
+				}
 
 				// add host to peers
 				add_host_to_peers(received_msg);
 			}
+			preferences.end();
 		}
 		case hostChange:{
+			ESP_LOGI(TAG, "hostChange received");
 			Time::getInstance().setTime(received_msg.epoch_seconds);
 			// delete old host
+			preferences.begin("config", false);		
 			if(preferences.isKey("host")){
+				ESP_LOGI(TAG, "removing old host");
 				uint8_t old[6];
-				get_host_mac(old);
+				preferences.end();
+				get_host_mac(old); // maybe problem here, re-opening preferences
 				esp_now_del_peer(old);
 			}
 			// add new host
-			preferences.putBytes("host", received_msg.host, sizeof(received_msg.host));
-			ESP_LOGI(TAG, "Host Mac address saved to flash:");
-			for(int i=0; i<6; i++){
-				Serial.print(received_msg.host[i], HEX);
-				Serial.print(":");
+			preferences.begin("config", false);		
+			if(preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)) > 0){
+				ESP_LOGI(TAG, "Host Mac address saved to flash:");
 			}
-			Serial.println();
+			else{
+				ESP_LOGI(TAG, "Couldn't save Host Mac to flash");
+			}
+			preferences.end();
 			add_host_to_peers(received_msg);
 		}
 		default:{
 			break;
 		}
 	}
-	preferences.end();
 }
 
 
diff --git a/host/esp-t-sim7000g/src/main.cpp b/host/esp-t-sim7000g/src/main.cpp
index 9952aef..ff11b84 100644
--- a/host/esp-t-sim7000g/src/main.cpp
+++ b/host/esp-t-sim7000g/src/main.cpp
@@ -139,7 +139,7 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
 
 	if(!esp_now_is_peer_exist(mac)){
 		esp_now_peer_info_t client = {};
-		memcpy(client.peer_addr, mac, 6);
+		memcpy(client.peer_addr, mac, sizeof(uint8_t) * 6);
 		client.encrypt = false;
 		client.channel = 0;
 
@@ -171,13 +171,13 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
 	queue.push(lineData);
 	xSemaphoreGive(xMutex);
 
-	response response;
+	response response = {};
 	response.type = dataAck;
 	esp_read_mac(response.mac, ESP_MAC_WIFI_STA);
 	response.time = rtc.getEpoch();
 	esp_err_t success = esp_now_send(mac, (uint8_t*) &response, sizeof(response));
 	esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW.c_str(), 
-		(success == ESP_OK) ? "Response sent." : "Failed to respond");
+		(success == ESP_OK) ? "Response sent\n" : "Failed to respond\n");
 }
 
 String documentToLineProtocolString(const DynamicJsonDocument &doc)
-- 
GitLab