Quellcode durchsuchen

Refactor setting to allow user to specify B, G, or N mode.

Christopher Mullins vor 6 Jahren
Ursprung
Commit
f520867ede
2 geänderte Dateien mit 36 neuen und 4 gelöschten Zeilen
  1. 27 2
      lib/Settings/Settings.cpp
  2. 9 2
      lib/Settings/Settings.h

+ 27 - 2
lib/Settings/Settings.cpp

@@ -99,7 +99,10 @@ void Settings::patch(JsonObject parsedSettings) {
   this->setIfPresent(parsedSettings, "wifi_static_ip_netmask", wifiStaticIPNetmask);
   this->setIfPresent(parsedSettings, "packet_repeats_per_loop", packetRepeatsPerLoop);
   this->setIfPresent(parsedSettings, "home_assistant_discovery_prefix", homeAssistantDiscoveryPrefix);
-  this->setIfPresent(parsedSettings, "wifi_force_b_mode", wifiForceBMode);
+
+  if (parsedSettings.containsKey("wifi_mode")) {
+    this->wifiMode = wifiModeFromString(parsedSettings["wifi_mode"]);
+  }
 
   if (parsedSettings.containsKey("rf24_channels")) {
     JsonArray arr = parsedSettings["rf24_channels"];
@@ -284,7 +287,7 @@ void Settings::serialize(Print& stream, const bool prettyPrint) {
   root["wifi_static_ip_netmask"] = this->wifiStaticIPNetmask;
   root["packet_repeats_per_loop"] = this->packetRepeatsPerLoop;
   root["home_assistant_discovery_prefix"] = this->homeAssistantDiscoveryPrefix;
-  root["wifi_force_b_mode"] = this->wifiForceBMode;
+  root["wifi_mode"] = wifiModeToString(this->wifiMode);
 
   JsonArray channelArr = root.createNestedArray("rf24_channels");
   JsonHelpers::vectorToJsonArr<RF24Channel, String>(channelArr, rf24Channels, RF24ChannelHelpers::nameFromValue);
@@ -349,4 +352,26 @@ String Settings::typeToString(RadioInterfaceType type) {
     default:
       return "nRF24";
   }
+}
+
+WifiMode Settings::wifiModeFromString(const String& mode) {
+  if (mode.equalsIgnoreCase("b")) {
+    return WifiMode::B;
+  } else if (mode.equalsIgnoreCase("g")) {
+    return WifiMode::G;
+  } else {
+    return WifiMode::N;
+  }
+}
+
+String Settings::wifiModeToString(WifiMode mode) {
+  switch (mode) {
+    case WifiMode::B:
+      return "b";
+    case WifiMode::G:
+      return "g";
+    case WifiMode::N:
+    default:
+      return "n";
+  }
 }

+ 9 - 2
lib/Settings/Settings.h

@@ -63,6 +63,10 @@ enum RadioInterfaceType {
   LT8900 = 1,
 };
 
+enum class WifiMode {
+  B, G, N
+};
+
 static const std::vector<GroupStateField> DEFAULT_GROUP_STATE_FIELDS({
   GroupStateField::STATE,
   GroupStateField::BRIGHTNESS,
@@ -113,7 +117,7 @@ public:
     groupStateFields(DEFAULT_GROUP_STATE_FIELDS),
     rf24ListenChannel(RF24Channel::RF24_LOW),
     packetRepeatsPerLoop(10),
-    wifiForceBMode(false),
+    wifiMode(WifiMode::N),
     _autoRestartPeriod(0)
   { }
 
@@ -186,7 +190,7 @@ public:
   std::map<String, BulbId> groupIdAliases;
   std::map<uint32_t, BulbId> deletedGroupIdAliases;
   String homeAssistantDiscoveryPrefix;
-  bool wifiForceBMode;
+  WifiMode wifiMode;
 
 protected:
   size_t _autoRestartPeriod;
@@ -194,6 +198,9 @@ protected:
   void parseGroupIdAliases(JsonObject json);
   void dumpGroupIdAliases(JsonObject json);
 
+  static WifiMode wifiModeFromString(const String& mode);
+  static String wifiModeToString(WifiMode mode);
+
   template <typename T>
   void setIfPresent(JsonObject obj, const char* key, T& var) {
     if (obj.containsKey(key)) {