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
26
27namespace cuttlefish {
28
29// Callbacks into objects implementing this interface will be made from the same
30// thread that handles the connection fd. Implementations should make every
31// effort to return immediately to avoid blocking the server's main loop.
33 public:
34 virtual ~AudioServerExecutor() = default;
35
36 // Implementations must ensure each command is replied to before returning
37 // from these functions. Failure to do so causes the program to abort.
38 virtual void StreamsInfo(StreamInfoCommand& cmd) = 0;
40 virtual void PrepareStream(StreamControlCommand& cmd) = 0;
41 virtual void ReleaseStream(StreamControlCommand& cmd) = 0;
42 virtual void StartStream(StreamControlCommand& cmd) = 0;
43 virtual void StopStream(StreamControlCommand& cmd) = 0;
44 virtual void ChmapsInfo(ChmapInfoCommand& cmd) = 0;
45 virtual void JacksInfo(JackInfoCommand& cmd) = 0;
46 virtual void ControlsInfo(ControlInfoCommand& cmd) = 0;
47 virtual void OnControlCommand(ControlCommand& cmd) = 0;
48
49 // Implementations must call buffer.SendStatus() before destroying the buffer
50 // to notify the other side of the release of the buffer. Failure to do so
51 // will cause the program to abort.
52 virtual void OnPlaybackBuffer(TxBuffer buffer) = 0;
53 virtual void OnCaptureBuffer(RxBuffer buffer) = 0;
54};
55
57 public:
58 static std::unique_ptr<AudioClientConnection> Create(
59 SharedFD client_socket, uint32_t num_streams, uint32_t num_jacks,
60 uint32_t num_chmaps, uint32_t num_controls, size_t tx_shm_len,
61 size_t rx_shm_len);
62
65
67
68 // Allows the caller to react to commands sent by the client.
70 // Allows the caller to react to IO buffers sent by the client.
72 bool ReceiveCapture(AudioServerExecutor& executor);
73
74 bool SendEvent(/*TODO*/);
75
76 private:
78 SharedFD control_socket, SharedFD event_socket,
79 SharedFD tx_socket, SharedFD rx_socket)
80 : tx_shm_(std::move(tx_shm)),
81 rx_shm_(std::move(rx_shm)),
82 control_socket_(control_socket),
83 event_socket_(event_socket),
84 tx_socket_(tx_socket),
85 rx_socket_(rx_socket) {}
86
87 bool CmdReply(AudioStatus status, const void* data = nullptr,
88 size_t size = 0);
89 bool WithCommand(const virtio_snd_hdr* msg, size_t msg_len,
90 AudioServerExecutor& executor);
91
92 ssize_t ReceiveMsg(SharedFD socket, void* buffer, size_t size);
93
100 // Hold the number of frames since START and when to log it for each stream.
101 std::map<uint32_t, std::pair<uint64_t, uint64_t>> frame_counters_;
102};
103
105 public:
106 AudioServer(SharedFD server_socket) : server_socket_(server_socket) {}
107
108 std::unique_ptr<AudioClientConnection> AcceptClient(
109 uint32_t num_streams, uint32_t num_jacks, uint32_t num_chmaps,
110 uint32_t num_controls, size_t tx_shm_len, size_t rx_shm_len);
111
112 private:
114};
115
116} // namespace cuttlefish
Definition: server.h:56
AudioClientConnection(ScopedMMap tx_shm, ScopedMMap rx_shm, SharedFD control_socket, SharedFD event_socket, SharedFD tx_socket, SharedFD rx_socket)
Definition: server.h:77
ScopedMMap rx_shm_
Definition: server.h:95
static std::unique_ptr< AudioClientConnection > Create(SharedFD client_socket, uint32_t num_streams, uint32_t num_jacks, uint32_t num_chmaps, uint32_t num_controls, size_t tx_shm_len, size_t rx_shm_len)
Definition: server.cpp:128
bool ReceiveCommands(AudioServerExecutor &executor)
Definition: server.cpp:203
SharedFD control_socket_
Definition: server.h:96
SharedFD event_socket_
Definition: server.h:97
AudioClientConnection(const AudioClientConnection &)=delete
bool ReceivePlayback(AudioServerExecutor &executor)
Definition: server.cpp:395
ssize_t ReceiveMsg(SharedFD socket, void *buffer, size_t size)
Definition: server.cpp:471
bool CmdReply(AudioStatus status, const void *data=nullptr, size_t size=0)
Definition: server.cpp:450
bool ReceiveCapture(AudioServerExecutor &executor)
Definition: server.cpp:424
bool WithCommand(const virtio_snd_hdr *msg, size_t msg_len, AudioServerExecutor &executor)
bool SendEvent()
Definition: server.cpp:469
std::map< uint32_t, std::pair< uint64_t, uint64_t > > frame_counters_
Definition: server.h:101
SharedFD tx_socket_
Definition: server.h:98
ScopedMMap tx_shm_
Definition: server.h:94
AudioClientConnection & operator=(const AudioClientConnection &)=delete
SharedFD rx_socket_
Definition: server.h:99
Definition: server.h:32
virtual void StartStream(StreamControlCommand &cmd)=0
virtual void StopStream(StreamControlCommand &cmd)=0
virtual void OnPlaybackBuffer(TxBuffer buffer)=0
virtual void OnControlCommand(ControlCommand &cmd)=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 ControlsInfo(ControlInfoCommand &cmd)=0
virtual void PrepareStream(StreamControlCommand &cmd)=0
virtual void StreamsInfo(StreamInfoCommand &cmd)=0
virtual void OnCaptureBuffer(RxBuffer buffer)=0
Definition: server.h:104
AudioServer(SharedFD server_socket)
Definition: server.h:106
SharedFD server_socket_
Definition: server.h:113
std::unique_ptr< AudioClientConnection > AcceptClient(uint32_t num_streams, uint32_t num_jacks, uint32_t num_chmaps, uint32_t num_controls, size_t tx_shm_len, size_t rx_shm_len)
Definition: server.cpp:114
Definition: commands.h:64
Definition: commands.h:134
Definition: commands.h:82
Definition: commands.h:73
Definition: buffers.h:69
Definition: scoped_mmap.h:28
Definition: shared_fd.h:124
Definition: buffers.h:39
Definition: commands.h:90
#define data
Definition: dict.c:56
uint32_t size
Definition: io.h:2
int status()
Definition: health.cpp:44
Definition: alloc_driver.h:20
AudioStatus
Definition: shm_layout.h:51
Definition: logging.h:464
Definition: commands.h:100
Definition: commands.h:112
Definition: shm_layout.h:156