#ifndef WIFI_OFFLOAD_SERVER_H_ #define WIFI_OFFLOAD_SERVER_H_ #include #include "chre_interface_factory.h" namespace android { namespace hardware { namespace wifi { namespace offload { namespace V1_0 { namespace implementation { class OffloadServer; class ChreInterfaceCallbacksImpl : public ChreInterfaceCallbacks { public: ChreInterfaceCallbacksImpl(OffloadServer* server); ~ChreInterfaceCallbacksImpl() override; void handleConnectionEvents(ChreInterfaceCallbacks::ConnectionEvent event); void handleMessage(uint32_t messageType, const std::vector& message); private: OffloadServer* mServer; }; /** * Interface object to communicate with Offload HAL */ class OffloadServer { public: OffloadServer(ChreInterfaceFactory* factory); OffloadStatus configureScans(const ScanParam& param, const ScanFilter& filter); std::pair getScanStats(); OffloadStatus subscribeScanResults(uint32_t delayMs); bool unsubscribeScanResults(); bool setEventCallback(const sp& cb); void clearEventCallback(); private: void invokeErrorCallbackAndResetIfNeeded( const android::hardware::wifi::offload::V1_0::OffloadStatus& status); void handleScanResult(const std::vector& message); void handleScanStats(const std::vector& message); void resetNanoApp(); ScanStats mScanStats; std::mutex mScanStatsLock; std::condition_variable mScanStatsCond; std::mutex mOffloadLock; OffloadStatus mScanStatsStatus; std::unique_ptr mChreInterfaceCallbacks; std::unique_ptr mChreInterface; sp mEventCallback; friend class ChreInterfaceCallbacksImpl; }; } // namespace implementation } // namespace V1_0 } // namespace offload } // namespace wifi } // namespace hardware } // namespace android #endif // WIFI_OFFLOAD_SERVER_H_