diff --git a/wifi/1.0/default/wifi_chip.cpp b/wifi/1.0/default/wifi_chip.cpp index 91cf5145a8..e829924ffa 100644 --- a/wifi/1.0/default/wifi_chip.cpp +++ b/wifi/1.0/default/wifi_chip.cpp @@ -70,7 +70,29 @@ Return WifiChip::getMode() { Return WifiChip::requestChipDebugInfo() { if (!legacy_hal_.lock()) return Void(); - // TODO add implementation + + IWifiChipEventCallback::ChipDebugInfo result; + + std::pair 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 e755feace2..e3ae109442 100644 --- a/wifi/1.0/default/wifi_legacy_hal.cpp +++ b/wifi/1.0/default/wifi_legacy_hal.cpp @@ -49,6 +49,8 @@ namespace wifi { namespace V1_0 { namespace implementation { +const uint32_t WifiLegacyHal::kMaxVersionStringLength = 256; + WifiLegacyHal::WifiLegacyHal() : global_handle_(nullptr), wlan_interface_handle_(nullptr), @@ -102,6 +104,22 @@ wifi_error WifiLegacyHal::stop( return WIFI_SUCCESS; } +std::pair WifiLegacyHal::getWlanDriverVersion() { + std::array 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 WifiLegacyHal::getWlanFirmwareVersion() { + std::array 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 1af9f1a2f6..e2a160e1ed 100644 --- a/wifi/1.0/default/wifi_legacy_hal.h +++ b/wifi/1.0/default/wifi_legacy_hal.h @@ -39,8 +39,13 @@ class WifiLegacyHal { wifi_error start(); // Deinitialize the legacy HAL and stop the event looper thread. wifi_error stop(const std::function& on_complete_callback); + // Wrappers for all the functions in the legacy HAL function table. + std::pair getWlanDriverVersion(); + std::pair 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.