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