blob: 42118b75d2e276e84eb2865781fe4d90b762cded [file] [log] [blame]
Roshan Pius3c4e8a32016-10-03 14:53:58 -07001/*
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#include "wifi_chip.h"
18
19#include <android-base/logging.h>
20
21#include "failure_reason_util.h"
22
23namespace android {
24namespace hardware {
25namespace wifi {
Roshan Pius79a99752016-10-04 13:03:58 -070026namespace V1_0 {
27namespace implementation {
Roshan Pius3c4e8a32016-10-03 14:53:58 -070028
Roshan Pius79a99752016-10-04 13:03:58 -070029WifiChip::WifiChip(WifiHalState* hal_state,
30 wifi_interface_handle interface_handle)
Roshan Pius3c4e8a32016-10-03 14:53:58 -070031 : hal_state_(hal_state), interface_handle_(interface_handle) {}
32
33void WifiChip::Invalidate() {
34 hal_state_ = nullptr;
35 callbacks_.clear();
36}
37
38Return<void> WifiChip::registerEventCallback(
Roshan Pius79a99752016-10-04 13:03:58 -070039 const sp<IWifiChipEventCallback>& callback) {
40 if (!hal_state_)
41 return Void();
Roshan Pius3c4e8a32016-10-03 14:53:58 -070042 // TODO(b/31632518): remove the callback when the client is destroyed
43 callbacks_.insert(callback);
44 return Void();
45}
46
47Return<void> WifiChip::getAvailableModes(getAvailableModes_cb cb) {
48 if (!hal_state_) {
49 cb(hidl_vec<ChipMode>());
50 return Void();
51 } else {
52 // TODO add implementation
53 return Void();
54 }
55}
56
57Return<void> WifiChip::configureChip(uint32_t /*mode_id*/) {
Roshan Pius79a99752016-10-04 13:03:58 -070058 if (!hal_state_)
59 return Void();
Roshan Pius3c4e8a32016-10-03 14:53:58 -070060 // TODO add implementation
61 return Void();
62}
63
64Return<uint32_t> WifiChip::getMode() {
Roshan Pius79a99752016-10-04 13:03:58 -070065 if (!hal_state_)
66 return 0;
Roshan Pius3c4e8a32016-10-03 14:53:58 -070067 // TODO add implementation
68 return 0;
69}
70
71Return<void> WifiChip::requestChipDebugInfo() {
Roshan Pius79a99752016-10-04 13:03:58 -070072 if (!hal_state_)
73 return Void();
Roshan Pius3c4e8a32016-10-03 14:53:58 -070074
Roshan Pius79a99752016-10-04 13:03:58 -070075 IWifiChipEventCallback::ChipDebugInfo result;
Roshan Pius3c4e8a32016-10-03 14:53:58 -070076 result.driverDescription = "<unknown>";
77 result.firmwareDescription = "<unknown>";
78 char buffer[256];
79
80 // get driver version
81 bzero(buffer, sizeof(buffer));
82 wifi_error ret = hal_state_->func_table_.wifi_get_driver_version(
83 interface_handle_, buffer, sizeof(buffer));
84 if (ret == WIFI_SUCCESS) {
85 result.driverDescription = buffer;
86 } else {
87 LOG(WARNING) << "Failed to get driver version: "
88 << LegacyErrorToString(ret);
89 }
90
91 // get firmware version
92 bzero(buffer, sizeof(buffer));
93 ret = hal_state_->func_table_.wifi_get_firmware_version(
94 interface_handle_, buffer, sizeof(buffer));
95 if (ret == WIFI_SUCCESS) {
96 result.firmwareDescription = buffer;
97 } else {
98 LOG(WARNING) << "Failed to get firmware version: "
99 << LegacyErrorToString(ret);
100 }
101
102 // send callback
103 for (auto& callback : callbacks_) {
104 callback->onChipDebugInfoAvailable(result);
105 }
106 return Void();
107}
108
109Return<void> WifiChip::requestDriverDebugDump() {
110 // TODO implement
111 return Void();
112}
113
114Return<void> WifiChip::requestFirmwareDebugDump() {
115 // TODO implement
116 return Void();
117}
118
Roshan Pius79a99752016-10-04 13:03:58 -0700119} // namespace implementation
120} // namespace V1_0
Roshan Pius3c4e8a32016-10-03 14:53:58 -0700121} // namespace wifi
122} // namespace hardware
123} // namespace android