diff options
author | Roshan Pius <rpius@google.com> | 2018-05-11 10:59:09 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-05-11 11:09:26 -0700 |
commit | 49ad9d4f0c52b44dcfce54bc594df902dda3df0c (patch) | |
tree | 3fd6571e9ef9f7186b0239f2a719cad7362a3bfb | |
parent | f9f970b1fa45d917adb3ff7bac12cf1c1e06bb8f (diff) |
WifiVendorHal: Change radio mode info parsing logic
Change the parsing logic based on clarification from the vendor.
Each RadioModeInfo instance represents a single
independently controllable hardware MAC at the chip level. So, for the
time sharing modes (SCC or MCC), the number of RadioModeInfo instances
will be 1 which represents the single active hardware MAC.
The previous parsing logic assumed that the time sharing modes will
contain 2 RadioModeInfo instances.
Bug: 78576621
Test: Modified Unit tests to meet new expectations.
Test: Manually verified the mode change callbacks with STA + AP.
Change-Id: I207cc1f1ec178eab1b797a5892cd0babe7a344e9
-rw-r--r-- | service/java/com/android/server/wifi/WifiVendorHal.java | 27 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java | 120 |
2 files changed, 12 insertions, 135 deletions
diff --git a/service/java/com/android/server/wifi/WifiVendorHal.java b/service/java/com/android/server/wifi/WifiVendorHal.java index 08d03d7de..d8fd62753 100644 --- a/service/java/com/android/server/wifi/WifiVendorHal.java +++ b/service/java/com/android/server/wifi/WifiVendorHal.java @@ -2965,13 +2965,12 @@ public class WifiVendorHal { mLog.e("Unexpected number of radio info in list " + radioModeInfoList.size()); return; } - // Not concurrency scenario, uninteresting... - if (radioModeInfoList.size() == 1) return; - RadioModeInfo radioModeInfo0 = radioModeInfoList.get(0); - RadioModeInfo radioModeInfo1 = radioModeInfoList.get(1); + RadioModeInfo radioModeInfo1 = + radioModeInfoList.size() == 2 ? radioModeInfoList.get(1) : null; // Number of ifaces on each radio should be equal. - if (radioModeInfo0.ifaceInfos.size() != radioModeInfo1.ifaceInfos.size()) { + if (radioModeInfo1 != null + && radioModeInfo0.ifaceInfos.size() != radioModeInfo1.ifaceInfos.size()) { mLog.e("Unexpected number of iface info in list " + radioModeInfo0.ifaceInfos.size() + ", " + radioModeInfo1.ifaceInfos.size()); @@ -2984,7 +2983,7 @@ public class WifiVendorHal { return; } // 2 ifaces simultaneous on 2 radios. - if (numIfacesOnEachRadio == 1) { + if (radioModeInfoList.size() == 2 && numIfacesOnEachRadio == 1) { // Iface on radio0 should be different from the iface on radio1 for DBS & SBS. if (areSameIfaceNames(radioModeInfo0.ifaceInfos, radioModeInfo1.ifaceInfos)) { mLog.e("Unexpected for both radio infos to have same iface"); @@ -2995,18 +2994,8 @@ public class WifiVendorHal { } else { handler.onSbs(radioModeInfo0.bandInfo); } - // 2 ifaces time sharing on 2 radios. - } else { - // Ifaces on radio0 & radio1 should be the same for MCC & SCC. - if (!areSameIfaces(radioModeInfo0.ifaceInfos, radioModeInfo1.ifaceInfos)) { - mLog.e("Unexpected for both radio infos to have different ifaces"); - return; - } - // Both radio0 & radio1 should now be in the same band (could be 5G or 2G). - if (radioModeInfo0.bandInfo != radioModeInfo1.bandInfo) { - mLog.e("Unexpected for both radio infos to have different band"); - return; - } + // 2 ifaces time sharing on 1 radio. + } else if (radioModeInfoList.size() == 1 && numIfacesOnEachRadio == 2) { IfaceInfo ifaceInfo0 = radioModeInfo0.ifaceInfos.get(0); IfaceInfo ifaceInfo1 = radioModeInfo0.ifaceInfos.get(1); if (ifaceInfo0.channel != ifaceInfo1.channel) { @@ -3014,6 +3003,8 @@ public class WifiVendorHal { } else { handler.onScc(radioModeInfo0.bandInfo); } + } else { + // Not concurrency scenario, uninteresting... } } } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java b/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java index dcef6e9d4..f7a3c4be6 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java @@ -2261,8 +2261,6 @@ public class WifiVendorHalTest { RadioModeInfo radioModeInfo0 = new RadioModeInfo(); radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; - RadioModeInfo radioModeInfo1 = new RadioModeInfo(); - radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; IfaceInfo ifaceInfo0 = new IfaceInfo(); ifaceInfo0.name = TEST_IFACE_NAME; @@ -2273,12 +2271,9 @@ public class WifiVendorHalTest { radioModeInfo0.ifaceInfos.add(ifaceInfo0); radioModeInfo0.ifaceInfos.add(ifaceInfo1); - radioModeInfo1.ifaceInfos.add(ifaceInfo0); - radioModeInfo1.ifaceInfos.add(ifaceInfo1); ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); radioModeInfos.add(radioModeInfo0); - radioModeInfos.add(radioModeInfo1); mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); verify(mVendorHalRadioModeChangeHandler).onScc(WifiScanner.WIFI_BAND_5_GHZ); @@ -2294,97 +2289,23 @@ public class WifiVendorHalTest { startHalInStaModeAndRegisterRadioModeChangeCallback(); RadioModeInfo radioModeInfo0 = new RadioModeInfo(); - radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; - RadioModeInfo radioModeInfo1 = new RadioModeInfo(); - radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; + radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_BOTH; IfaceInfo ifaceInfo0 = new IfaceInfo(); ifaceInfo0.name = TEST_IFACE_NAME; - ifaceInfo0.channel = 34; + ifaceInfo0.channel = 1; IfaceInfo ifaceInfo1 = new IfaceInfo(); ifaceInfo1.name = TEST_IFACE_NAME_1; ifaceInfo1.channel = 36; radioModeInfo0.ifaceInfos.add(ifaceInfo0); radioModeInfo0.ifaceInfos.add(ifaceInfo1); - radioModeInfo1.ifaceInfos.add(ifaceInfo0); - radioModeInfo1.ifaceInfos.add(ifaceInfo1); ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); radioModeInfos.add(radioModeInfo0); - radioModeInfos.add(radioModeInfo1); mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); - verify(mVendorHalRadioModeChangeHandler).onMcc(WifiScanner.WIFI_BAND_5_GHZ); - - verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); - } - - /** - * Verifies radio mode change callback error cases. - */ - @Test - public void testRadioModeChangeCallbackErrorTimeSharingWithDifferentIfacesOnBothRadios() - throws Exception { - startHalInStaModeAndRegisterRadioModeChangeCallback(); - - RadioModeInfo radioModeInfo0 = new RadioModeInfo(); - radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; - RadioModeInfo radioModeInfo1 = new RadioModeInfo(); - radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; - - IfaceInfo ifaceInfo0 = new IfaceInfo(); - ifaceInfo0.name = TEST_IFACE_NAME; - ifaceInfo0.channel = 34; - IfaceInfo ifaceInfo1 = new IfaceInfo(); - ifaceInfo1.name = TEST_IFACE_NAME_1; - ifaceInfo1.channel = 34; - - radioModeInfo0.ifaceInfos.add(ifaceInfo0); - radioModeInfo0.ifaceInfos.add(ifaceInfo0); - radioModeInfo1.ifaceInfos.add(ifaceInfo1); - radioModeInfo1.ifaceInfos.add(ifaceInfo1); - - ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); - radioModeInfos.add(radioModeInfo0); - radioModeInfos.add(radioModeInfo1); - - mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); - // Ignored.... - - verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); - } - - /** - * Verifies radio mode change callback error cases. - */ - @Test - public void testRadioModeChangeCallbackErrorTimeSharingWithDifferentNumberOfIfacesOnBothRadios() - throws Exception { - startHalInStaModeAndRegisterRadioModeChangeCallback(); - - RadioModeInfo radioModeInfo0 = new RadioModeInfo(); - radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; - RadioModeInfo radioModeInfo1 = new RadioModeInfo(); - radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; - - IfaceInfo ifaceInfo0 = new IfaceInfo(); - ifaceInfo0.name = TEST_IFACE_NAME; - ifaceInfo0.channel = 34; - IfaceInfo ifaceInfo1 = new IfaceInfo(); - ifaceInfo1.name = TEST_IFACE_NAME_1; - ifaceInfo1.channel = 34; - - radioModeInfo0.ifaceInfos.add(ifaceInfo0); - radioModeInfo1.ifaceInfos.add(ifaceInfo1); - radioModeInfo1.ifaceInfos.add(ifaceInfo1); - - ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); - radioModeInfos.add(radioModeInfo0); - radioModeInfos.add(radioModeInfo1); - - mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); - // Ignored.... + verify(mVendorHalRadioModeChangeHandler).onMcc(WifiScanner.WIFI_BAND_BOTH); verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); } @@ -2419,41 +2340,6 @@ public class WifiVendorHalTest { verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); } - /** - * Verifies radio mode change callback error cases. - */ - @Test - public void testRadioModeChangeCallbackErrorTimeSharingWithDifferentBandsOnBothRadios() - throws Exception { - startHalInStaModeAndRegisterRadioModeChangeCallback(); - - RadioModeInfo radioModeInfo0 = new RadioModeInfo(); - radioModeInfo0.bandInfo = WifiScanner.WIFI_BAND_24_GHZ; - RadioModeInfo radioModeInfo1 = new RadioModeInfo(); - radioModeInfo1.bandInfo = WifiScanner.WIFI_BAND_5_GHZ; - - IfaceInfo ifaceInfo0 = new IfaceInfo(); - ifaceInfo0.name = TEST_IFACE_NAME; - ifaceInfo0.channel = 34; - IfaceInfo ifaceInfo1 = new IfaceInfo(); - ifaceInfo1.name = TEST_IFACE_NAME_1; - ifaceInfo1.channel = 36; - - radioModeInfo0.ifaceInfos.add(ifaceInfo0); - radioModeInfo0.ifaceInfos.add(ifaceInfo1); - radioModeInfo1.ifaceInfos.add(ifaceInfo0); - radioModeInfo1.ifaceInfos.add(ifaceInfo1); - - ArrayList<RadioModeInfo> radioModeInfos = new ArrayList<>(); - radioModeInfos.add(radioModeInfo0); - radioModeInfos.add(radioModeInfo1); - - mIWifiChipEventCallbackV12.onRadioModeChange(radioModeInfos); - // Ignored.... - - verifyNoMoreInteractions(mVendorHalRadioModeChangeHandler); - } - private void startHalInStaModeAndRegisterRadioModeChangeCallback() { // Expose the 1.2 IWifiChip. mWifiVendorHal = new WifiVendorHalSpyV1_2(mHalDeviceManager, mLooper.getLooper()); |