Changed meaning of some SSID flags Added "WiFi 2.4Ghz" support flag. Added "WiFi 5.0Ghz" support flag. Make "WiFi Setup" flag more aggressive, (!online && !configured). BUG: 26570030 BUG: 25820726 BUG: 22558499 Change-Id: I6fedc6abe863ab1de40ad5b0763ece2369b61c06 Reviewed-on: https://weave-review.googlesource.com/2436 Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/examples/provider/wifi_manager.h b/examples/provider/wifi_manager.h index 2bfc5ca..72f54df 100644 --- a/examples/provider/wifi_manager.h +++ b/examples/provider/wifi_manager.h
@@ -35,6 +35,8 @@ const DoneCallback& callback) override; void StartAccessPoint(const std::string& ssid) override; void StopAccessPoint() override; + bool IsWifi24Supported() const override {return true;}; + bool IsWifi50Supported() const override {return false;}; static bool HasWifiCapability();
diff --git a/include/weave/provider/test/mock_wifi.h b/include/weave/provider/test/mock_wifi.h index 9fbe10f..7ede55e 100644 --- a/include/weave/provider/test/mock_wifi.h +++ b/include/weave/provider/test/mock_wifi.h
@@ -23,6 +23,8 @@ const DoneCallback&)); MOCK_METHOD1(StartAccessPoint, void(const std::string&)); MOCK_METHOD0(StopAccessPoint, void()); + MOCK_CONST_METHOD0(IsWifi24Supported, bool()); + MOCK_CONST_METHOD0(IsWifi50Supported, bool()); }; } // namespace test
diff --git a/include/weave/provider/wifi.h b/include/weave/provider/wifi.h index 48ac651..9c7cfca 100644 --- a/include/weave/provider/wifi.h +++ b/include/weave/provider/wifi.h
@@ -28,6 +28,9 @@ // Stops WiFi access point. virtual void StopAccessPoint() = 0; + virtual bool IsWifi24Supported() const = 0; + virtual bool IsWifi50Supported() const = 0; + protected: virtual ~Wifi() {} };
diff --git a/src/privet/wifi_bootstrap_manager.cc b/src/privet/wifi_bootstrap_manager.cc index 566da80..ce2016a 100644 --- a/src/privet/wifi_bootstrap_manager.cc +++ b/src/privet/wifi_bootstrap_manager.cc
@@ -204,8 +204,12 @@ } std::set<WifiType> WifiBootstrapManager::GetTypes() const { - // TODO(wiley) This should do some system work to figure this out. - return {WifiType::kWifi24}; + std::set<WifiType> result; + if (wifi_->IsWifi24Supported()) + result.insert(WifiType::kWifi24); + if (wifi_->IsWifi50Supported()) + result.insert(WifiType::kWifi50); + return result; } void WifiBootstrapManager::OnConnectDone(const std::string& ssid, @@ -255,9 +259,15 @@ void WifiBootstrapManager::UpdateConnectionState() { connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; - Network::State service_state{network_->GetConnectionState()}; VLOG(3) << "New network state: " << EnumToString(service_state); + + // TODO: Make it true wifi state, currently it's rather online state. + if (service_state != Network::State::kOnline && + config_->GetSettings().last_configured_ssid.empty()) { + return; + } + switch (service_state) { case Network::State::kOffline: connection_state_ = ConnectionState{ConnectionState::kOffline};
diff --git a/src/privet/wifi_ssid_generator.cc b/src/privet/wifi_ssid_generator.cc index 697e5d8..4ad1602 100644 --- a/src/privet/wifi_ssid_generator.cc +++ b/src/privet/wifi_ssid_generator.cc
@@ -52,20 +52,27 @@ } std::string WifiSsidGenerator::GenerateFlags() const { - return GenerateFlagsInternal(false); + return GenerateFlagsInternal(); } -std::string WifiSsidGenerator::GenerateFlagsInternal(bool for_ssid) const { +std::string WifiSsidGenerator::GenerateFlagsInternal() const { std::bitset<6> flags1; // Device needs WiFi configuration. flags1[0] = wifi_ && IsSetupNeeded(wifi_->GetConnectionState()); + // Device needs GCD registration. flags1[1] = IsSetupNeeded(gcd_->GetConnectionState()); std::bitset<6> flags2; - // Device is discoverable over WiFi. - flags2[0] = for_ssid || (wifi_ && !wifi_->GetHostedSsid().empty()); + if (wifi_) { + std::set<WifiType> types = wifi_->GetTypes(); + // Device supports 2.4Ghz WiFi networks. + flags2[0] = types.find(WifiType::kWifi24) != types.end(); + + // Device supports 5.0Ghz WiFi networks. + flags2[1] = types.find(WifiType::kWifi50) != types.end(); + } std::string result{2, base64chars[0]}; result[0] = base64chars[flags1.to_ulong()]; @@ -82,7 +89,7 @@ std::string result = base::StringPrintf(kSsidFormat, name.c_str(), idx.c_str(), - model_id.c_str(), GenerateFlagsInternal(true).c_str()); + model_id.c_str(), GenerateFlagsInternal().c_str()); CHECK_EQ(result[result.size() - 11], '.'); return result; }
diff --git a/src/privet/wifi_ssid_generator.h b/src/privet/wifi_ssid_generator.h index 2b86f28..1197e73 100644 --- a/src/privet/wifi_ssid_generator.h +++ b/src/privet/wifi_ssid_generator.h
@@ -30,7 +30,7 @@ // Sets object to use |n| instead of random number for SSID generation. void SetRandomForTests(int n); - std::string GenerateFlagsInternal(bool for_ssid) const; + std::string GenerateFlagsInternal() const; const CloudDelegate* gcd_{nullptr}; const WifiDelegate* wifi_{nullptr};
diff --git a/src/privet/wifi_ssid_generator_unittest.cc b/src/privet/wifi_ssid_generator_unittest.cc index 10680c8..406576d 100644 --- a/src/privet/wifi_ssid_generator_unittest.cc +++ b/src/privet/wifi_ssid_generator_unittest.cc
@@ -22,26 +22,10 @@ WifiSsidGenerator ssid_generator_{&gcd_, &wifi_}; }; -TEST_F(WifiSsidGeneratorTest, GenerateFlagsNoHostedAp) { - EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2u); +TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithWifi24) { + EXPECT_CALL(wifi_, GetTypes()) + .WillRepeatedly(Return(std::set<WifiType>{WifiType::kWifi24})); - wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; - gcd_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; - EXPECT_EQ("DA", ssid_generator_.GenerateFlags()); - - wifi_.connection_state_ = ConnectionState{ConnectionState::kOnline}; - EXPECT_EQ("CA", ssid_generator_.GenerateFlags()); - - gcd_.connection_state_ = ConnectionState{ConnectionState::kOffline}; - EXPECT_EQ("AA", ssid_generator_.GenerateFlags()); - - wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; - EXPECT_EQ("BA", ssid_generator_.GenerateFlags()); -} - -TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithHostedAp) { - EXPECT_CALL(wifi_, GetHostedSsid()) - .WillRepeatedly(Return(ssid_generator_.GenerateSsid())); EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2u); wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; @@ -58,6 +42,26 @@ EXPECT_EQ("BB", ssid_generator_.GenerateFlags()); } +TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithWifi50) { + EXPECT_CALL(wifi_, GetTypes()) + .WillRepeatedly(Return(std::set<WifiType>{WifiType::kWifi50})); + + EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2u); + + wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; + gcd_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; + EXPECT_EQ("DC", ssid_generator_.GenerateFlags()); + + wifi_.connection_state_ = ConnectionState{ConnectionState::kOnline}; + EXPECT_EQ("CC", ssid_generator_.GenerateFlags()); + + gcd_.connection_state_ = ConnectionState{ConnectionState::kOffline}; + EXPECT_EQ("AC", ssid_generator_.GenerateFlags()); + + wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; + EXPECT_EQ("BC", ssid_generator_.GenerateFlags()); +} + TEST_F(WifiSsidGeneratorTest, GenerateSsid31orLess) { EXPECT_LE(ssid_generator_.GenerateSsid().size(), 31u); }
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc index ebc66cd..b300f57 100644 --- a/src/weave_unittest.cc +++ b/src/weave_unittest.cc
@@ -181,7 +181,10 @@ class WeaveTest : public ::testing::Test { protected: - void SetUp() override {} + void SetUp() override { + EXPECT_CALL(wifi_, IsWifi24Supported()).WillRepeatedly(Return(true)); + EXPECT_CALL(wifi_, IsWifi50Supported()).WillRepeatedly(Return(false)); + } template <class UrlMatcher> void ExpectRequest(HttpClient::Method method,