1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef WIFI_MODE_CONTROLLER_H_
18 #define WIFI_MODE_CONTROLLER_H_
19 
20 #include <wifi_hal/driver_tool.h>
21 
22 #include <android/hardware/wifi/1.0/IWifi.h>
23 
24 namespace android {
25 namespace hardware {
26 namespace wifi {
27 namespace V1_4 {
28 namespace implementation {
29 namespace mode_controller {
30 using namespace android::hardware::wifi::V1_0;
31 
32 /**
33  * Class that encapsulates all firmware mode configuration.
34  * This class will perform the necessary firmware reloads to put the chip in the
35  * required state (essentially a wrapper over DriverTool).
36  */
37 class WifiModeController {
38    public:
39     WifiModeController();
40     virtual ~WifiModeController() = default;
41 
42     // Checks if a firmware mode change is necessary to support the specified
43     // iface type operations.
44     virtual bool isFirmwareModeChangeNeeded(IfaceType type);
45     virtual bool initialize();
46     // Change the firmware mode to support the specified iface type operations.
47     virtual bool changeFirmwareMode(IfaceType type);
48     // Unload the driver. This should be invoked whenever |IWifi.stop()| is
49     // invoked.
50     virtual bool deinitialize();
51 
52    private:
53     std::unique_ptr<wifi_hal::DriverTool> driver_tool_;
54 };
55 
56 }  // namespace mode_controller
57 }  // namespace implementation
58 }  // namespace V1_4
59 }  // namespace wifi
60 }  // namespace hardware
61 }  // namespace android
62 
63 #endif  // WIFI_MODE_CONTROLLER_H_
64