mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-30 03:23:45 +02:00
Add PoC support for BSSID
This commit is contained in:
@@ -13,6 +13,11 @@ void from_json(const nlohmann::json& j, UpdateWifiPayload& payload)
|
||||
payload.ssid = j.at("ssid").get<std::string>();
|
||||
}
|
||||
|
||||
if (j.contains("bssid"))
|
||||
{
|
||||
payload.ssid = j.at("bssid").get<std::string>();
|
||||
}
|
||||
|
||||
if (j.contains("password"))
|
||||
{
|
||||
payload.password = j.at("password").get<std::string>();
|
||||
|
||||
@@ -10,17 +10,19 @@ struct WifiPayload : BasePayload
|
||||
{
|
||||
std::string name;
|
||||
std::string ssid;
|
||||
std::string bssid;
|
||||
std::string password;
|
||||
uint8_t channel;
|
||||
uint8_t power;
|
||||
};
|
||||
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(WifiPayload, name, ssid, password, channel, power)
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(WifiPayload, name, ssid, bssid, password, channel, power)
|
||||
|
||||
struct UpdateWifiPayload : BasePayload
|
||||
{
|
||||
std::string name;
|
||||
std::optional<std::string> ssid;
|
||||
std::optional<std::string> bssid;
|
||||
std::optional<std::string> password;
|
||||
std::optional<uint8_t> channel;
|
||||
std::optional<uint8_t> power;
|
||||
|
||||
@@ -19,8 +19,14 @@ CommandResult setWiFiCommand(std::shared_ptr<DependencyRegistry> registry, const
|
||||
return CommandResult::getErrorResult("Invalid payload: missing SSID");
|
||||
}
|
||||
|
||||
auto bssid_len = payload.bssid.length();
|
||||
if (bssid_len > 0 && bssid_len != 11)
|
||||
{
|
||||
return CommandResult::getErrorResult("BSSID is malformed");
|
||||
}
|
||||
|
||||
std::shared_ptr<ProjectConfig> projectConfig = registry->resolve<ProjectConfig>(DependencyType::project_config);
|
||||
projectConfig->setWifiConfig(payload.name, payload.ssid, payload.password, payload.channel, payload.power);
|
||||
projectConfig->setWifiConfig(payload.name, payload.ssid, payload.bssid, payload.password, payload.channel, payload.power);
|
||||
|
||||
return CommandResult::getSuccessResult("Config updated");
|
||||
}
|
||||
@@ -53,12 +59,22 @@ CommandResult updateWiFiCommand(std::shared_ptr<DependencyRegistry> registry, co
|
||||
return CommandResult::getErrorResult("Invalid payload - missing network name");
|
||||
}
|
||||
|
||||
if (payload.bssid.has_value())
|
||||
{
|
||||
auto bssid_len = payload.bssid.value().length();
|
||||
if (bssid_len > 0 && bssid_len != 11)
|
||||
{
|
||||
return CommandResult::getErrorResult("BSSID is malformed");
|
||||
}
|
||||
}
|
||||
|
||||
auto projectConfig = registry->resolve<ProjectConfig>(DependencyType::project_config);
|
||||
auto storedNetworks = projectConfig->getWifiConfigs();
|
||||
if (const auto networkToUpdate = std::ranges::find_if(storedNetworks, [&](auto& network) { return network.name == payload.name; });
|
||||
networkToUpdate != storedNetworks.end())
|
||||
{
|
||||
projectConfig->setWifiConfig(payload.name, payload.ssid.has_value() ? payload.ssid.value() : networkToUpdate->ssid,
|
||||
payload.bssid.has_value() ? payload.bssid.value() : networkToUpdate->bssid,
|
||||
payload.password.has_value() ? payload.password.value() : networkToUpdate->password,
|
||||
payload.channel.has_value() ? payload.channel.value() : networkToUpdate->channel,
|
||||
payload.power.has_value() ? payload.power.value() : networkToUpdate->power);
|
||||
|
||||
Reference in New Issue
Block a user