diff --git a/host/host_central_mast/lib/Utilities/Utilities.cpp b/host/host_central_mast/lib/Utilities/Utilities.cpp index 9439cc40cd2eca9553353a3544f0fd98e5341562..20059901e68c099351901d047b5d41ad8e431c4a 100644 --- a/host/host_central_mast/lib/Utilities/Utilities.cpp +++ b/host/host_central_mast/lib/Utilities/Utilities.cpp @@ -179,4 +179,51 @@ String getMacAddressAsString(const uint8_t *mac) { } esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "MAC: %s\n", macAddress.c_str()); return macAddress; +} + +String documentToLineProtocolString(const DynamicJsonDocument &doc) { + String measurementType = doc["measurementType"].as<String>(); + String sensorName = doc["sensorName"].as<String>(); + String timestamp = doc["timestamp"].as<String>(); + String protocol = doc["protocol"].as<String>(); + String value = doc["value"].as<String>(); + String channel = doc["channel"].as<String>(); + String clientMac = doc["clientMac"].as<String>(); + + String lineData = sensorName + ",clientMac=" + clientMac + ",protocol=" + protocol + ",channel=" + channel + " " + + measurementType + "=" + value + " " + timestamp; + return lineData; +} +DynamicJsonDocument parseReceivedJsonData(char *data) { + DynamicJsonDocument doc(250); + auto error = deserializeJson(doc, data); + if (error) { + esp_log_write(ESP_LOG_ERROR, TAG_ESPNOW, "Error while parsing json: %s\n", error.c_str()); + // TODO error handling + } + return doc; +} + +String documentToServerReadableString(const DynamicJsonDocument &doc) { + StaticJsonDocument<1024> serverDoc; + String hostMacAddressString = WiFi.macAddress(); + hostMacAddressString.replace(":", ""); + hostMacAddressString.toLowerCase(); + + serverDoc["host"] = hostMacAddressString; + serverDoc["client"] = doc["clientMac"].as<String>(); + serverDoc["sensorProtocol"] = doc["protocol"].as<String>(); + serverDoc["protocolAddress"] = doc["channel"].as<String>(); + serverDoc["hardwareName"] = doc["sensorName"].as<String>(); + // each value is a element in the readigs array + JsonArray readings = serverDoc.createNestedArray("readings"); + JsonObject reading = readings.createNestedObject(); + reading["name"] = doc["measurementType"].as<String>(); + reading["value"] = doc["value"].as<float>(); + serverDoc["time"] = doc["timestamp"].as<uint32_t>(); + + String serverString; + serializeJson(serverDoc, serverString); + esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Server readable data: %s\n", serverString.c_str()); + return serverString; } \ No newline at end of file diff --git a/host/host_central_mast/lib/Utilities/Utilities.h b/host/host_central_mast/lib/Utilities/Utilities.h index b78843c62ef70dc76de3390827f7a2a77b660191..dae9e62d88f82b3d1a0b7f145d51f3001ffe5b68 100644 --- a/host/host_central_mast/lib/Utilities/Utilities.h +++ b/host/host_central_mast/lib/Utilities/Utilities.h @@ -5,6 +5,7 @@ #ifndef HOST_CENTRAL_MAST_UTILITIES_H #define HOST_CENTRAL_MAST_UTILITIES_H +#include "ArduinoJson.h" #include "SD.h" #include "SDCardException.h" #include "SDSetupException.h" @@ -12,6 +13,7 @@ #include <Definitions.h> #include <WString.h> #include <list> +#include "WiFi.h" File openDirectory(const String &dirname); std::list<String> getFilesInDirectory(const String &dirname); @@ -24,4 +26,8 @@ void setupSDCard(int MISO, int MOSI, int SCLK, int CS); void saveStringToSDCard(const std::string &dataString); void turnOffLEDs(); String getMacAddressAsString(const uint8_t *mac); +String documentToLineProtocolString(const DynamicJsonDocument &doc); +DynamicJsonDocument parseReceivedJsonData(char *data); +String documentToServerReadableString(const DynamicJsonDocument &doc); + #endif // HOST_CENTRAL_MAST_UTILITIES_H diff --git a/host/host_central_mast/src/main.cpp b/host/host_central_mast/src/main.cpp index 0eea7a56d93a7631fd90eefc87ab051e93fef1ac..97ec5455b64d4a27d12b9ffb6cb266b71507370c 100644 --- a/host/host_central_mast/src/main.cpp +++ b/host/host_central_mast/src/main.cpp @@ -9,6 +9,7 @@ #include "MessageType.h" #include "SDCardLogger.h" #include "SPI.h" +#include "Utilities.h" #include <ArduinoJson.h> #include <Definitions.h> #include <ESP32Time.h> @@ -20,6 +21,7 @@ #include <queue> #include <sys/unistd.h> +// TODO: TimeManager should handle this or rename TimeManager to NTPManager ESP32Time rtc; #define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb @@ -54,42 +56,6 @@ void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status) { // go to sleep } -String getMacAddressAsString(const uint8_t *mac); - -DynamicJsonDocument parseReceivedJsonData(char *data); - -void saveStringToSDCard(const std::string &dataString); - -String documentToLineProtocolString(const DynamicJsonDocument &doc); - -void turnOffLEDs(); - -void setupSDCard(); - -String documentToServerReadableString(const DynamicJsonDocument &doc) { - StaticJsonDocument<1024> serverDoc; - String hostMacAddressString = WiFi.macAddress(); - hostMacAddressString.replace(":", ""); - hostMacAddressString.toLowerCase(); - - serverDoc["host"] = hostMacAddressString; - serverDoc["client"] = doc["clientMac"].as<String>(); - serverDoc["sensorProtocol"] = doc["protocol"].as<String>(); - serverDoc["protocolAddress"] = doc["channel"].as<String>(); - serverDoc["hardwareName"] = doc["sensorName"].as<String>(); - // each value is a element in the readigs array - JsonArray readings = serverDoc.createNestedArray("readings"); - JsonObject reading = readings.createNestedObject(); - reading["name"] = doc["measurementType"].as<String>(); - reading["value"] = doc["value"].as<float>(); - serverDoc["time"] = doc["timestamp"].as<uint32_t>(); - - String serverString; - serializeJson(serverDoc, serverString); - esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Server readable data: %s\n", serverString.c_str()); - return serverString; -} - void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) { esp_log_write(ESP_LOG_INFO, TAG_ESPNOW, "Message recieved\n"); // copy received data to a char array @@ -141,28 +107,8 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) { esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, (success == ESP_OK) ? "Response sent\n" : "Failed to respond\n"); } -String documentToLineProtocolString(const DynamicJsonDocument &doc) { - String measurementType = doc["measurementType"].as<String>(); - String sensorName = doc["sensorName"].as<String>(); - String timestamp = doc["timestamp"].as<String>(); - String protocol = doc["protocol"].as<String>(); - String value = doc["value"].as<String>(); - String channel = doc["channel"].as<String>(); - String clientMac = doc["clientMac"].as<String>(); - - String lineData = sensorName + ",clientMac=" + clientMac + ",protocol=" + protocol + ",channel=" + channel + " " - + measurementType + "=" + value + " " + timestamp; - return lineData; -} - -DynamicJsonDocument parseReceivedJsonData(char *data) { - DynamicJsonDocument doc(250); - auto error = deserializeJson(doc, data); - if (error) { - esp_log_write(ESP_LOG_ERROR, TAG_ESPNOW, "Error while parsing json: %s\n", error.f_str()); - // TODO error handling - } - return doc; +[[noreturn]] void esp_loop(){ + while (true){} } [[noreturn]] void ESPNOWReceiveTask(void *parameter) { @@ -198,15 +144,14 @@ DynamicJsonDocument parseReceivedJsonData(char *data) { esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Mac announced!"); } - while (true) { - } + esp_loop(); } void setup() { // Set console baud rate Serial.begin(115200); delay(10); - setupSDCard(); + setupSDCard(SD_MISO, SD_MOSI, SD_SCLK, SD_CS); SDCardLogger::printDebugToSerial(true);