1 #ifndef ANDROID_HARDWARE_WIFI_OFFLOAD_V1_0_OFFLOAD_H 2 #define ANDROID_HARDWARE_WIFI_OFFLOAD_V1_0_OFFLOAD_H 3 4 #include <android/hardware/wifi/offload/1.0/IOffload.h> 5 6 #include <android-base/macros.h> 7 #include <hidl/MQDescriptor.h> 8 #include <hidl/Status.h> 9 10 #include "offload_server.h" 11 12 namespace { 13 // Type of callback invoked by the death handler. 14 using on_death_cb_function = std::function<void(uint64_t)>; 15 16 // Private class used to keep track of death of callbacks 17 template<typename CallbackType> 18 class HidlDeathHandler : public android::hardware::hidl_death_recipient { 19 public: 20 HidlDeathHandler(const on_death_cb_function &user_cb_function) 21 : cb_function_(user_cb_function) { 22 } 23 ~HidlDeathHandler() = default; 24 25 // Death notification for callbacks. 26 void serviceDied(uint64_t cookie, 27 const android::wp<android::hidl::base::V1_0::IBase>& /* who */) override { 28 cb_.clear(); 29 cb_function_(cookie); 30 } 31 32 void setCallback(android::wp<CallbackType> cb) { 33 cb_ = cb; 34 } 35 36 private: 37 android::wp<CallbackType> cb_; 38 on_death_cb_function cb_function_; 39 40 DISALLOW_COPY_AND_ASSIGN(HidlDeathHandler); 41 }; 42 } // namespace 43 44 namespace android { 45 namespace hardware { 46 namespace wifi { 47 namespace offload { 48 namespace V1_0 { 49 namespace implementation { 50 51 /** 52 * Interface object to communicate with Offload HAL 53 */ 54 class Offload : public IOffload { 55 public: 56 Offload(); 57 58 // Methods from ::android::hardware::wifi::offload::V1_0::IOffload follow. 59 Return<void> configureScans(const ScanParam ¶m, const ScanFilter &filter, 60 configureScans_cb _hidl_cb) override; 61 Return<void> getScanStats(getScanStats_cb _hidl_cb) override; 62 Return<void> subscribeScanResults(uint32_t delayMs, subscribeScanResults_cb _hidl_cb) override; 63 Return<void> unsubscribeScanResults() override; 64 Return<void> setEventCallback(const sp<IOffloadCallback>& cb) override; 65 // Methods from ::android::hidl::base::V1_0::IBase follow. 66 67 private: 68 OffloadStatus configureScansInternal(const ScanParam ¶m, const ScanFilter &filter); 69 std::pair<OffloadStatus, ScanStats> getScanStatsInternal(); 70 OffloadStatus subscribeScanResultsInternal(uint32_t delayMs); 71 void onObjectDeath(uint64_t cookie); 72 73 std::unique_ptr<OffloadServer> mOffloadServer; 74 uint64_t cookie_; 75 sp<HidlDeathHandler<IOffloadCallback>> death_handler_; 76 77 DISALLOW_COPY_AND_ASSIGN(Offload); 78 }; 79 80 } // namespace implementation 81 } // namespace V1_0 82 } // namespace offload 83 } // namespace wifi 84 } // namespace hardware 85 } // namespace android 86 87 #endif // ANDROID_HARDWARE_WIFI_OFFLOAD_V1_0_OFFLOAD_H 88