summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gymnasiearbete.cpp69
-rw-r--r--src/util.cpp35
-rw-r--r--src/util.hpp27
-rw-r--r--src/wifi_module.cpp312
-rw-r--r--src/wifi_module.hpp93
5 files changed, 0 insertions, 536 deletions
diff --git a/src/gymnasiearbete.cpp b/src/gymnasiearbete.cpp
deleted file mode 100644
index 0e1adb5..0000000
--- a/src/gymnasiearbete.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-#include "secrets.hpp"
-#include "wifi_module.hpp"
-
-#include <Arduino.h>
-#include <SoftwareSerial.h>
-#include <string.h>
-
-constexpr auto BAUDRATE = 9600U;
-
-constexpr auto NETWORK_MODULE_RX_PIN = 3;
-constexpr auto NETWORK_MODULE_TX_PIN = 2;
-
-auto wifi_module = WiFiModule(NETWORK_MODULE_RX_PIN, NETWORK_MODULE_TX_PIN);
-
-void setup()
-{
- Serial.begin(BAUDRATE);
-
- pinMode(NETWORK_MODULE_RX_PIN, INPUT);
- pinMode(NETWORK_MODULE_TX_PIN, OUTPUT);
-
- wifi_module.begin(BAUDRATE);
-
- wifi_module.reset();
-
- delay(1000);
-
- auto wifi_module_connected = wifi_module.test();
-
- Serial.print("Wifi module connected: ");
- Serial.println(wifi_module_connected ? "Yes" : "No");
-
- if (!wifi_module_connected)
- {
- while (true)
- {
- }
- }
-
- wifi_module.set_echo_enabled(false);
-
- delay(1000);
-
- const auto wifi_connect_success = wifi_module.connect(WIFI_SSID, WIFI_PASSWORD);
-
- if (wifi_connect_success)
- {
- Serial.print("Connected to wifi network '");
- Serial.print(WIFI_SSID);
- Serial.println("' successfully");
- }
- else
- {
- Serial.print("Failed to connect to wifi network '");
- Serial.print(WIFI_SSID);
- Serial.println("'");
- }
-
- wifi_module.set_wifi_mode(WifiMode::Station);
-
- delay(3000);
-
- char local_ip[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- Serial.print("IP address: ");
- Serial.println(wifi_module.get_local_ip(local_ip));
-}
-
-void loop() {}
diff --git a/src/util.cpp b/src/util.cpp
deleted file mode 100644
index f587781..0000000
--- a/src/util.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "util.hpp"
-
-namespace util
-{
-
-bool str_ends_with(const char *str, const char *other_str) noexcept
-{
- if (str == nullptr || other_str == nullptr)
- {
- return false;
- }
-
- auto str_length = strlen(str);
- auto other_str_length = strlen(other_str);
-
- if (other_str_length > str_length)
- {
- return false;
- }
-
- return strncmp(str + str_length - other_str_length, other_str, other_str_length) == 0;
-}
-
-void substr(const char *str, const char *end, char *dest) noexcept
-{
- auto *dest_head = dest;
-
- for (const char *char_ptr = str; char_ptr + 1 != end; ++char_ptr)
- {
- *dest_head = *char_ptr;
- dest_head++;
- }
-}
-
-} // namespace util
diff --git a/src/util.hpp b/src/util.hpp
deleted file mode 100644
index d6f7f1c..0000000
--- a/src/util.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-namespace util
-{
-
-template <typename Type>
-Type *malloc(size_t size) noexcept
-{
- return static_cast<Type *>(::malloc(size));
-}
-
-bool str_ends_with(const char *str, const char *other_str) noexcept;
-
-/**
- * Extracts a portion of a string.
- *
- * @param str The target string.
- * @param end A pointer to a place inside the target string.
- * @param dest Output buffer.
- */
-void substr(const char *str, const char *end, char *dest) noexcept;
-
-} // namespace util
diff --git a/src/wifi_module.cpp b/src/wifi_module.cpp
deleted file mode 100644
index 2e25dc9..0000000
--- a/src/wifi_module.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-#include "wifi_module.hpp"
-
-#include "util.hpp"
-
-#include <Arduino.h>
-#include <string.h>
-
-WiFiModule::WiFiModule(uint8_t receive_pin, uint8_t transmit_pin) noexcept
- : _serial(receive_pin, transmit_pin)
-{
-}
-
-void WiFiModule::begin(size_t baudrate) noexcept
-{
- _serial.begin(baudrate);
-}
-
-int WiFiModule::get_available() noexcept
-{
- return _serial.available();
-}
-
-void WiFiModule::reset() noexcept
-{
- _send_serial("AT+RST");
-
- char response[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- const auto response_status = _read(2000U, response);
-
- Serial.println(
- response_status == ResponseStatus::OK ? "Reset wifi module"
- : "Failed to reset wifi module"
- );
-}
-
-bool WiFiModule::connect(const char *ssid, const char *password) noexcept
-{
- const char cmd[] = "AT+CWJAP";
-
- auto command_length = strlen(cmd) + strlen(ssid) + strlen(password) + 6U + 1U;
-
- auto *command = util::malloc<char>(command_length);
-
- if (command == nullptr)
- {
- Serial.println("Memory allocation failed for creating full connection command");
- return false;
- }
-
- snprintf(command, command_length, "%s=\"%s\",\"%s\"", cmd, ssid, password);
-
- const auto send_success = _send_serial(command);
-
- if (!send_success)
- {
- Serial.println("Failed to send connection command");
- return false;
- }
-
- free(command);
-
- char response[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- const auto response_status = _read(20000U, response);
-
- if (response_status != ResponseStatus::OK)
- {
- Serial.print("Connection command responded with status ");
- Serial.println(response_status);
- return false;
- }
-
- return true;
-}
-
-void WiFiModule::set_wifi_mode(WifiMode wifi_mode) noexcept
-{
- const char cmd[] = "AT+CWMODE_CUR";
-
- auto command_length = strlen(cmd) + 2U + 1U;
-
- auto *command = util::malloc<char>(command_length);
-
- snprintf(command, command_length, "%s=%u", cmd, static_cast<int>(wifi_mode));
-
- _send_serial(command);
-
- free(command);
-
- char response[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- _read(1500U, response);
-}
-
-void WiFiModule::set_multiple_connections_enabled(bool is_enabled) noexcept
-{
- const char cmd[] = "AT+CIPMUX";
-
- auto command_length = strlen(cmd) + 2U + 1U;
-
- auto *command = util::malloc<char>(command_length);
-
- snprintf(command, command_length, "%s=%u", cmd, is_enabled ? 1U : 0U);
-
- _send_serial(command);
-
- free(command);
-
- char response[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- _read(1500U, response);
-
- // Serial.println(response);
-}
-
-void WiFiModule::set_echo_enabled(bool is_enabled) noexcept
-{
- const char cmd[] = "ATE";
-
- auto command_length = strlen(cmd) + 1U + 1U;
-
- auto *command = util::malloc<char>(command_length);
-
- snprintf(command, command_length, "%s%u", cmd, is_enabled ? 1U : 0U);
-
- _send_serial(command);
-
- free(command);
-
- char response[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- const auto response_status = _read(1500U, response);
-
- if (response_status == ResponseStatus::OK)
- {
- Serial.print("Turned ");
- Serial.print(is_enabled ? "on" : "off");
- Serial.println(" AT commands echo");
- }
- else
- {
- Serial.print("Failed to turn ");
- Serial.print(is_enabled ? "on" : "off");
- Serial.println(" AT commands echo");
- }
-}
-
-void WiFiModule::create_tcp_server(size_t port) noexcept
-{
- const auto cmd = "AT+CIPSERVER";
-
- auto command_length = strlen(cmd) + 7U + 1U;
-
- auto *command = util::malloc<char>(command_length);
-
- snprintf(command, command_length, "%s=1,%u", cmd, port);
-
- _send_serial(command);
-
- free(command);
-
- char response[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- _read(1500U, response);
-
- // Serial.println(response);
-}
-
-bool WiFiModule::test() noexcept
-{
- const auto send_success = _send_serial("AT");
-
- if (!send_success)
- {
- return false;
- }
-
- char response[MAX_NETWORK_MODULE_RESPONSE_LENGTH] = "";
-
- const auto response_status = _read(5000U, response);
-
- if (response_status == ResponseStatus::TIMEOUT)
- {
- return false;
- }
-
- return strcmp(response, "") != 0;
-}
-
-const char *WiFiModule::get_local_ip(char *local_ip_out) noexcept
-{
- const auto command = "AT+CIFSR";
-
- const auto send_success = _send_serial(command);
-
- if (!send_success)
- {
- return local_ip_out;
- }
-
- auto *buf = util::malloc<char>(strlen(local_ip_out));
-
- if (buf == nullptr)
- {
- strcpy(local_ip_out, "Memory allocation failure");
- return local_ip_out;
- }
-
- const auto response_status = _read(10000U, buf);
-
- if (response_status != ResponseStatus::OK)
- {
- free(buf);
-
- sprintf(
- local_ip_out,
- "Response status was not OK. Was %d",
- static_cast<int>(response_status)
- );
-
- return local_ip_out;
- }
-
- const auto *local_ip_end = strstr(buf, "\r\n+CIFSR:STAMAC");
-
- if (local_ip_end == nullptr)
- {
- free(buf);
- strcpy(local_ip_out, "Response parsing error");
- return local_ip_out;
- }
-
- const auto staip_title_length = 16U; // The length of '+CIFSR:STAIP,"'
-
- util::substr(buf + staip_title_length, local_ip_end, local_ip_out);
-
- free(buf);
-
- return local_ip_out;
-}
-
-bool WiFiModule::_send_serial(const char *command) noexcept
-{
- auto full_command_length = strlen(command) + 2U + 1U;
-
- auto *full_command = util::malloc<char>(full_command_length);
-
- if (full_command == nullptr)
- {
- return false;
- }
-
- snprintf(full_command, full_command_length, "%s\r\n", command);
-
- _serial.print(full_command);
-
- // Serial.print("Sent command: ");
- // Serial.println(full_command);
-
- free(full_command);
-
- return true;
-}
-
-ResponseStatus WiFiModule::_read(uint64_t timeout, char *response_out) noexcept
-{
- const auto start_time = millis();
-
- bool has_end = false;
- auto status = ResponseStatus::TIMEOUT;
-
- // auto *response_out_head = response_out;
-
- while (!has_end && (start_time + timeout) > millis())
- {
- while (_serial.available() != 0)
- {
- char character = _read_byte();
-
- strncat(response_out, &character, 1U);
-
- // *response_out_head = character;
- // response_out_head++;
-
- if (util::str_ends_with(response_out, "OK"))
- {
- status = ResponseStatus::OK;
- has_end = true;
- }
-
- if (util::str_ends_with(response_out, "ERROR"))
- {
- status = ResponseStatus::ERROR;
- has_end = true;
- }
-
- if (util::str_ends_with(response_out, "FAIL"))
- {
- status = ResponseStatus::FAIL;
- has_end = true;
- }
- }
- }
-
- return status;
-}
-
-char WiFiModule::_read_byte() noexcept
-{
- return static_cast<char>(_serial.read());
-}
diff --git a/src/wifi_module.hpp b/src/wifi_module.hpp
deleted file mode 100644
index 5a4148c..0000000
--- a/src/wifi_module.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-#pragma once
-
-#include <SoftwareSerial.h>
-#include <stddef.h>
-#include <stdint.h>
-
-constexpr auto MAX_NETWORK_MODULE_RESPONSE_LENGTH = 128U;
-
-enum WifiMode
-{
- Station = 1,
- SoftAP = 2,
- SoftAPAndStation = 3
-};
-
-enum ResponseStatus
-{
- OK,
- FAIL,
- ERROR,
- TIMEOUT
-};
-
-class WiFiModule
-{
-public:
- WiFiModule(uint8_t receive_pin, uint8_t transmit_pin) noexcept;
-
- void begin(size_t baudrate) noexcept;
-
- int get_available() noexcept;
-
- void reset() noexcept;
-
- /**
- * Connects to a wifi network.
- *
- * @param ssid The service set identifier of a wifi network.
- * @param password The wifi network password.
- *
- * @returns Whether or not it succeeded.
- */
- bool connect(const char *ssid, const char *password) noexcept;
-
- void set_wifi_mode(WifiMode wifi_mode) noexcept;
-
- void set_multiple_connections_enabled(bool is_enabled) noexcept;
-
- void set_echo_enabled(bool is_enabled) noexcept;
-
- void create_tcp_server(size_t port) noexcept;
-
- /**
- * Tests the connection to the wifi module.
- *
- * @returns Whether or not the test succeeded.
- */
- bool test() noexcept;
-
- /**
- * Gets local IP address of the wifi module.
- *
- * @param local_ip_out Local IP output buffer.
- *
- * @returns A pointer to the local IP output buffer.
- */
- const char *get_local_ip(char *local_ip_out) noexcept;
-
-private:
- SoftwareSerial _serial;
-
- /**
- * Sends a command to the wifi module.
- *
- * @param command A command without the "AT+" in the beginning.
- *
- * @returns Whether or not it succeeded.
- */
- bool _send_serial(const char *command) noexcept;
-
- /**
- * Reads from the wifi module until it responds with a status.
- *
- * @param timeout Timeout in milliseconds.
- * @param response_out Response output buffer.
- *
- * @returns The response status.
- *
- */
- ResponseStatus _read(uint64_t timeout, char *response_out) noexcept;
-
- char _read_byte() noexcept;
-};