blob: d3ea7bf8cc9a063dd69091828aae5845339e9f68 [file] [log] [blame]
// 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.
#ifndef SRC_UI_LIB_DISPLAY_HARDWARE_DISPLAY_CONTROLLER_PROVIDER_IMPL_H_
#define SRC_UI_LIB_DISPLAY_HARDWARE_DISPLAY_CONTROLLER_PROVIDER_IMPL_H_
#include <fuchsia/hardware/display/cpp/fidl.h>
#include <lib/fidl/cpp/binding_set.h>
#include <cstdint>
#include <map>
#include <memory>
#include "src/lib/fsl/io/device_watcher.h"
namespace sys {
class ComponentContext;
} // namespace sys
namespace ui_display {
// Implements the FIDL fuchsia.hardware.display.Provider API. Only provides access to the primary
// controller, not the Virtcon controller.
class HardwareDisplayControllerProviderImpl : public fuchsia::hardware::display::Provider {
public:
// |app_context| is used to publish this service.
HardwareDisplayControllerProviderImpl(sys::ComponentContext* app_context);
// |fuchsia::hardware::display::Provider|.
void OpenVirtconController(
zx::channel device,
::fidl::InterfaceRequest<fuchsia::hardware::display::Controller> controller,
OpenVirtconControllerCallback callback) override {
callback(ZX_ERR_NOT_SUPPORTED);
}
// |fuchsia::hardware::display::Provider|.
void OpenController(zx::channel device,
::fidl::InterfaceRequest<fuchsia::hardware::display::Controller> controller,
OpenControllerCallback callback) override;
private:
fidl::BindingSet<fuchsia::hardware::display::Provider> bindings_;
// The currently outstanding DeviceWatcher closures. The closures will remove
// themselves from here if they are invoked before shutdown. Any closures
// still outstanding will be handled by the destructor.
// This approach assumes that the event loop is attached to
// the main thread, else race conditions may occur.
std::map<uint64_t, std::unique_ptr<fsl::DeviceWatcher>> holders_;
};
} // namespace ui_display
#endif // SRC_UI_LIB_DISPLAY_HARDWARE_DISPLAY_CONTROLLER_PROVIDER_IMPL_H_