#ifndef ANDROID_HARDWARE_WIFI_OFFLOAD_V1_0_OFFLOAD_H #define ANDROID_HARDWARE_WIFI_OFFLOAD_V1_0_OFFLOAD_H #include <android/hardware/wifi/offload/1.0/IOffload.h> #include <android-base/macros.h> #include <hidl/MQDescriptor.h> #include <hidl/Status.h> #include "offload_server.h" namespace { // Type of callback invoked by the death handler. using on_death_cb_function = std::function<void(uint64_t)>; // Private class used to keep track of death of callbacks template<typename CallbackType> class HidlDeathHandler : public android::hardware::hidl_death_recipient { public: HidlDeathHandler(const on_death_cb_function &user_cb_function) : cb_function_(user_cb_function) { } ~HidlDeathHandler() = default; // Death notification for callbacks. void serviceDied(uint64_t cookie, const android::wp<android::hidl::base::V1_0::IBase>& /* who */) override { cb_.clear(); cb_function_(cookie); } void setCallback(android::wp<CallbackType> cb) { cb_ = cb; } private: android::wp<CallbackType> cb_; on_death_cb_function cb_function_; DISALLOW_COPY_AND_ASSIGN(HidlDeathHandler); }; } // namespace namespace android { namespace hardware { namespace wifi { namespace offload { namespace V1_0 { namespace implementation { /** * Interface object to communicate with Offload HAL */ class Offload : public IOffload { public: Offload(); // Methods from ::android::hardware::wifi::offload::V1_0::IOffload follow. Return<void> configureScans(const ScanParam ¶m, const ScanFilter &filter, configureScans_cb _hidl_cb) override; Return<void> getScanStats(getScanStats_cb _hidl_cb) override; Return<void> subscribeScanResults(uint32_t delayMs, subscribeScanResults_cb _hidl_cb) override; Return<void> unsubscribeScanResults() override; Return<void> setEventCallback(const sp<IOffloadCallback>& cb) override; // Methods from ::android::hidl::base::V1_0::IBase follow. private: OffloadStatus configureScansInternal(const ScanParam ¶m, const ScanFilter &filter); std::pair<OffloadStatus, ScanStats> getScanStatsInternal(); OffloadStatus subscribeScanResultsInternal(uint32_t delayMs); void onObjectDeath(uint64_t cookie); std::unique_ptr<OffloadServer> mOffloadServer; uint64_t cookie_; sp<HidlDeathHandler<IOffloadCallback>> death_handler_; DISALLOW_COPY_AND_ASSIGN(Offload); }; } // namespace implementation } // namespace V1_0 } // namespace offload } // namespace wifi } // namespace hardware } // namespace android #endif // ANDROID_HARDWARE_WIFI_OFFLOAD_V1_0_OFFLOAD_H