Make bssid optional in payload for backwards compatibility, add tests,

This commit is contained in:
Lorow
2026-01-11 20:38:13 +01:00
parent e205509fec
commit 1b430a8ea8
7 changed files with 171 additions and 31 deletions

View File

@@ -1,8 +1,33 @@
#include "CommandSchema.hpp"
void to_json(nlohmann::json& j, const WifiPayload& payload)
{
j = nlohmann::json{
{"name", payload.name}, {"ssid", payload.ssid}, {"bssid", payload.bssid},
{"password", payload.password}, {"channel", payload.channel}, {"power", payload.power},
};
}
void from_json(const nlohmann::json& j, WifiPayload& payload)
{
payload.name = j.at("name").get<std::string>();
payload.ssid = j.at("ssid").get<std::string>();
payload.password = j.at("password").get<std::string>();
payload.channel = j.at("channel").get<uint8_t>();
payload.power = j.at("power").get<uint8_t>();
if (j.contains("bssid"))
{
payload.bssid = j.at("bssid").get<std::string>();
}
}
void to_json(nlohmann::json& j, const UpdateWifiPayload& payload)
{
j = nlohmann::json{{"name", payload.name}, {"ssid", payload.ssid}, {"password", payload.password}, {"channel", payload.channel}, {"power", payload.power}};
j = nlohmann::json{
{"name", payload.name}, {"ssid", payload.ssid}, {"bssid", payload.bssid},
{"password", payload.password}, {"channel", payload.channel}, {"power", payload.power},
};
}
void from_json(const nlohmann::json& j, UpdateWifiPayload& payload)
@@ -15,7 +40,7 @@ void from_json(const nlohmann::json& j, UpdateWifiPayload& payload)
if (j.contains("bssid"))
{
payload.ssid = j.at("bssid").get<std::string>();
payload.bssid = j.at("bssid").get<std::string>();
}
if (j.contains("password"))
@@ -59,7 +84,8 @@ void from_json(const nlohmann::json& j, UpdateAPWiFiPayload& payload)
void to_json(nlohmann::json& j, const UpdateCameraConfigPayload& payload)
{
j = nlohmann::json{
{"vflip", payload.vflip}, {"href", payload.href}, {"framesize", payload.framesize}, {"quality", payload.quality}, {"brightness", payload.brightness}};
{"vflip", payload.vflip}, {"href", payload.href}, {"framesize", payload.framesize}, {"quality", payload.quality}, {"brightness", payload.brightness},
};
}
void from_json(const nlohmann::json& j, UpdateCameraConfigPayload& payload)

View File

@@ -10,13 +10,14 @@ struct WifiPayload : BasePayload
{
std::string name;
std::string ssid;
std::string bssid;
std::optional<std::string> bssid;
std::string password;
uint8_t channel;
uint8_t power;
};
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(WifiPayload, name, ssid, bssid, password, channel, power)
void to_json(nlohmann::json& j, const WifiPayload& payload);
void from_json(const nlohmann::json& j, WifiPayload& payload);
struct UpdateWifiPayload : BasePayload
{

View File

@@ -19,14 +19,16 @@ 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)
// format is XX:XX:XX:XX:XX:XX
const std::string bssid = payload.bssid.has_value() ? payload.bssid.value() : "";
const auto bssid_len = bssid.length();
if (bssid_len > 0 && bssid_len != 17)
{
return CommandResult::getErrorResult("BSSID is malformed");
}
std::shared_ptr<ProjectConfig> projectConfig = registry->resolve<ProjectConfig>(DependencyType::project_config);
projectConfig->setWifiConfig(payload.name, payload.ssid, payload.bssid, payload.password, payload.channel, payload.power);
projectConfig->setWifiConfig(payload.name, payload.ssid, bssid, payload.password, payload.channel, payload.power);
return CommandResult::getSuccessResult("Config updated");
}