| #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 |