// Copyright 2020 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.

#include "inspect.h"

#include <fs/vmo_file.h>

InspectManager::InspectManager(async_dispatcher_t* dispatcher) {
  inspect_vmo_ = inspect_.DuplicateVmo();

  diagnostics_dir_ = fbl::MakeRefCounted<fs::PseudoDir>();
  driver_manager_dir_ = fbl::MakeRefCounted<fs::PseudoDir>();
  diagnostics_dir_->AddEntry("driver_manager", driver_manager_dir_);

  uint64_t vmo_size;
  ZX_ASSERT(inspect_vmo_.get_size(&vmo_size) == ZX_OK);

  auto vmo_file = fbl::MakeRefCounted<fs::VmoFile>(inspect_vmo_, 0, vmo_size);
  driver_manager_dir_->AddEntry("dm.inspect", vmo_file);

  if (dispatcher) {
    zx::channel local;
    zx::channel::create(0, &diagnostics_client_, &local);
    diagnostics_vfs_ = std::make_unique<fs::SynchronousVfs>(dispatcher);
    diagnostics_vfs_->ServeDirectory(diagnostics_dir_, std::move(local));
  }
}
