Skip to content

Commit

Permalink
XIONE-2602 unnecessary wifi signal strength scan
Browse files Browse the repository at this point in the history
michaelamal committed Feb 11, 2021
1 parent 4492ff5 commit 6400973
Showing 3 changed files with 59 additions and 5 deletions.
8 changes: 8 additions & 0 deletions WifiManager/WifiManager.cpp
Original file line number Diff line number Diff line change
@@ -300,6 +300,14 @@ namespace WPEFramework
params["state"] = static_cast<int>(state);
params["isLNF"] = isLNF;
sendNotify("onWIFIStateChanged", params);
if (state == WifiState::CONNECTED)
{
wifiSignalThreshold.setSignalThresholdChangeEnabled(true);
}
else
{
wifiSignalThreshold.setSignalThresholdChangeEnabled(false);
}
}

/**
54 changes: 49 additions & 5 deletions WifiManager/impl/WifiManagerSignalThreshold.cpp
Original file line number Diff line number Diff line change
@@ -60,7 +60,8 @@ namespace {

WifiManagerSignalThreshold::WifiManagerSignalThreshold(WifiManagerInterface &wifiManager):
changeEnabled(false),
wifiManager(wifiManager)
wifiManager(wifiManager),
running(false)
{
}

@@ -101,10 +102,37 @@ uint32_t WifiManagerSignalThreshold::isSignalThresholdChangeEnabled(const JsonOb

void WifiManagerSignalThreshold::setSignalThresholdChangeEnabled(bool enabled, int interval)
{
LOGINFO("setSignalThresholdChangeEnabled: enabled %s, interval %d", enabled ? "true":"false", interval);

stopThread();

changeEnabled = enabled;
if(changeEnabled) {
JsonObject parameters, response;
WifiState state;

uint32_t result = wifiManager.getCurrentState(parameters, response);
if (result != 0)
{
LOGINFO("wifiManager.getCurrentState result = %d", result);
return;
}
else if (response.HasLabel("state"))
{
int64_t number;
getNumberParameter("state", number);
state = (WifiState) number;
LOGINFO("wifi state = %d", state);
}
else
{
LOGINFO("no state attribute");
return;
}

if(changeEnabled)
{
if (state == WifiState::CONNECTED)
running = true;
startThread(interval);
}
}
@@ -118,14 +146,22 @@ void WifiManagerSignalThreshold::loop(int interval)
{
std::unique_lock<std::mutex> lk(cv_mutex);
while(changeEnabled) {
LOGINFO("WifiManagerSignalThreashold::loop");

float signalStrength;
std::string strength;
getSignalData(wifiManager, signalStrength, strength);
std::string lastStrength = "";
if (running)
{
LOGINFO("WifiManagerSignalThreashold::loop");
getSignalData(wifiManager, signalStrength, strength);

wifiManager.onWifiSignalThresholdChanged(signalStrength, strength);

if (strength != lastStrength)
{
wifiManager.onWifiSignalThresholdChanged(signalStrength, strength);
lastStrength = strength;
}
}
cv.wait_for(lk, std::chrono::milliseconds(interval), [this](){ return changeEnabled == false; });
}
}
@@ -137,6 +173,14 @@ void WifiManagerSignalThreshold::stopThread()
if(thread.joinable()) {
thread.join();
}
running = false ;
}


void WifiManagerSignalThreshold::setSignalThresholdChangeEnabled(bool enable)
{
LOGINFO("setSignalThresholdChangeEnabled: enable %s", enable ? "true":"false");
running = enable;
}

void WifiManagerSignalThreshold::startThread(int interval)
2 changes: 2 additions & 0 deletions WifiManager/impl/WifiManagerSignalThreshold.h
Original file line number Diff line number Diff line change
@@ -47,6 +47,7 @@ namespace WPEFramework {
WifiManagerSignalThreshold& operator=(const WifiManagerSignalThreshold&) = delete;

uint32_t setSignalThresholdChangeEnabled(const JsonObject& parameters, JsonObject& response);
void setSignalThresholdChangeEnabled(bool enable);
uint32_t isSignalThresholdChangeEnabled(const JsonObject& parameters, JsonObject& response) const;

private:
@@ -63,6 +64,7 @@ namespace WPEFramework {
std::mutex cv_mutex;
std::condition_variable cv;
WifiManagerInterface &wifiManager;
bool running;
};
}
}

0 comments on commit 6400973

Please sign in to comment.