/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2020, Google Inc. * * ipc_pipe.h - Image Processing Algorithm IPC module for IPA proxies */ #pragma once #include #include #include #include "libcamera/internal/ipc_unixsocket.h" namespace libcamera { class IPCMessage { public: struct Header { uint32_t cmd; uint32_t cookie; }; IPCMessage(); IPCMessage(uint32_t cmd); IPCMessage(const Header &header); IPCMessage(IPCUnixSocket::Payload &payload); IPCUnixSocket::Payload payload() const; Header &header() { return header_; } std::vector &data() { return data_; } std::vector &fds() { return fds_; } const Header &header() const { return header_; } const std::vector &data() const { return data_; } const std::vector &fds() const { return fds_; } private: Header header_; std::vector data_; std::vector fds_; }; class IPCPipe { public: IPCPipe(); virtual ~IPCPipe(); bool isConnected() const { return connected_; } virtual int sendSync(const IPCMessage &in, IPCMessage *out) = 0; virtual int sendAsync(const IPCMessage &data) = 0; Signal recv; protected: bool connected_; }; } /* namespace libcamera */