// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef WIMAX_MANAGER_GDM_DRIVER_H_
#define WIMAX_MANAGER_GDM_DRIVER_H_

extern "C" {
#include <gct/gctapi.h>
}  // extern "C"

#include <stdint.h>

#include <memory>
#include <vector>

#include <base/macros.h>
#include <base/memory/weak_ptr.h>

#include "wimax_manager/driver.h"
#include "wimax_manager/network.h"

namespace wimax_manager {

class GdmDevice;
class Manager;

class GdmDriver : public Driver, public base::SupportsWeakPtr<GdmDriver> {
 public:
  explicit GdmDriver(Manager* manager);
  ~GdmDriver() override;

  bool Initialize() override;
  bool Finalize() override;
  bool GetDevices(std::vector<std::unique_ptr<Device>>* devices) override;

  bool OpenDevice(GdmDevice* device);
  bool CloseDevice(GdmDevice* device);
  bool GetDeviceStatus(GdmDevice* device);
  bool GetDeviceRFInfo(GdmDevice* device);
  bool SetDeviceEAPParameters(GdmDevice* device,
                              GCT_API_EAP_PARAM* eap_parameters);
  bool AutoSelectProfileForDevice(GdmDevice* device);
  bool PowerOnDeviceRF(GdmDevice* device);
  bool PowerOffDeviceRF(GdmDevice* device);
  bool SetScanInterval(GdmDevice* device, uint32_t interval);
  bool GetNetworksForDevice(GdmDevice* device,
                            std::vector<NetworkRefPtr>* networks);
  bool ConnectDeviceToNetwork(GdmDevice* device, const Network& network);
  bool DisconnectDeviceFromNetwork(GdmDevice* device);

 private:
  bool CreateInitialDirectories() const;
  GDEV_ID GetDeviceId(const GdmDevice* device) const;

  APIHAND api_handle_;

  DISALLOW_COPY_AND_ASSIGN(GdmDriver);
};

}  // namespace wimax_manager

#endif  // WIMAX_MANAGER_GDM_DRIVER_H_
