// 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/driver2/driver2_cpp.h>
#include <lib/driver_compat/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::status<> 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_
