| #include "Offload.h" |
| |
| #include <android-base/logging.h> |
| |
| #include "chre_interface_factory.h" |
| #include "hidl_return_util.h" |
| |
| namespace android { |
| namespace hardware { |
| namespace wifi { |
| namespace offload { |
| namespace V1_0 { |
| namespace implementation { |
| |
| using hidl_return_util::validateAndCall; |
| |
| Offload::Offload() |
| : mOffloadServer(new OffloadServer(new ChreInterfaceFactory())), cookie_(0), |
| death_handler_(new HidlDeathHandler<IOffloadCallback>( |
| std::bind(&Offload::onObjectDeath, this, std::placeholders::_1))) { |
| LOG(android::base::INFO) << "Wifi Offload HAL impl"; |
| } |
| |
| // Methods from ::android::hardware::wifi::offload::V1_0::IOffload follow. |
| Return<void> Offload::configureScans(const ScanParam ¶m, const ScanFilter &filter, |
| configureScans_cb _hidl_cb) { |
| return validateAndCall(this, &Offload::configureScansInternal, _hidl_cb, param, filter); |
| } |
| |
| Return<void> Offload::getScanStats(getScanStats_cb _hidl_cb) { |
| return validateAndCall(this, &Offload::getScanStatsInternal, _hidl_cb); |
| } |
| |
| Return<void> Offload::subscribeScanResults(uint32_t delayMs, subscribeScanResults_cb _hidl_cb) { |
| return validateAndCall(this, &Offload::subscribeScanResultsInternal, _hidl_cb, delayMs); |
| } |
| |
| Return<void> Offload::unsubscribeScanResults() { |
| if (!mOffloadServer->unsubscribeScanResults()) { |
| LOG(ERROR) << "Unable to unsubscribe"; |
| } |
| return Void(); |
| } |
| |
| Return<void> Offload::setEventCallback(const sp<IOffloadCallback>& cb) { |
| if (!mOffloadServer->setEventCallback(cb)) { |
| LOG(ERROR) << "No callback set"; |
| return Void(); |
| } |
| cookie_ = reinterpret_cast<uint64_t>(cb.get()); |
| death_handler_->setCallback(cb); |
| cb->linkToDeath(death_handler_, cookie_); |
| return Void(); |
| } |
| |
| OffloadStatus Offload::configureScansInternal(const ScanParam ¶m, const ScanFilter &filter) { |
| return mOffloadServer->configureScans(param, filter); |
| } |
| |
| std::pair<OffloadStatus, ScanStats> Offload::getScanStatsInternal() { |
| return mOffloadServer->getScanStats(); |
| } |
| |
| OffloadStatus Offload::subscribeScanResultsInternal(uint32_t delayMs) { |
| return mOffloadServer->subscribeScanResults(delayMs); |
| } |
| |
| void Offload::onObjectDeath(uint64_t cookie) { |
| if (cookie == cookie_) { |
| LOG(DEBUG) << "OffloadCallback death notification received"; |
| mOffloadServer->clearEventCallback(); |
| cookie_ = 0; |
| } |
| } |
| // Methods from ::android::hidl::base::V1_0::IBase follow. |
| |
| } // namespace implementation |
| } // namespace V1_0 |
| } // namespace offload |
| } // namespace wifi |
| } // namespace hardware |
| } // namespace android |