#ifndef WIFI_OFFLOAD_SERVER_H_ #define WIFI_OFFLOAD_SERVER_H_ #include <android/hardware/wifi/offload/1.0/IOffload.h> #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<uint8_t>& 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<OffloadStatus, ScanStats> getScanStats(); OffloadStatus subscribeScanResults(uint32_t delayMs); bool unsubscribeScanResults(); bool setEventCallback(const sp<IOffloadCallback>& cb); void clearEventCallback(); private: void invokeErrorCallbackAndResetIfNeeded( const android::hardware::wifi::offload::V1_0::OffloadStatus& status); void handleScanResult(const std::vector<uint8_t>& message); void handleScanStats(const std::vector<uint8_t>& message); void resetNanoApp(); ScanStats mScanStats; std::mutex mScanStatsLock; std::condition_variable mScanStatsCond; std::mutex mOffloadLock; OffloadStatus mScanStatsStatus; std::unique_ptr<ChreInterfaceCallbacksImpl> mChreInterfaceCallbacks; std::unique_ptr<ChreInterface> mChreInterface; sp<IOffloadCallback> mEventCallback; friend class ChreInterfaceCallbacksImpl; }; } // namespace implementation } // namespace V1_0 } // namespace offload } // namespace wifi } // namespace hardware } // namespace android #endif // WIFI_OFFLOAD_SERVER_H_