// Copyright 2022 The Fuchsia 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 FUCHSIA_SDK_EXAMPLES_CC_QEMU_EDU_DRIVERS_QEMU_EDU_H_
#define FUCHSIA_SDK_EXAMPLES_CC_QEMU_EDU_DRIVERS_QEMU_EDU_H_

// [START imports]
#include <lib/driver/component/cpp/driver_cpp.h>
#include <lib/driver/compat/cpp/context.h>
// [END imports]

// [START hw_imports]
#include "edu_device.h"
// [END hw_imports]

// [START namespace_start]
namespace qemu_edu {
// [END namespace_start]

// [START class_header]
class QemuEduDriver : public driver::DriverBase {
  // [END class_header]
  // [START public_main]
 public:
  QemuEduDriver(driver::DriverStartArgs start_args, fdf::UnownedDispatcher driver_dispatcher)
      : driver::DriverBase("qemu-edu", std::move(start_args), std::move(driver_dispatcher)) {}

  virtual ~QemuEduDriver() = default;

  // Start hook called by the driver factory.
  zx::result<> Start() override;
  // [END public_main]

  // [START private_main]
 private:
  std::unique_ptr<compat::Context> compat_context_;
  // [END private_main]

  // [START fields_hw]
  std::shared_ptr<edu_device::QemuEduDevice> device_;
  // [END fields_hw]

  // [START class_footer]
};
// [END class_footer]

// [START namespace_end]
}  // namespace qemu_edu
// [END namespace_end]

#endif  // FUCHSIA_SDK_EXAMPLES_CC_QEMU_EDU_DRIVERS_QEMU_EDU_H_
