diff --git a/wifi/1.0/default/wifi.cpp b/wifi/1.0/default/wifi.cpp index d5b69b815d..ff2eb4cb2e 100644 --- a/wifi/1.0/default/wifi.cpp +++ b/wifi/1.0/default/wifi.cpp @@ -21,6 +21,11 @@ #include "failure_reason_util.h" #include "wifi_chip.h" +namespace { +// Chip ID to use for the only supported chip. +static constexpr android::hardware::wifi::V1_0::ChipId kChipId = 0; +} // namespace + namespace android { namespace hardware { namespace wifi { @@ -33,7 +38,7 @@ Wifi::Wifi() Return Wifi::registerEventCallback( const sp& callback) { // TODO(b/31632518): remove the callback when the client is destroyed - callbacks_.insert(callback); + callbacks_.emplace_back(callback); return Void(); } @@ -67,7 +72,7 @@ Return Wifi::start() { } // Create the chip instance once the HAL is started. - chip_ = new WifiChip(legacy_hal_); + chip_ = new WifiChip(kChipId, legacy_hal_); run_state_ = RunState::STARTED; for (const auto& callback : callbacks_) { callback->onStart(); @@ -108,8 +113,23 @@ Return Wifi::stop() { return Void(); } -Return Wifi::getChip(getChip_cb cb) { - cb(chip_); +Return Wifi::getChipIds(getChipIds_cb cb) { + std::vector chip_ids; + if (chip_.get()) { + chip_ids.emplace_back(kChipId); + } + hidl_vec hidl_data; + hidl_data.setToExternal(chip_ids.data(), chip_ids.size()); + cb(hidl_data); + return Void(); +} + +Return Wifi::getChip(ChipId chip_id, getChip_cb cb) { + if (chip_.get() && chip_id == kChipId) { + cb(chip_); + } else { + cb(nullptr); + } return Void(); } diff --git a/wifi/1.0/default/wifi.h b/wifi/1.0/default/wifi.h index e6cf1acbe8..55ba12b36b 100644 --- a/wifi/1.0/default/wifi.h +++ b/wifi/1.0/default/wifi.h @@ -18,7 +18,6 @@ #define WIFI_H_ #include -#include #include #include @@ -46,7 +45,8 @@ class Wifi : public IWifi { Return isStarted() override; Return start() override; Return stop() override; - Return getChip(getChip_cb cb) override; + Return getChipIds(getChipIds_cb cb) override; + Return getChip(ChipId chip_id, getChip_cb cb) override; private: enum class RunState { STOPPED, STARTED, STOPPING }; @@ -55,7 +55,7 @@ class Wifi : public IWifi { // and shared with all the child HIDL interface objects. std::shared_ptr legacy_hal_; RunState run_state_; - std::set> callbacks_; + std::vector> callbacks_; sp chip_; DISALLOW_COPY_AND_ASSIGN(Wifi); diff --git a/wifi/1.0/default/wifi_chip.cpp b/wifi/1.0/default/wifi_chip.cpp index df321e2103..b5bd4148be 100644 --- a/wifi/1.0/default/wifi_chip.cpp +++ b/wifi/1.0/default/wifi_chip.cpp @@ -26,14 +26,19 @@ namespace wifi { namespace V1_0 { namespace implementation { -WifiChip::WifiChip(std::weak_ptr legacy_hal) - : legacy_hal_(legacy_hal) {} +WifiChip::WifiChip(ChipId chip_id, + const std::weak_ptr legacy_hal) + : chip_id_(chip_id), legacy_hal_(legacy_hal) {} void WifiChip::invalidate() { legacy_hal_.reset(); callbacks_.clear(); } +Return WifiChip::getId() { + return chip_id_; +} + Return WifiChip::registerEventCallback( const sp& callback) { if (!legacy_hal_.lock()) diff --git a/wifi/1.0/default/wifi_chip.h b/wifi/1.0/default/wifi_chip.h index 95fabe465e..ef2137b5ce 100644 --- a/wifi/1.0/default/wifi_chip.h +++ b/wifi/1.0/default/wifi_chip.h @@ -37,11 +37,12 @@ namespace implementation { */ class WifiChip : public IWifiChip { public: - WifiChip(std::weak_ptr legacy_hal); + WifiChip(ChipId chip_id, const std::weak_ptr legacy_hal); // Invalidate this instance once the HAL is stopped. void invalidate(); // HIDL methods exposed. + Return getId() override; Return registerEventCallback( const sp& callback) override; Return getAvailableModes(getAvailableModes_cb cb) override; @@ -52,6 +53,7 @@ class WifiChip : public IWifiChip { Return requestFirmwareDebugDump() override; private: + ChipId chip_id_; std::weak_ptr legacy_hal_; std::set> callbacks_;