diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.cpp index e1576cafe4c5084449e1235eef6fe5f71388a1a3..856dab1064f4ab27f1cb0e856c1b2b1a3411d30f 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.cpp @@ -78,9 +78,14 @@ void WifiSensorScene::DealStaConnChanged(OperateResState state, const WifiLinked connScene_ = UNKNOW_SCENE; rssiCnt_ = 0; reportRssi_ = 0; + connRssi_ = 0; return; } - IsOutdoorScene() ? connScene_ = OUTDOOR_SCENE : connScene_ = INDOOR_SCENE; + if (lastState_ == OperateResState::DISCONNECT_DISCONNECTED) { + connRssi_ = info.rssi; + IsOutdoorScene() ? connScene_ = OUTDOOR_SCENE : connScene_ = INDOOR_SCENE; + } + lastState_ = state; } void WifiSensorScene::HandleSignalInfoChange(const WifiSignalPollInfo &wifiSignalPollInfo) @@ -88,7 +93,14 @@ void WifiSensorScene::HandleSignalInfoChange(const WifiSignalPollInfo &wifiSigna WIFI_LOGD("Enter HandleSignalInfoChange"); std::lock_guard lock(staCbMutex_); if (rssiCnt_ == CONN_RSSI_CNT) { - ReportLinkedQuality(reportRssi_); + WifiLinkedInfo linkedInfo; + WifiConfigCenter::GetInstance().GetLinkedInfo(linkedInfo); + int32_t maxSignalLevel = WifiSettings::GetInstance().GetSignalLevel(maxRssi_, linkedInfo.band, INSTID_WLAN0); + if (maxSignalLevel == SIG_LEVEL_4) { + ReportLinkedQuality(connRssi_); + } else { + ReportLinkedQuality(reportRssi_); + } } if (rssiCnt_ > CONN_RSSI_CNT) { WIFI_LOGD("Current link has collected rssi data"); @@ -96,6 +108,7 @@ void WifiSensorScene::HandleSignalInfoChange(const WifiSignalPollInfo &wifiSigna } rssiCnt_++; reportRssi_ = wifiSignalPollInfo.signal < reportRssi_ ? wifiSignalPollInfo.signal : reportRssi_; + maxRssi_ = wifiSignalPollInfo.signal < maxRssi_ ? maxRssi_ : wifiSignalPollInfo.signal; } StaServiceCallback WifiSensorScene::GetStaCallback() const diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.h index 18072beab68e6eb474b597ca049dc76da10e0b2d..7584c729be5598546007f34e7e6ff54aa2f8733b 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_sensor_scene.h @@ -22,6 +22,8 @@ namespace OHOS { namespace Wifi { +const int DEFAULT_MIN_RSSI = -140; + enum ConnScene { UNKNOW_SCENE = 0, OUTDOOR_SCENE = 1, @@ -59,6 +61,9 @@ private: int rssiCnt_ = 0; int connScene_ = UNKNOW_SCENE; int reportRssi_ = 0; + int connRssi_ = 0; + int maxRssi_ = DEFAULT_MIN_RSSI; + OperateResState lastState_ = OperateResState::DISCONNECT_DISCONNECTED; StaServiceCallback staCallback_; bool isCallbackReg_; };