blob: b18b4efe26666f0d9f9485bcb153263acde473b7 [file] [log] [blame]
// Copyright 2019 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_CAMERA_DRIVERS_CONTROLLER_CONTROLLER_PROTOCOL_H_
#define SRC_CAMERA_DRIVERS_CONTROLLER_CONTROLLER_PROTOCOL_H_
#include <fidl/fuchsia.hardware.sysmem/cpp/wire.h>
#include <fuchsia/camera2/cpp/fidl.h>
#include <fuchsia/camera2/hal/cpp/fidl.h>
#include <fuchsia/hardware/gdc/cpp/banjo.h>
#include <fuchsia/hardware/ge2d/cpp/banjo.h>
#include <fuchsia/hardware/isp/cpp/banjo.h>
#include <lib/fidl/cpp/binding.h>
#include "src/camera/drivers/controller/configs/internal_config.h"
#include "src/camera/drivers/controller/configs/product_config.h"
#include "src/camera/drivers/controller/pipeline_manager.h"
#include "src/camera/drivers/controller/processing_node.h"
#include "src/camera/drivers/controller/stream_pipeline_info.h"
namespace camera {
class ControllerImpl : public fuchsia::camera2::hal::Controller {
public:
ControllerImpl(async_dispatcher_t* dispatcher,
fuchsia::sysmem2::AllocatorSyncPtr sysmem_allocator,
const ddk::IspProtocolClient& isp, const ddk::GdcProtocolClient& gdc,
const ddk::Ge2dProtocolClient& ge2d, LoadFirmwareCallback load_firmware);
void Connect(fidl::InterfaceRequest<fuchsia::camera2::hal::Controller> request);
private:
// fuchsia.camera2.hal.Controller implementation
void EnableStreaming() override;
void DisableStreaming() override;
void GetNextConfig(GetNextConfigCallback callback) override;
void CreateStream(uint32_t config_index, uint32_t stream_index, uint32_t image_format_index,
fidl::InterfaceRequest<fuchsia::camera2::Stream> stream) override;
void GetDeviceInfo(GetDeviceInfoCallback callback) override;
async_dispatcher_t* dispatcher_;
fidl::Binding<fuchsia::camera2::hal::Controller> binding_;
std::vector<fuchsia::camera2::hal::Config> configs_;
InternalConfigs internal_configs_;
PipelineManager pipeline_manager_;
uint32_t pipeline_config_index_ = -1;
using RequestQueue =
std::queue<std::tuple<uint32_t, uint32_t, fidl::InterfaceRequest<fuchsia::camera2::Stream>>>;
std::optional<RequestQueue> requests_;
uint32_t config_count_ = 0;
std::unique_ptr<ProductConfig> product_config_;
};
} // namespace camera
#endif // SRC_CAMERA_DRIVERS_CONTROLLER_CONTROLLER_PROTOCOL_H_