summaryrefslogtreecommitdiff
path: root/minion/src
diff options
context:
space:
mode:
Diffstat (limited to 'minion/src')
-rw-r--r--minion/src/gymnasiearbete.cpp5
-rw-r--r--minion/src/wifi_module.cpp54
-rw-r--r--minion/src/wifi_module.hpp9
3 files changed, 68 insertions, 0 deletions
diff --git a/minion/src/gymnasiearbete.cpp b/minion/src/gymnasiearbete.cpp
index 54e8d50..d2a970b 100644
--- a/minion/src/gymnasiearbete.cpp
+++ b/minion/src/gymnasiearbete.cpp
@@ -80,6 +80,11 @@ void setup()
Serial.print(F("IP address: "));
Serial.println(wifi_module.get_local_ip(local_ip));
+ char mac_address[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
+
+ Serial.print(F("MAC address: "));
+ Serial.println(wifi_module.get_mac_address(mac_address));
+
wifi_module.set_multiple_connections_enabled(true);
delay(MILLIS_IN_SECOND);
diff --git a/minion/src/wifi_module.cpp b/minion/src/wifi_module.cpp
index 953e9fa..8a2dd6a 100644
--- a/minion/src/wifi_module.cpp
+++ b/minion/src/wifi_module.cpp
@@ -254,6 +254,60 @@ auto WiFiModule::get_local_ip(char *local_ip_out) noexcept -> const char *
return local_ip_out;
}
+auto WiFiModule::get_mac_address(char *mac_address_out) noexcept -> const char *
+{
+ const auto send_success = _send_serial("AT+CIFSR");
+
+ if (!send_success)
+ {
+ return mac_address_out;
+ }
+
+ auto *buf = util::malloc<char>(strlen(mac_address_out) + 1U);
+
+ if (buf == nullptr)
+ {
+ strcpy(mac_address_out, "Memory allocation failure");
+ return mac_address_out;
+ }
+
+ strcpy(buf, "");
+
+ const auto response_status = _read(10000U, buf);
+
+ if (response_status != WiFiModuleResponseStatus::OK)
+ {
+ free(buf);
+
+ sprintf(
+ mac_address_out,
+ "Response status was not OK. Was %d",
+ static_cast<int>(response_status)
+ );
+
+ return mac_address_out;
+ }
+
+ const auto stamac_title = "CIFSR:STAMAC,\"";
+
+ auto mac_address_start = strstr(buf, stamac_title);
+
+ if (mac_address_start == nullptr)
+ {
+ free(buf);
+ strcpy(mac_address_out, "Response parsing error");
+ return mac_address_out;
+ }
+
+ mac_address_start += strlen(stamac_title);
+
+ util::substr(mac_address_start, mac_address_start + 17U, mac_address_out);
+
+ free(buf);
+
+ return mac_address_out;
+}
+
auto WiFiModule::read_incoming_request() noexcept -> HTTPRequest
{
char request_prefix[] = "+IPD,";
diff --git a/minion/src/wifi_module.hpp b/minion/src/wifi_module.hpp
index 9bc2c20..da4a487 100644
--- a/minion/src/wifi_module.hpp
+++ b/minion/src/wifi_module.hpp
@@ -98,6 +98,15 @@ public:
auto get_local_ip(char *local_ip_out) noexcept -> const char *;
/**
+ * Gets the MAC address of the wifi module.
+ *
+ * @param mac_address_out MAC address output buffer.
+ *
+ * @returns A pointer to the MAC address output buffer.
+ */
+ auto get_mac_address(char *mac_address_out) noexcept -> const char *;
+
+ /**
* Reads a incoming HTTP request.
*
* @returns A request. Has a connection with a ID of -1 if reading the request failed.