Skip to content

Commit

Permalink
Formatting and hexing
Browse files Browse the repository at this point in the history
  • Loading branch information
hhvrc committed Oct 3, 2023
1 parent 7e6dbe2 commit 2a79a25
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 32 deletions.
1 change: 0 additions & 1 deletion .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,6 @@ SpaceBeforeParens: Custom
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: false
AfterFunctionDeclationName: false
AfterIfMacros: false
AfterOverloadedOperator: false
AfterRequiresInClause: false
Expand Down
45 changes: 45 additions & 0 deletions include/Utils/HexUtils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#pragma once

#include <nonstd/span.hpp>

#include <array>
#include <cstdint>

namespace OpenShock::HexUtils {
constexpr void ToHex(std::uint8_t data, char* output, bool upper = true) noexcept {
const char* hex = upper ? "0123456789ABCDEF" : "0123456789abcdef";
output[0] = hex[data >> 4];
output[1] = hex[data & 0x0F];
}

template<std::size_t N>
constexpr void ToHex(nonstd::span<const std::uint8_t, N> data, nonstd::span<char, N * 2> output, bool upper = true) noexcept {
for (std::size_t i = 0; i < data.size(); ++i) {
ToHex(data[i], &output[i * 2], upper);
}
}
template<std::size_t N>
constexpr std::array<char, (N * 2) + 1> ToHex(nonstd::span<const std::uint8_t, N> data, bool upper = true) noexcept {
std::array<char, (N * 2) + 1> output {};
ToHex(data, output, upper);
output[N * 2] = '\0';
return output;
}

template<std::size_t N>
constexpr void ToHexMac(nonstd::span<const std::uint8_t, N> data, nonstd::span<char, (N * 3) - 1> output, bool upper = true) noexcept {
const std::size_t Last = N - 1;
for (std::size_t i = 0; i < Last; ++i) {
ToHex(data[i], &output[i * 3], upper);
output[i * 3 + 2] = ':';
}
ToHex(data[Last], &output[Last * 3], upper);
}
template<std::size_t N>
constexpr std::array<char, N * 3> ToHexMac(nonstd::span<const std::uint8_t, N> data, bool upper = true) noexcept {
std::array<char, N * 3> output {};
ToHexMac(data, nonstd::span<char, (N * 3) - 1>(output.data(), output.size() - 1), upper);
output[(N * 3) - 1] = '\0';
return output;
}
} // namespace OpenShock::HexUtils
31 changes: 16 additions & 15 deletions src/CaptivePortal.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#include "CaptivePortal.h"

#include "AuthenticationManager.h"
#include "Utils/HexUtils.h"
#include "WiFiManager.h"
#include "Mappers/EspWiFiTypesMapper.h"
#include "WiFiScanManager.h"

#include <ArduinoJson.h>
Expand Down Expand Up @@ -72,35 +74,35 @@ bool CaptivePortal::Start() {
s_webServices->webServer.onNotFound([](AsyncWebServerRequest* request) { request->send(404, "text/plain", "Not found"); });
s_webServices->webServer.begin();

s_webServices->wifiScanStartedHandlerId = WiFiScanManager::RegisterScanStartedHandler([]() {
s_webServices->wifiScanStartedHandlerId = WiFiScanManager::RegisterScanStartedHandler([]() {
ESP_LOGD(TAG, "WiFi scan started");
StaticJsonDocument<256> doc;
doc["type"] = "wifi";
doc["type"] = "wifi";
doc["subject"] = "scan_started";
doc["status"] = "ok";
doc["status"] = "ok";
CaptivePortal::BroadcastMessageJSON(doc);
});
s_webServices->wifiScanCompletedHandlerId = WiFiScanManager::RegisterScanCompletedHandler([](WiFiScanManager::ScanCompletedStatus status) {
ESP_LOGD(TAG, "WiFi scan completed");
StaticJsonDocument<256> doc;
doc["type"] = "wifi";
doc["type"] = "wifi";
doc["subject"] = "scan_completed";
doc["status"] = "ok";
//doc["status"] = EspWiFiTypesMapper::MapScanCompletedStatus(status);
doc["status"] = "ok";
// doc["status"] = EspWiFiTypesMapper::MapScanCompletedStatus(status);
CaptivePortal::BroadcastMessageJSON(doc);
});
s_webServices->wifiScanDiscoveryHandlerId = WiFiScanManager::RegisterScanDiscoveryHandler([](const wifi_ap_record_t* record) {
ESP_LOGD(TAG, "WiFi scan discovery");
StaticJsonDocument<256> doc;
doc["type"] = "wifi";
doc["type"] = "wifi";
doc["subject"] = "scan_discovery";
doc["status"] = "ok";
doc["ssid"] = reinterpret_cast<const char*>(record->ssid);
//doc["bssid"] = EspWiFiTypesMapper::MapBssid(record->bssid);
auto data = doc.createNestedObject("data");
data["ssid"] = reinterpret_cast<const char*>(record->ssid);
data["bssid"] = HexUtils::ToHexMac<6>(record->bssid).data();
doc["rssi"] = record->rssi;
doc["channel"] = record->primary;
doc["rssi"] = record->rssi;
//doc["auth"] = EspWiFiTypesMapper::MapAuthMode(record->authmode);
//doc["hidden"] = record->is_hidden;
doc["security"] = Mappers::GetWiFiAuthModeName(record->authmode);

CaptivePortal::BroadcastMessageJSON(doc);
});

Expand Down Expand Up @@ -157,8 +159,7 @@ bool CaptivePortal::BroadcastMessageBIN(const std::uint8_t* data, std::size_t le
}

void handleWebSocketClientConnected(std::uint8_t socketId) {
ESP_LOGD(
TAG, "WebSocket client #%u connected from %s", socketId, s_webServices->socketServer.remoteIP(socketId).toString().c_str());
ESP_LOGD(TAG, "WebSocket client #%u connected from %s", socketId, s_webServices->socketServer.remoteIP(socketId).toString().c_str());
}
void handleWebSocketClientDisconnected(std::uint8_t socketId) {
ESP_LOGD(TAG, "WebSocket client #%u disconnected", socketId);
Expand Down
30 changes: 14 additions & 16 deletions src/WiFiScanManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ bool WiFiScanManager::Init() {
return false;
}

s_currentChannel = 0;
s_scanInProgress = false;
s_currentChannel = 0;
s_scanInProgress = false;
s_currentScanStatus = CurrentScanStatus::Idle;
s_scanStartedHandlers.clear();
s_scanCompletedHandlers.clear();
Expand All @@ -54,8 +54,7 @@ bool WiFiScanManager::Init() {
WiFi.onEvent(_evSTAStopped, ARDUINO_EVENT_WIFI_STA_STOP);
WiFi.enableSTA(true);

// Since currentChannel is 0, this will do a full scan
_scanCurrentChannel();
_scanAllChannels();

s_initialized = true;

Expand Down Expand Up @@ -92,9 +91,9 @@ void WiFiScanManager::CancelScan() {
}

WiFiScanManager::CallbackHandle WiFiScanManager::RegisterScanStartedHandler(const WiFiScanManager::ScanStartedHandler& handler) {
static WiFiScanManager::CallbackHandle nextId = 0;
static WiFiScanManager::CallbackHandle nextId = 0;
WiFiScanManager::CallbackHandle CallbackHandle = nextId++;
s_scanStartedHandlers[CallbackHandle] = handler;
s_scanStartedHandlers[CallbackHandle] = handler;
return CallbackHandle;
}
void WiFiScanManager::UnregisterScanStartedHandler(WiFiScanManager::CallbackHandle id) {
Expand All @@ -108,9 +107,9 @@ void WiFiScanManager::UnregisterScanStartedHandler(WiFiScanManager::CallbackHand
}

WiFiScanManager::CallbackHandle WiFiScanManager::RegisterScanCompletedHandler(const WiFiScanManager::ScanCompletedHandler& handler) {
static WiFiScanManager::CallbackHandle nextId = 0;
static WiFiScanManager::CallbackHandle nextId = 0;
WiFiScanManager::CallbackHandle CallbackHandle = nextId++;
s_scanCompletedHandlers[CallbackHandle] = handler;
s_scanCompletedHandlers[CallbackHandle] = handler;
return CallbackHandle;
}
void WiFiScanManager::UnregisterScanCompletedHandler(WiFiScanManager::CallbackHandle id) {
Expand All @@ -124,9 +123,9 @@ void WiFiScanManager::UnregisterScanCompletedHandler(WiFiScanManager::CallbackHa
}

WiFiScanManager::CallbackHandle WiFiScanManager::RegisterScanDiscoveryHandler(const WiFiScanManager::ScanDiscoveryHandler& handler) {
static WiFiScanManager::CallbackHandle nextId = 0;
static WiFiScanManager::CallbackHandle nextId = 0;
WiFiScanManager::CallbackHandle CallbackHandle = nextId++;
s_scanDiscoveryHandlers[CallbackHandle] = handler;
s_scanDiscoveryHandlers[CallbackHandle] = handler;
return CallbackHandle;
}
void WiFiScanManager::UnregisterScanDiscoveryHandler(WiFiScanManager::CallbackHandle id) {
Expand All @@ -145,23 +144,22 @@ void WiFiScanManager::Update() {
if (s_currentScanStatus == CurrentScanStatus::Starting) {
s_currentChannel = 0;
_iterateChannel();
}
else if (s_currentScanStatus == CurrentScanStatus::Complete) {
} else if (s_currentScanStatus == CurrentScanStatus::Complete) {
_iterateChannel();
}
}

void _handleScanFinished() {
s_currentChannel = 0;
s_scanInProgress = false;
s_currentChannel = 0;
s_scanInProgress = false;
s_currentScanStatus = CurrentScanStatus::Idle;
ESP_LOGD(TAG, "Scan finished");
for (auto& it : s_scanCompletedHandlers) {
it.second(WiFiScanManager::ScanCompletedStatus::Success);
}
}
void _handleScanError(std::int16_t retval) {
if (retval >= 0) return; // This isn't an error
if (retval >= 0) return; // This isn't an error

if (retval == WIFI_SCAN_RUNNING) {
ESP_LOGE(TAG, "Scan is still running");
Expand All @@ -187,7 +185,7 @@ void _scanAllChannels() {
}
void _scanCurrentChannel() {
std::int16_t retval = WiFi.scanNetworks(true, true, false, OPENSHOCK_WIFI_SCAN_MAX_MS_PER_CHANNEL, s_currentChannel);
s_scanInProgress = retval == WIFI_SCAN_RUNNING;
s_scanInProgress = retval == WIFI_SCAN_RUNNING;
if (s_scanInProgress) {
s_currentScanStatus = CurrentScanStatus::Running;
ESP_LOGD(TAG, "Scanning channel %u", s_currentChannel);
Expand Down

0 comments on commit 2a79a25

Please sign in to comment.