C++程序  |  71行  |  1.96 KB

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