1e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills/* 2e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * Copyright (C) 2016 The Android Open Source Project 3e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * 4e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * Licensed under the Apache License, Version 2.0 (the "License"); 5e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * you may not use this file except in compliance with the License. 6e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * You may obtain a copy of the License at 7e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * 8e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * http://www.apache.org/licenses/LICENSE-2.0 9e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * 10e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * Unless required by applicable law or agreed to in writing, software 11e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * distributed under the License is distributed on an "AS IS" BASIS, 12e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * See the License for the specific language governing permissions and 14e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills * limitations under the License. 15e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills */ 16e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills 17e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Willspackage com.android.server.wifi.scanner; 18e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills 19e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Willsimport android.net.wifi.WifiScanner; 20e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Willsimport android.util.Log; 21e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills 22e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Willsimport com.android.server.wifi.WifiNative; 23e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills 24e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills/** 256baff2cb8dec599af186be521882413787595930Ningyuan Wang * KnownBandsChannelHelper that uses band to channel mappings retrieved from wificond. 266baff2cb8dec599af186be521882413787595930Ningyuan Wang * Also supporting updating the channel list from the wificond on demand. 27e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills */ 286baff2cb8dec599af186be521882413787595930Ningyuan Wangpublic class WificondChannelHelper extends KnownBandsChannelHelper { 296baff2cb8dec599af186be521882413787595930Ningyuan Wang private static final String TAG = "WificondChannelHelper"; 30e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills 31e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills private final WifiNative mWifiNative; 32e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills 336baff2cb8dec599af186be521882413787595930Ningyuan Wang public WificondChannelHelper(WifiNative wifiNative) { 34e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills mWifiNative = wifiNative; 35e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills final int[] emptyFreqList = new int[0]; 36e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills setBandChannels(emptyFreqList, emptyFreqList, emptyFreqList); 37e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills updateChannels(); 38e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills } 39e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills 40e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills @Override 41e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills public void updateChannels() { 426baff2cb8dec599af186be521882413787595930Ningyuan Wang int[] channels24G = 436baff2cb8dec599af186be521882413787595930Ningyuan Wang mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_24_GHZ); 44e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills if (channels24G == null) Log.e(TAG, "Failed to get channels for 2.4GHz band"); 45e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills int[] channels5G = mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ); 46e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills if (channels5G == null) Log.e(TAG, "Failed to get channels for 5GHz band"); 476baff2cb8dec599af186be521882413787595930Ningyuan Wang int[] channelsDfs = 486baff2cb8dec599af186be521882413787595930Ningyuan Wang mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY); 49e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills if (channelsDfs == null) Log.e(TAG, "Failed to get channels for 5GHz DFS only band"); 50e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills if (channels24G == null || channels5G == null || channelsDfs == null) { 51e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills Log.e(TAG, "Failed to get all channels for band, not updating band channel lists"); 52e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills } else if (channels24G.length > 0 || channels5G.length > 0 || channelsDfs.length > 0) { 53e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills setBandChannels(channels24G, channels5G, channelsDfs); 54ffd253e626fd6154dbd77320d08e2a42cc178aa6Mitchell Wills } else { 55ffd253e626fd6154dbd77320d08e2a42cc178aa6Mitchell Wills Log.e(TAG, "Got zero length for all channel lists"); 56e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills } 57e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills } 58e6d8fa5fb50afdfc04922f7f87c2cac08db5bbecMitchell Wills} 59