Add support for getConnectionCapabilities API
This commit adds the implementation for the API
getConnectionCapabilities() in ISupplicantStaIface HAL.
This is used to return the Wifi support of the connection on
this STA interface.
Bug: 138634524
Bug: 140168755
Test: Manual
Test: VTS test
Change-Id: I3d345f99f554109e57581b9774d2653ffd1358b0
diff --git a/wpa_supplicant/hidl/1.3/sta_iface.cpp b/wpa_supplicant/hidl/1.3/sta_iface.cpp
index 249eebc..0dba906 100644
--- a/wpa_supplicant/hidl/1.3/sta_iface.cpp
+++ b/wpa_supplicant/hidl/1.3/sta_iface.cpp
@@ -29,7 +29,9 @@
namespace {
using android::hardware::wifi::supplicant::V1_0::SupplicantStatus;
using android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode;
-using android::hardware::wifi::supplicant::V1_0::ISupplicantStaIface;
+using android::hardware::wifi::supplicant::V1_3::ISupplicantStaIface;
+using android::hardware::wifi::supplicant::V1_3::ConnectionCapabilities;
+using android::hardware::wifi::supplicant::V1_3::WifiTechnology;
using android::hardware::wifi::supplicant::V1_3::implementation::HidlManager;
constexpr uint32_t kMaxAnqpElems = 100;
@@ -612,6 +614,14 @@
return {{SupplicantStatusCode::SUCCESS, ""}, network};
}
+Return<void> StaIface::getConnectionCapabilities(
+ getConnectionCapabilities_cb _hidl_cb)
+{
+ return validateAndCall(
+ this, SupplicantStatusCode::FAILURE_UNKNOWN,
+ &StaIface::getConnectionCapabilitiesInternal, _hidl_cb);
+}
+
SupplicantStatus StaIface::removeNetworkInternal(SupplicantNetworkId id)
{
struct wpa_supplicant *wpa_s = retrieveIfacePtr();
@@ -1308,6 +1318,28 @@
#endif
}
+std::pair<SupplicantStatus, ConnectionCapabilities>
+StaIface::getConnectionCapabilitiesInternal()
+{
+ struct wpa_supplicant *wpa_s = retrieveIfacePtr();
+ struct ConnectionCapabilities capa;
+
+ if (wpa_s->connection_set) {
+ if (wpa_s->connection_he) {
+ capa.technology = WifiTechnology::HE;
+ } else if (wpa_s->connection_vht) {
+ capa.technology = WifiTechnology::VHT;
+ } else if (wpa_s->connection_ht) {
+ capa.technology = WifiTechnology::HT;
+ } else {
+ capa.technology = WifiTechnology::LEGACY;
+ }
+ } else {
+ capa.technology = WifiTechnology::UNKNOWN;
+ }
+ return {{SupplicantStatusCode::SUCCESS, ""}, capa};
+}
+
/**
* Retrieve the underlying |wpa_supplicant| struct
* pointer for this iface.
diff --git a/wpa_supplicant/hidl/1.3/sta_iface.h b/wpa_supplicant/hidl/1.3/sta_iface.h
index b425bec..47fa0b4 100644
--- a/wpa_supplicant/hidl/1.3/sta_iface.h
+++ b/wpa_supplicant/hidl/1.3/sta_iface.h
@@ -182,6 +182,8 @@
uint32_t own_bootstrap_id,
startDppConfiguratorInitiator_cb _hidl_cb) override;
Return<void> stopDppInitiator(stopDppInitiator_cb _hidl_cb) override;
+ Return<void> getConnectionCapabilities(
+ getConnectionCapabilities_cb _hidl_cb) override;
private:
// Corresponding worker functions for the HIDL methods.
@@ -265,7 +267,7 @@
SupplicantStatus startDppEnrolleeInitiatorInternal(uint32_t peer_bootstrap_id,
uint32_t own_bootstrap_id);
SupplicantStatus stopDppInitiatorInternal();
-
+ std::pair<SupplicantStatus, ConnectionCapabilities> getConnectionCapabilitiesInternal();
struct wpa_supplicant* retrieveIfacePtr();