Skip to content

Commit 6971464

Browse files
authored
Merge pull request #33 from EyeTrackVR/feature/support-for-bssid
Add PoC support for BSSID
2 parents b64994c + 1b430a8 commit 6971464

17 files changed

Lines changed: 298 additions & 228 deletions

File tree

boards/sdkconfig.base_defaults

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ CONFIG_CAMERA_WIFI_XCLK_FREQ=16500000
588588
#
589589
CONFIG_WIFI_MDNS_HOSTNAME="openiristracker"
590590
CONFIG_WIFI_SSID=""
591+
CONFIG_WIFI_BSSID=""
591592
CONFIG_WIFI_PASSWORD=""
592593
CONFIG_WIFI_AP_SSID="EyeTrackVR"
593594
CONFIG_WIFI_AP_PASSWORD="12345678"

components/CommandManager/CommandManager/CommandSchema.cpp

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,33 @@
11
#include "CommandSchema.hpp"
22

3+
void to_json(nlohmann::json& j, const WifiPayload& payload)
4+
{
5+
j = nlohmann::json{
6+
{"name", payload.name}, {"ssid", payload.ssid}, {"bssid", payload.bssid},
7+
{"password", payload.password}, {"channel", payload.channel}, {"power", payload.power},
8+
};
9+
}
10+
11+
void from_json(const nlohmann::json& j, WifiPayload& payload)
12+
{
13+
payload.name = j.at("name").get<std::string>();
14+
payload.ssid = j.at("ssid").get<std::string>();
15+
payload.password = j.at("password").get<std::string>();
16+
payload.channel = j.at("channel").get<uint8_t>();
17+
payload.power = j.at("power").get<uint8_t>();
18+
19+
if (j.contains("bssid"))
20+
{
21+
payload.bssid = j.at("bssid").get<std::string>();
22+
}
23+
}
24+
325
void to_json(nlohmann::json& j, const UpdateWifiPayload& payload)
426
{
5-
j = nlohmann::json{{"name", payload.name}, {"ssid", payload.ssid}, {"password", payload.password}, {"channel", payload.channel}, {"power", payload.power}};
27+
j = nlohmann::json{
28+
{"name", payload.name}, {"ssid", payload.ssid}, {"bssid", payload.bssid},
29+
{"password", payload.password}, {"channel", payload.channel}, {"power", payload.power},
30+
};
631
}
732

833
void from_json(const nlohmann::json& j, UpdateWifiPayload& payload)
@@ -13,6 +38,11 @@ void from_json(const nlohmann::json& j, UpdateWifiPayload& payload)
1338
payload.ssid = j.at("ssid").get<std::string>();
1439
}
1540

41+
if (j.contains("bssid"))
42+
{
43+
payload.bssid = j.at("bssid").get<std::string>();
44+
}
45+
1646
if (j.contains("password"))
1747
{
1848
payload.password = j.at("password").get<std::string>();
@@ -54,7 +84,8 @@ void from_json(const nlohmann::json& j, UpdateAPWiFiPayload& payload)
5484
void to_json(nlohmann::json& j, const UpdateCameraConfigPayload& payload)
5585
{
5686
j = nlohmann::json{
57-
{"vflip", payload.vflip}, {"href", payload.href}, {"framesize", payload.framesize}, {"quality", payload.quality}, {"brightness", payload.brightness}};
87+
{"vflip", payload.vflip}, {"href", payload.href}, {"framesize", payload.framesize}, {"quality", payload.quality}, {"brightness", payload.brightness},
88+
};
5889
}
5990

6091
void from_json(const nlohmann::json& j, UpdateCameraConfigPayload& payload)

components/CommandManager/CommandManager/CommandSchema.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,20 @@ struct WifiPayload : BasePayload
1010
{
1111
std::string name;
1212
std::string ssid;
13+
std::optional<std::string> bssid;
1314
std::string password;
1415
uint8_t channel;
1516
uint8_t power;
1617
};
1718

18-
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(WifiPayload, name, ssid, password, channel, power)
19+
void to_json(nlohmann::json& j, const WifiPayload& payload);
20+
void from_json(const nlohmann::json& j, WifiPayload& payload);
1921

2022
struct UpdateWifiPayload : BasePayload
2123
{
2224
std::string name;
2325
std::optional<std::string> ssid;
26+
std::optional<std::string> bssid;
2427
std::optional<std::string> password;
2528
std::optional<uint8_t> channel;
2629
std::optional<uint8_t> power;

components/CommandManager/CommandManager/commands/wifi_commands.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,16 @@ CommandResult setWiFiCommand(std::shared_ptr<DependencyRegistry> registry, const
1919
return CommandResult::getErrorResult("Invalid payload: missing SSID");
2020
}
2121

22+
// format is XX:XX:XX:XX:XX:XX
23+
const std::string bssid = payload.bssid.has_value() ? payload.bssid.value() : "";
24+
const auto bssid_len = bssid.length();
25+
if (bssid_len > 0 && bssid_len != 17)
26+
{
27+
return CommandResult::getErrorResult("BSSID is malformed");
28+
}
29+
2230
std::shared_ptr<ProjectConfig> projectConfig = registry->resolve<ProjectConfig>(DependencyType::project_config);
23-
projectConfig->setWifiConfig(payload.name, payload.ssid, payload.password, payload.channel, payload.power);
31+
projectConfig->setWifiConfig(payload.name, payload.ssid, bssid, payload.password, payload.channel, payload.power);
2432

2533
return CommandResult::getSuccessResult("Config updated");
2634
}
@@ -53,12 +61,22 @@ CommandResult updateWiFiCommand(std::shared_ptr<DependencyRegistry> registry, co
5361
return CommandResult::getErrorResult("Invalid payload - missing network name");
5462
}
5563

64+
if (payload.bssid.has_value())
65+
{
66+
auto bssid_len = payload.bssid.value().length();
67+
if (bssid_len > 0 && bssid_len != 11)
68+
{
69+
return CommandResult::getErrorResult("BSSID is malformed");
70+
}
71+
}
72+
5673
auto projectConfig = registry->resolve<ProjectConfig>(DependencyType::project_config);
5774
auto storedNetworks = projectConfig->getWifiConfigs();
5875
if (const auto networkToUpdate = std::ranges::find_if(storedNetworks, [&](auto& network) { return network.name == payload.name; });
5976
networkToUpdate != storedNetworks.end())
6077
{
6178
projectConfig->setWifiConfig(payload.name, payload.ssid.has_value() ? payload.ssid.value() : networkToUpdate->ssid,
79+
payload.bssid.has_value() ? payload.bssid.value() : networkToUpdate->bssid,
6280
payload.password.has_value() ? payload.password.value() : networkToUpdate->password,
6381
payload.channel.has_value() ? payload.channel.value() : networkToUpdate->channel,
6482
payload.power.has_value() ? payload.power.value() : networkToUpdate->power);

components/ProjectConfig/ProjectConfig/Models.hpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,14 +170,23 @@ struct WiFiConfig_t : BaseConfigModel
170170
// default constructor used for loading
171171
WiFiConfig_t(Preferences* pref) : BaseConfigModel(pref) {}
172172

173-
WiFiConfig_t(Preferences* pref, const uint8_t index, std::string name, std::string ssid, std::string password, const uint8_t channel, const uint8_t power)
174-
: BaseConfigModel(pref), index(index), name(std::move(name)), ssid(std::move(ssid)), password(std::move(password)), channel(channel), power(power)
173+
WiFiConfig_t(Preferences* pref, const uint8_t index, std::string name, std::string ssid, std::string bssid, std::string password, const uint8_t channel,
174+
const uint8_t power)
175+
: BaseConfigModel(pref),
176+
index(index),
177+
name(std::move(name)),
178+
ssid(std::move(ssid)),
179+
bssid(std::move(bssid)),
180+
password(std::move(password)),
181+
channel(channel),
182+
power(power)
175183
{
176184
}
177185

178186
uint8_t index;
179187
std::string name;
180188
std::string ssid;
189+
std::string bssid;
181190
std::string password;
182191
uint8_t channel;
183192
uint8_t power;
@@ -190,6 +199,7 @@ struct WiFiConfig_t : BaseConfigModel
190199
auto const iter_str = std::string(Helpers::itoa(index, buffer, 10));
191200
this->name = this->pref->getString(("name" + iter_str).c_str(), "");
192201
this->ssid = this->pref->getString(("ssid" + iter_str).c_str(), "");
202+
this->bssid = this->pref->getString(("bssid" + iter_str).c_str(), "");
193203
this->password = this->pref->getString(("password" + iter_str).c_str(), "");
194204
this->channel = this->pref->getUInt(("channel" + iter_str).c_str());
195205
this->power = this->pref->getUInt(("power" + iter_str).c_str());
@@ -204,6 +214,7 @@ struct WiFiConfig_t : BaseConfigModel
204214

205215
this->pref->putString(("name" + iter_str).c_str(), this->name.c_str());
206216
this->pref->putString(("ssid" + iter_str).c_str(), this->ssid.c_str());
217+
this->pref->putString(("bssid" + iter_str).c_str(), this->bssid.c_str());
207218
this->pref->putString(("password" + iter_str).c_str(), this->password.c_str());
208219
this->pref->putUInt(("channel" + iter_str).c_str(), this->channel);
209220
this->pref->putUInt(("power" + iter_str).c_str(), this->power);
@@ -213,8 +224,8 @@ struct WiFiConfig_t : BaseConfigModel
213224

214225
std::string toRepresentation()
215226
{
216-
return Helpers::format_string("{\"name\": \"%s\", \"ssid\": \"%s\", \"password\": \"%s\", \"channel\": %u, \"power\": %u}", this->name.c_str(),
217-
this->ssid.c_str(), this->password.c_str(), this->channel, this->power);
227+
return Helpers::format_string("{\"name\": \"%s\", \"ssid\": \"%s\", \"bssid\": \"%s\", \"password\": \"%s\", \"channel\": %u, \"power\": %u}",
228+
this->name.c_str(), this->ssid.c_str(), this->bssid.c_str(), this->password.c_str(), this->channel, this->power);
218229
};
219230
};
220231

components/ProjectConfig/ProjectConfig/ProjectConfig.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ void ProjectConfig::setCameraConfig(const uint8_t vflip, const uint8_t framesize
127127
ESP_LOGD(CONFIGURATION_TAG, "Updating Camera config");
128128
}
129129

130-
void ProjectConfig::setWifiConfig(const std::string& networkName, const std::string& ssid, const std::string& password, uint8_t channel, uint8_t power)
130+
void ProjectConfig::setWifiConfig(const std::string& networkName, const std::string& ssid, const std::string& bssid, const std::string& password,
131+
uint8_t channel, uint8_t power)
131132
{
132133
const auto size = this->config.networks.size();
133134

@@ -139,6 +140,7 @@ void ProjectConfig::setWifiConfig(const std::string& networkName, const std::str
139140

140141
it->name = networkName;
141142
it->ssid = ssid;
143+
it->bssid = bssid;
142144
it->password = password;
143145
it->channel = channel;
144146
it->power = power;
@@ -150,7 +152,7 @@ void ProjectConfig::setWifiConfig(const std::string& networkName, const std::str
150152
if (size == 0)
151153
{
152154
ESP_LOGI(CONFIGURATION_TAG, "No networks, We're adding a new network");
153-
this->config.networks.emplace_back(this->pref, static_cast<uint8_t>(0), networkName, ssid, password, channel, power);
155+
this->config.networks.emplace_back(this->pref, static_cast<uint8_t>(0), networkName, ssid, bssid, password, channel, power);
154156
// Save the new network immediately
155157
this->config.networks.back().save();
156158
saveNetworkCount(this->pref, 1);
@@ -162,10 +164,10 @@ void ProjectConfig::setWifiConfig(const std::string& networkName, const std::str
162164
{
163165
ESP_LOGI(CONFIGURATION_TAG, "We're adding a new network");
164166
// we don't have that network yet, we can add it as we still have some
165-
// space we're using emplace_back as push_back will create a copy of it,
167+
// space, we're using emplace_back as push_back will create a copy of it,
166168
// we want to avoid that
167169
uint8_t last_index = getNetworkCount(this->pref);
168-
this->config.networks.emplace_back(this->pref, last_index, networkName, ssid, password, channel, power);
170+
this->config.networks.emplace_back(this->pref, last_index, networkName, ssid, bssid, password, channel, power);
169171
// Save the new network immediately
170172
this->config.networks.back().save();
171173
saveNetworkCount(this->pref, static_cast<int>(this->config.networks.size()));

components/ProjectConfig/ProjectConfig/ProjectConfig.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ class ProjectConfig
3737
void setLEDDUtyCycleConfig(int led_external_pwm_duty_cycle);
3838
void setMDNSConfig(const std::string& hostname);
3939
void setCameraConfig(uint8_t vflip, uint8_t framesize, uint8_t href, uint8_t quality, uint8_t brightness);
40-
void setWifiConfig(const std::string& networkName, const std::string& ssid, const std::string& password, uint8_t channel, uint8_t power);
40+
void setWifiConfig(const std::string& networkName, const std::string& ssid, const std::string& bssid, const std::string& password, uint8_t channel,
41+
uint8_t power);
4142

4243
void deleteWifiConfig(const std::string& networkName);
4344

0 commit comments

Comments
 (0)