Android-cuttlefish cvd tool
server.h
Go to the documentation of this file.
1//
2// Copyright (C) 2020 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15#pragma once
16
17#include <map>
18#include <memory>
19#include <utility>
20
25
26namespace cuttlefish {
27
28// Callbacks into objects implementing this interface will be made from the same
29// thread that handles the connection fd. Implementations should make every
30// effort to return immediately to avoid blocking the server's main loop.
32 public:
33 virtual ~AudioServerExecutor() = default;
34
35 // Implementations must ensure each command is replied to before returning
36 // from these functions. Failure to do so causes the program to abort.
37 virtual void StreamsInfo(StreamInfoCommand& cmd) = 0;
39 virtual void PrepareStream(StreamControlCommand& cmd) = 0;
40 virtual void ReleaseStream(StreamControlCommand& cmd) = 0;
41 virtual void StartStream(StreamControlCommand& cmd) = 0;
42 virtual void StopStream(StreamControlCommand& cmd) = 0;
43 virtual void ChmapsInfo(ChmapInfoCommand& cmd) = 0;
44 virtual void JacksInfo(JackInfoCommand& cmd) = 0;
45
46 // Implementations must call buffer.SendStatus() before destroying the buffer
47 // to notify the other side of the release of the buffer. Failure to do so
48 // will cause the program to abort.
49 virtual void OnPlaybackBuffer(TxBuffer buffer) = 0;
50 virtual void OnCaptureBuffer(RxBuffer buffer) = 0;
51};
52
54 public:
55 static std::unique_ptr<AudioClientConnection> Create(
56 SharedFD client_socket, uint32_t num_streams, uint32_t num_jacks,
57 uint32_t num_chmaps, size_t tx_shm_len, size_t rx_shm_len);
58
61
63
64 // Allows the caller to react to commands sent by the client.
66 // Allows the caller to react to IO buffers sent by the client.
68 bool ReceiveCapture(AudioServerExecutor& executor);
69
70 bool SendEvent(/*TODO*/);
71
72 private:
74 SharedFD control_socket, SharedFD event_socket,
75 SharedFD tx_socket, SharedFD rx_socket)
76 : tx_shm_(std::move(tx_shm)),
77 rx_shm_(std::move(rx_shm)),
78 control_socket_(control_socket),
79 event_socket_(event_socket),
80 tx_socket_(tx_socket),
81 rx_socket_(rx_socket) {}
82
83 bool CmdReply(AudioStatus status, const void* data = nullptr,
84 size_t size = 0);
85 bool WithCommand(const virtio_snd_hdr* msg, size_t msg_len,
86 AudioServerExecutor& executor);
87
88 ssize_t ReceiveMsg(SharedFD socket, void* buffer, size_t size);
89
96 // Hold the number of frames since START and when to log it for each stream.
97 std::map<uint32_t, std::pair<uint64_t, uint64_t>> frame_counters_;
98};
99
101 public:
102 AudioServer(SharedFD server_socket) : server_socket_(server_socket) {}
103
104 std::unique_ptr<AudioClientConnection> AcceptClient(uint32_t num_streams,
105 uint32_t num_jacks,
106 uint32_t num_chmaps,
107 size_t tx_shm_len,
108 size_t rx_shm_len);
109
110 private:
112};
113
114} // namespace cuttlefish
Definition: server.h:53
AudioClientConnection(ScopedMMap tx_shm, ScopedMMap rx_shm, SharedFD control_socket, SharedFD event_socket, SharedFD tx_socket, SharedFD rx_socket)
Definition: server.h:73
ScopedMMap rx_shm_
Definition: server.h:91
bool ReceiveCommands(AudioServerExecutor &executor)
Definition: server.cpp:161
SharedFD control_socket_
Definition: server.h:92
SharedFD event_socket_
Definition: server.h:93
AudioClientConnection(const AudioClientConnection &)=delete
static std::unique_ptr< AudioClientConnection > Create(SharedFD client_socket, uint32_t num_streams, uint32_t num_jacks, uint32_t num_chmaps, size_t tx_shm_len, size_t rx_shm_len)
Definition: server.cpp:113
bool ReceivePlayback(AudioServerExecutor &executor)
Definition: server.cpp:307
ssize_t ReceiveMsg(SharedFD socket, void *buffer, size_t size)
Definition: server.cpp:383
bool CmdReply(AudioStatus status, const void *data=nullptr, size_t size=0)
Definition: server.cpp:362
bool ReceiveCapture(AudioServerExecutor &executor)
Definition: server.cpp:336
bool WithCommand(const virtio_snd_hdr *msg, size_t msg_len, AudioServerExecutor &executor)
bool SendEvent()
Definition: server.cpp:381
std::map< uint32_t, std::pair< uint64_t, uint64_t > > frame_counters_
Definition: server.h:97
SharedFD tx_socket_
Definition: server.h:94
ScopedMMap tx_shm_
Definition: server.h:90
AudioClientConnection & operator=(const AudioClientConnection &)=delete
SharedFD rx_socket_
Definition: server.h:95
Definition: server.h:31
virtual void StartStream(StreamControlCommand &cmd)=0
virtual void StopStream(StreamControlCommand &cmd)=0
virtual void OnPlaybackBuffer(TxBuffer buffer)=0
virtual void JacksInfo(JackInfoCommand &cmd)=0
virtual void ChmapsInfo(ChmapInfoCommand &cmd)=0
virtual void ReleaseStream(StreamControlCommand &cmd)=0
virtual ~AudioServerExecutor()=default
virtual void SetStreamParameters(StreamSetParamsCommand &cmd)=0
virtual void PrepareStream(StreamControlCommand &cmd)=0
virtual void StreamsInfo(StreamInfoCommand &cmd)=0
virtual void OnCaptureBuffer(RxBuffer buffer)=0
Definition: server.h:100
std::unique_ptr< AudioClientConnection > AcceptClient(uint32_t num_streams, uint32_t num_jacks, uint32_t num_chmaps, size_t tx_shm_len, size_t rx_shm_len)
Definition: server.cpp:100
AudioServer(SharedFD server_socket)
Definition: server.h:102
SharedFD server_socket_
Definition: server.h:111
Definition: commands.h:63
Definition: commands.h:72
Definition: buffers.h:69
Definition: shared_fd.h:253
Definition: shared_fd.h:129
Definition: buffers.h:39
Definition: commands.h:81
int status()
Definition: health.cpp:42
char data[Size]
Definition: incremental_server.cpp:1
uint32_t size
Definition: io.h:2
Definition: alloc_utils.cpp:23
AudioStatus
Definition: shm_layout.h:40
Definition: logging.h:464
Definition: commands.h:91
Definition: commands.h:103
Definition: shm_layout.h:145