Modify the internal state management logic.
authorJaehwan Lee <jh8379.lee@samsung.com>
Mon, 20 May 2013 05:48:36 +0000 (14:48 +0900)
committerJaehwan Lee <jh8379.lee@samsung.com>
Wed, 22 May 2013 01:26:48 +0000 (10:26 +0900)
Change-Id: Id1e98b26adcb646b29e14efa548efffdde476b10
Signed-off-by: Jaehwan Lee <jh8379.lee@samsung.com>
src/inc/FNetWifi_WifiManagerImpl.h
src/inc/FNetWifi_WifiSystemAdapter.h
src/wifi/FNetWifi_WifiManagerImpl.cpp
src/wifi/FNetWifi_WifiSystemAdapter.cpp
src/wifi/FNetWifi_WifiUtility.cpp

index b84a9b6..39b9fc2 100644 (file)
@@ -225,7 +225,8 @@ private:
            WIFI_MANAGER_DEACTIVATING,
            WIFI_MANAGER_ACTIVATED,
            WIFI_MANAGER_CONNECTING,
-           WIFI_MANAGER_CONNECTED
+           WIFI_MANAGER_CONNECTED,
+           WIFI_MANAGER_DISCONNECTING
     };
     enum _WifiScanState
     {
index 730e4f0..4f5c34a 100644 (file)
@@ -304,9 +304,11 @@ private:
      */
     _WifiSystemAdapter& operator=(const _WifiSystemAdapter& rhs);
 
+    static const char* GetStringOfConnectionState(wifi_connection_state_e state);
+
 private:
     Tizen::Base::Collection::LinkedListT<_IWifiManagerEventListener*> __mgrEvtListenerList;
-    WifiBssInfo* __pBssInfo;
+    wifi_connection_state_e __prevconnState;
 
 friend class std::default_delete<_WifiSystemAdapter>;
 
index 8881da3..599a23f 100644 (file)
@@ -51,7 +51,6 @@ _WifiManagerImpl::_WifiManagerImpl(void)
     , __stateMutex()
     , __currentState(WIFI_MANAGER_DEACTIVATED)
     , __currentScanState(WIFI_SCAN_IDLE)
-    , __wasConnected(false)
 {
 }
 
@@ -108,7 +107,6 @@ _WifiManagerImpl::Construct(IWifiManagerEventListener& listener)
         if (__pWifiSystemAdapter->IsConnected())
         {
             __currentState = WIFI_MANAGER_CONNECTED;
-            __wasConnected = true;
         }
         else
         {
@@ -360,6 +358,20 @@ _WifiManagerImpl::Connect(const WifiBssInfo& targetApInfo)
         r = E_INVALID_STATE;
         break;
     case WIFI_MANAGER_ACTIVATED:
+       if (targetApInfo.GetBssType() != WIFI_BSS_TYPE_INFRASTRUCTURE)
+               {
+                       r = E_INVALID_ARG;
+               }
+               else
+               {
+                       r = __pWifiSystemAdapter->Connect(targetApInfo);
+                       if (r == E_SUCCESS)
+                       {
+                               __currentState = WIFI_MANAGER_CONNECTING;
+                       }
+               }
+               break;
+
     case WIFI_MANAGER_CONNECTED:
         if (targetApInfo.GetBssType() != WIFI_BSS_TYPE_INFRASTRUCTURE)
         {
@@ -370,10 +382,11 @@ _WifiManagerImpl::Connect(const WifiBssInfo& targetApInfo)
             r = __pWifiSystemAdapter->Connect(targetApInfo);
             if (r == E_SUCCESS)
             {
-                __currentState = WIFI_MANAGER_CONNECTING;
+                __currentState = WIFI_MANAGER_DISCONNECTING;
             }
         }
         break;
+    case WIFI_MANAGER_DISCONNECTING:
     case WIFI_MANAGER_CONNECTING:
         r = E_IN_PROGRESS;
         break;
@@ -572,6 +585,7 @@ _WifiManagerImpl::OnWifiDeactivated(result r)
     case WIFI_MANAGER_CONNECTING:
     case WIFI_MANAGER_CONNECTED:
     case WIFI_MANAGER_ACTIVATING:
+    case WIFI_MANAGER_DISCONNECTING:
         if (r == E_SUCCESS)
         {
             __currentState = WIFI_MANAGER_DEACTIVATED;
@@ -585,11 +599,6 @@ _WifiManagerImpl::OnWifiDeactivated(result r)
 
     __stateMutex.Release();
 
-    if (r == E_SUCCESS)
-    {
-        __wasConnected = false;
-    }
-
     if (isFired)
     {
         _WifiManagerEventArg* pArg = new (std::nothrow) _WifiManagerEventArg(_WIFI_EVENT_DEACTIVATED, r);
@@ -622,7 +631,6 @@ _WifiManagerImpl::OnWifiConnected(const Tizen::Base::String &ssid, result r)
         if (r == E_SUCCESS)
         {
             __currentState = WIFI_MANAGER_CONNECTED;
-            __wasConnected = true;
             isFired = true;
         }
         else
@@ -634,15 +642,14 @@ _WifiManagerImpl::OnWifiConnected(const Tizen::Base::String &ssid, result r)
         if (r == E_SUCCESS)
         {
             __currentState = WIFI_MANAGER_CONNECTED;
-            __wasConnected = true;
             isFired = true;
         }
         break;
     case WIFI_MANAGER_CONNECTING:
+    case WIFI_MANAGER_DISCONNECTING:
         if (r == E_SUCCESS)
         {
             __currentState = WIFI_MANAGER_CONNECTED;
-            __wasConnected = true;
         }
         else
         {
@@ -685,34 +692,23 @@ _WifiManagerImpl::OnWifiDisconnected(void)
     switch (__currentState)
     {
     case WIFI_MANAGER_DEACTIVATING:
-               if (__wasConnected == true)
-               {
-                       isFired = true;
-               }
-        break;
-
+       isFired = true;
+       break;
     case WIFI_MANAGER_CONNECTING:
-               if (__wasConnected == true)
-               {
-                       isFired = true;
-               }
-               else
-               {
-                       __currentState = WIFI_MANAGER_ACTIVATED;
-               }
         break;
-
     case WIFI_MANAGER_CONNECTED:
                __currentState = WIFI_MANAGER_ACTIVATED;
                isFired = true;
         break;
+    case WIFI_MANAGER_DISCONNECTING:
+       __currentState = WIFI_MANAGER_CONNECTING;
+       isFired = true;
+       break;
     default:
         break;
     }
     __stateMutex.Release();
 
-    __wasConnected = false;
-
     if (isFired)
     {
         _WifiManagerEventArg* pArg = new (std::nothrow) _WifiManagerEventArg(_WIFI_EVENT_DISCONNECTED);
@@ -815,30 +811,33 @@ _WifiManagerImpl::GetStringOfCurrentState(void) const
 {
     const char* pStateString = null;
 
-    switch (__currentState)
-    {
-    case WIFI_MANAGER_DEACTIVATED:
-        pStateString = "__WIFI_MANAGER_DEACTIVATED";
-        break;
-    case WIFI_MANAGER_ACTIVATING:
-        pStateString = "__WIFI_MANAGER_ACTIVATING";
-        break;
-    case WIFI_MANAGER_DEACTIVATING:
-        pStateString = "__WIFI_MANAGER_DEACTIVATING";
-        break;
-    case WIFI_MANAGER_ACTIVATED:
-        pStateString = "__WIFI_MANAGER_ACTIVATED";
-        break;
-    case WIFI_MANAGER_CONNECTING:
-        pStateString = "__WIFI_MANAGER_CONNECTING";
-        break;
-    case WIFI_MANAGER_CONNECTED:
-        pStateString = "__WIFI_MANAGER_CONNECTED";
-        break;
-    default:
-        pStateString = "Unknown";
-        break;
-    }
+       switch (__currentState)
+       {
+       case WIFI_MANAGER_DEACTIVATED:
+               pStateString = "__WIFI_MANAGER_DEACTIVATED";
+               break;
+       case WIFI_MANAGER_ACTIVATING:
+               pStateString = "__WIFI_MANAGER_ACTIVATING";
+               break;
+       case WIFI_MANAGER_DEACTIVATING:
+               pStateString = "__WIFI_MANAGER_DEACTIVATING";
+               break;
+       case WIFI_MANAGER_ACTIVATED:
+               pStateString = "__WIFI_MANAGER_ACTIVATED";
+               break;
+       case WIFI_MANAGER_CONNECTING:
+               pStateString = "__WIFI_MANAGER_CONNECTING";
+               break;
+       case WIFI_MANAGER_CONNECTED:
+               pStateString = "__WIFI_MANAGER_CONNECTED";
+               break;
+       case WIFI_MANAGER_DISCONNECTING:
+               pStateString = "__WIFI_MANAGER_DISCONNECTING";
+               break;
+       default:
+               pStateString = "Unknown";
+               break;
+       }
 
     return pStateString;
 }
index 4ea4974..b1e796f 100644 (file)
@@ -53,7 +53,7 @@ static _WifiSystemAdapter* pInstance = null;
 
 _WifiSystemAdapter::_WifiSystemAdapter(void)
        : __mgrEvtListenerList()
-       , __pBssInfo(null)
+       , __prevconnState(WIFI_CONNECTION_STATE_DISCONNECTED)
 {
 }
 
@@ -81,6 +81,8 @@ _WifiSystemAdapter::Construct(void)
        err = wifi_set_background_scan_cb(OnWifiBackgroundScanResultUpdated, null);
        SysTryReturnResult(NID_NET_WIFI, err == WIFI_ERROR_NONE, E_SYSTEM, "Failed to wifi_set_background_scan_cb()");
 
+       wifi_get_connection_state(&__prevconnState);
+
        return E_SUCCESS;
 }
 
@@ -428,15 +430,25 @@ _WifiSystemAdapter::OnWifiConnectionStateChanged(wifi_connection_state_e state,
        _WifiSystemAdapter* pAdapter = _WifiSystemAdapter::GetInstance();
        pEnum = pAdapter->__mgrEvtListenerList.GetEnumeratorN();
 
+       char* pEssid = null;
+       int err = wifi_ap_get_essid(pApHandle, &pEssid);
+       unique_ptr<char, _CharDeleter> pSsid(pEssid);
+       SysTryLog(NID_NET_WIFI, err == WIFI_ERROR_NONE, "Failed result from wifi_ap_get_essid() is 0x%x.", err);
+       SysLog(NID_NET_WIFI, "The connection state is %s, ssid : %s", GetStringOfConnectionState(state), pSsid.get());
+
+       if (pAdapter->__prevconnState == state)
+       {
+               SysLog(NID_NET_WIFI, "The connection state is same as the previous state.[%d]", state);
+               return;
+       }
+
+       pAdapter->__prevconnState = state;
+
        switch(state)
        {
        case WIFI_CONNECTION_STATE_CONNECTED:
        {
-               char* pEssid = null;
-               int err = wifi_ap_get_essid(pApHandle, &pEssid);
-               SysTryLog(NID_NET_WIFI, err == WIFI_ERROR_NONE, "Failed result from wifi_ap_get_essid() is 0x%x.", err);
-               String ssid(pEssid);
-               free(pEssid);
+               String ssid(pSsid.release());
 
                while (pEnum->MoveNext() == E_SUCCESS)
                {
@@ -762,4 +774,18 @@ _WifiSystemAdapter::OnWifiRssiLevelChanged(wifi_rssi_level_e rssiLevel, void *pU
        delete pEnum;
 }
 
+const char*
+_WifiSystemAdapter::GetStringOfConnectionState(wifi_connection_state_e state)
+{
+       const char* pStateStr[] =
+       {
+               "DISCONNECTED",
+               "ASSOCIATION",
+               "CONFIGURATION",
+               "CONNECTED",
+       };
+
+       return pStateStr[state];
+}
+
 } } } // Tizen::Net::Wifi
index ce9d73f..b936f02 100644 (file)
@@ -198,22 +198,10 @@ _WifiUtility::ConvertRadioChannel(int frequency)
 long
 _WifiUtility::ConvertPercentagetoRssiValue(char val)
 {
-       if (val >= 75)
-       {
-               return -55;
-       }
-       else if (val > 50)
-       {
-               return -70;
-       }
-       else if (val > 25)
-       {
-               return -85;
-       }
-       else
-       {
-               return -100;
-       }
+       static const int REF_VALUE = -119;
+       long rssi = (long)val + REF_VALUE;
+
+       return rssi;
 }
 
 long