blob: 52cc8fa30838e405063f03fa1d4d3894ff28af39 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2020, Google Inc.
*
* ipc_pipe.h - Image Processing Algorithm IPC module for IPA proxies
*/
#ifndef __LIBCAMERA_INTERNAL_IPA_IPC_H__
#define __LIBCAMERA_INTERNAL_IPA_IPC_H__
#include <vector>
#include <libcamera/base/signal.h>
#include <libcamera/file_descriptor.h>
#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<uint8_t> &data() { return data_; }
std::vector<FileDescriptor> &fds() { return fds_; }
const Header &header() const { return header_; }
const std::vector<uint8_t> &data() const { return data_; }
const std::vector<FileDescriptor> &fds() const { return fds_; }
private:
Header header_;
std::vector<uint8_t> data_;
std::vector<FileDescriptor> 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<const IPCMessage &> recv;
protected:
bool connected_;
};
} /* namespace libcamera */
#endif /* __LIBCAMERA_INTERNAL_IPA_IPC_H__ */
|