wifi: Add Implementation of IWifiChip.requestChipDebugInfo
Bug: 31352200
Test: mmma -j32 hardware/interfaces/wifi/1.0/default
Change-Id: Id0c02e37dac66de6f830785881cb67f113c0fb19
diff --git a/wifi/1.0/default/wifi_chip.cpp b/wifi/1.0/default/wifi_chip.cpp
index 91cf514..e829924 100644
--- a/wifi/1.0/default/wifi_chip.cpp
+++ b/wifi/1.0/default/wifi_chip.cpp
@@ -70,7 +70,29 @@
Return<void> WifiChip::requestChipDebugInfo() {
if (!legacy_hal_.lock())
return Void();
- // TODO add implementation
+
+ IWifiChipEventCallback::ChipDebugInfo result;
+
+ std::pair<wifi_error, std::string> ret =
+ legacy_hal_.lock()->getWlanDriverVersion();
+ if (ret.first != WIFI_SUCCESS) {
+ LOG(ERROR) << "Failed to get driver version: "
+ << LegacyErrorToString(ret.first);
+ return Void();
+ }
+ result.driverDescription = ret.second.c_str();
+
+ ret = legacy_hal_.lock()->getWlanFirmwareVersion();
+ if (ret.first != WIFI_SUCCESS) {
+ LOG(ERROR) << "Failed to get firmware version: "
+ << LegacyErrorToString(ret.first);
+ return Void();
+ }
+ result.firmwareDescription = ret.second.c_str();
+
+ for (const auto& callback : callbacks_) {
+ callback->onChipDebugInfoAvailable(result);
+ }
return Void();
}
diff --git a/wifi/1.0/default/wifi_legacy_hal.cpp b/wifi/1.0/default/wifi_legacy_hal.cpp
index e755fea..e3ae109 100644
--- a/wifi/1.0/default/wifi_legacy_hal.cpp
+++ b/wifi/1.0/default/wifi_legacy_hal.cpp
@@ -49,6 +49,8 @@
namespace V1_0 {
namespace implementation {
+const uint32_t WifiLegacyHal::kMaxVersionStringLength = 256;
+
WifiLegacyHal::WifiLegacyHal()
: global_handle_(nullptr),
wlan_interface_handle_(nullptr),
@@ -102,6 +104,22 @@
return WIFI_SUCCESS;
}
+std::pair<wifi_error, std::string> WifiLegacyHal::getWlanDriverVersion() {
+ std::array<char, kMaxVersionStringLength> buffer;
+ buffer.fill(0);
+ wifi_error status = global_func_table_.wifi_get_driver_version(
+ wlan_interface_handle_, buffer.data(), buffer.size());
+ return std::make_pair(status, buffer.data());
+}
+
+std::pair<wifi_error, std::string> WifiLegacyHal::getWlanFirmwareVersion() {
+ std::array<char, kMaxVersionStringLength> buffer;
+ buffer.fill(0);
+ wifi_error status = global_func_table_.wifi_get_firmware_version(
+ wlan_interface_handle_, buffer.data(), buffer.size());
+ return std::make_pair(status, buffer.data());
+}
+
wifi_error WifiLegacyHal::retrieveWlanInterfaceHandle() {
const std::string& ifname_to_find = getWlanInterfaceName();
diff --git a/wifi/1.0/default/wifi_legacy_hal.h b/wifi/1.0/default/wifi_legacy_hal.h
index 1af9f1a..e2a160e 100644
--- a/wifi/1.0/default/wifi_legacy_hal.h
+++ b/wifi/1.0/default/wifi_legacy_hal.h
@@ -39,8 +39,13 @@
wifi_error start();
// Deinitialize the legacy HAL and stop the event looper thread.
wifi_error stop(const std::function<void()>& on_complete_callback);
+ // Wrappers for all the functions in the legacy HAL function table.
+ std::pair<wifi_error, std::string> getWlanDriverVersion();
+ std::pair<wifi_error, std::string> getWlanFirmwareVersion();
private:
+ static const uint32_t kMaxVersionStringLength;
+
// Retrieve the interface handle to be used for the "wlan" interface.
wifi_error retrieveWlanInterfaceHandle();
// Run the legacy HAL event loop thread.