summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2017-03-01 17:03:15 -0800
committerRoshan Pius <rpius@google.com>2017-03-06 16:37:23 -0800
commit3a0679d411c5eb889d38ed32181446c82d5bd825 (patch)
tree01764f487051ca9da08e64b0776163a31fb4d3b4
parent3b7def108eeb23b7350038f2defc966ee23e9952 (diff)
WifiNative: Use Vendor HAL for mode change
Restructure the WifiNative setup/teardown operations so that vendor HAL can start & configure the chip in the correct mode and then inform wificond about it. Bug: 35765841 Test: Will send for integration tests. Change-Id: I14ef0011117f83bed99c21fb459f00263a90a793
-rw-r--r--service/java/com/android/server/wifi/WifiNative.java50
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java8
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNativeTest.java21
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java4
4 files changed, 51 insertions, 32 deletions
diff --git a/service/java/com/android/server/wifi/WifiNative.java b/service/java/com/android/server/wifi/WifiNative.java
index c5e5fc77e..11242a755 100644
--- a/service/java/com/android/server/wifi/WifiNative.java
+++ b/service/java/com/android/server/wifi/WifiNative.java
@@ -238,40 +238,56 @@ public class WifiNative {
}
/**
- * Setup driver for client mode via wificond.
+ * Setup wifi native for Client mode operations.
+ *
+ * 1. Starts the Wifi HAL and configures it in client/STA mode.
+ * 2. Setup Wificond to operate in client mode and retrieve the handle to use for client
+ * operations.
+ *
* @return An IClientInterface as wificond client interface binder handler.
* Returns null on failure.
*/
- public IClientInterface setupDriverForClientMode() {
- IClientInterface clientInterface = mWificondControl.setupDriverForClientMode();
+ public IClientInterface setupForClientMode() {
if (!startHal(true)) {
// TODO(b/34859006): Handle failures.
Log.e(TAG, "Failed to start HAL for client mode");
}
- return clientInterface;
+ return mWificondControl.setupDriverForClientMode();
}
/**
- * Setup driver for softAp mode via wificond.
- * @return An IApInterface as wificond Ap interface binder handler.
- * Returns null on failure.
- */
- public IApInterface setupDriverForSoftApMode() {
- IApInterface apInterface = mWificondControl.setupDriverForSoftApMode();
-
+ * Setup wifi native for AP mode operations.
+ *
+ * 1. Starts the Wifi HAL and configures it in AP mode.
+ * 2. Setup Wificond to operate in AP mode and retrieve the handle to use for ap operations.
+ *
+ * @return An IApInterface as wificond Ap interface binder handler.
+ * Returns null on failure.
+ */
+ public IApInterface setupForSoftApMode() {
if (!startHal(false)) {
// TODO(b/34859006): Handle failures.
Log.e(TAG, "Failed to start HAL for AP mode");
}
- return apInterface;
+ return mWificondControl.setupDriverForSoftApMode();
}
/**
- * Teardown all interfaces configured in wificond.
- * @return Returns true on success.
- */
- public boolean tearDownInterfaces() {
- return mWificondControl.tearDownInterfaces();
+ * Teardown all mode configurations in wifi native.
+ *
+ * 1. Tears down all the interfaces from Wificond.
+ * 2. Stops the Wifi HAL.
+ *
+ * @return Returns true on success.
+ */
+ public boolean tearDown() {
+ if (!mWificondControl.tearDownInterfaces()) {
+ // TODO(b/34859006): Handle failures.
+ Log.e(TAG, "Failed to teardown interfaces from Wificond");
+ return false;
+ }
+ stopHal();
+ return true;
}
/**
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index c25fa3cc2..4b5fb2544 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -3962,9 +3962,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
mWifiMonitor.stopAllMonitoring();
mDeathRecipient.unlinkToDeath();
- mWifiNative.tearDownInterfaces();
-
- mWifiNative.stopHal();
+ mWifiNative.tearDown();
}
@Override
@@ -3978,7 +3976,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
logStateAndMessage(message, this);
switch (message.what) {
case CMD_START_SUPPLICANT:
- mClientInterface = mWifiNative.setupDriverForClientMode();
+ mClientInterface = mWifiNative.setupForClientMode();
if (mClientInterface == null
|| !mDeathRecipient.linkToDeath(mClientInterface.asBinder())) {
setWifiState(WifiManager.WIFI_STATE_UNKNOWN);
@@ -6600,7 +6598,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
throw new RuntimeException("Illegal transition to SoftApState: " + message);
}
- IApInterface apInterface = mWifiNative.setupDriverForSoftApMode();
+ IApInterface apInterface = mWifiNative.setupForSoftApMode();
if (apInterface == null) {
setWifiApState(WIFI_AP_STATE_FAILED,
WifiManager.SAP_START_FAILURE_GENERAL);
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNativeTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNativeTest.java
index ef33b656f..a9a32bd40 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNativeTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNativeTest.java
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.anyBoolean;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.eq;
@@ -157,6 +158,7 @@ public class WifiNativeTest {
wifiNativeConstructor.setAccessible(true);
mWifiNative = spy(wifiNativeConstructor.newInstance("test", true));
mWifiVendorHal = mock(WifiVendorHal.class);
+ when(mWifiVendorHal.startVendorHal(anyBoolean())).thenReturn(true);
mWifiNative.setWifiVendorHal(mWifiVendorHal);
}
@@ -517,10 +519,10 @@ public class WifiNativeTest {
when(wificondControl.setupDriverForClientMode()).thenReturn(clientInterface);
mWifiNative.setWificondControl(wificondControl);
- IClientInterface returnedClientInterface = mWifiNative.setupDriverForClientMode();
+ IClientInterface returnedClientInterface = mWifiNative.setupForClientMode();
assertEquals(clientInterface, returnedClientInterface);
- verify(wificondControl).setupDriverForClientMode();
verify(mWifiNative).startHal(eq(true));
+ verify(wificondControl).setupDriverForClientMode();
}
/**
@@ -535,8 +537,9 @@ public class WifiNativeTest {
when(wificondControl.setupDriverForClientMode()).thenReturn(null);
mWifiNative.setWificondControl(wificondControl);
- IClientInterface returnedClientInterface = mWifiNative.setupDriverForClientMode();
+ IClientInterface returnedClientInterface = mWifiNative.setupForClientMode();
assertEquals(null, returnedClientInterface);
+ verify(mWifiNative).startHal(eq(true));
verify(wificondControl).setupDriverForClientMode();
}
@@ -552,10 +555,10 @@ public class WifiNativeTest {
when(wificondControl.setupDriverForSoftApMode()).thenReturn(apInterface);
mWifiNative.setWificondControl(wificondControl);
- IApInterface returnedApInterface = mWifiNative.setupDriverForSoftApMode();
+ IApInterface returnedApInterface = mWifiNative.setupForSoftApMode();
assertEquals(apInterface, returnedApInterface);
- verify(wificondControl).setupDriverForSoftApMode();
verify(mWifiNative).startHal(eq(false));
+ verify(wificondControl).setupDriverForSoftApMode();
}
/**
@@ -570,8 +573,9 @@ public class WifiNativeTest {
when(wificondControl.setupDriverForSoftApMode()).thenReturn(null);
mWifiNative.setWificondControl(wificondControl);
- IApInterface returnedApInterface = mWifiNative.setupDriverForSoftApMode();
+ IApInterface returnedApInterface = mWifiNative.setupForSoftApMode();
assertEquals(null, returnedApInterface);
+ verify(mWifiNative).startHal(eq(false));
verify(wificondControl).setupDriverForSoftApMode();
}
@@ -607,14 +611,15 @@ public class WifiNativeTest {
* Verifies that tearDownInterfaces() calls underlying WificondControl.
*/
@Test
- public void testTearDownInterfaces() {
+ public void testTearDown() {
WificondControl wificondControl = mock(WificondControl.class);
when(wificondControl.tearDownInterfaces()).thenReturn(true);
mWifiNative.setWificondControl(wificondControl);
- assertTrue(mWifiNative.tearDownInterfaces());
+ assertTrue(mWifiNative.tearDown());
verify(wificondControl).tearDownInterfaces();
+ verify(mWifiVendorHal).stopVendorHal();
}
/**
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java
index 45874ac80..9ab24c56b 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java
@@ -367,8 +367,8 @@ public class WifiStateMachineTest {
.thenReturn(mSoftApManager);
when(mWifiInjector.getPasspointManager()).thenReturn(mPasspointManager);
- when(mWifiNative.setupDriverForClientMode()).thenReturn(mClientInterface);
- when(mWifiNative.setupDriverForSoftApMode()).thenReturn(mApInterface);
+ when(mWifiNative.setupForClientMode()).thenReturn(mClientInterface);
+ when(mWifiNative.setupForSoftApMode()).thenReturn(mApInterface);
when(mWifiInjector.getWifiStateTracker()).thenReturn(mWifiStateTracker);
when(mWifiNative.getInterfaceName()).thenReturn("mockWlan");
when(mWifiNative.enableSupplicant()).thenReturn(true);