Mir
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mir_connection.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2012 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU Lesser General Public License version 3,
6  * as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Kevin DuBois <kevin.dubois@canonical.com>
17  */
18 #ifndef MIR_CLIENT_MIR_CONNECTION_H_
19 #define MIR_CLIENT_MIR_CONNECTION_H_
20 
21 #include <string>
22 #include <memory>
23 #include <unordered_set>
24 #include <unordered_map>
25 
26 #include <mutex>
27 
28 #include "mir_protobuf.pb.h"
29 
32 
33 #include "client_platform.h"
34 #include "client_context.h"
35 
36 #include "mir_wait_handle.h"
37 
38 namespace mir
39 {
41 namespace client
42 {
43 class ConnectionConfiguration;
44 class ClientPlatformFactory;
45 class ConnectionSurfaceMap;
46 class DisplayConfiguration;
47 class LifecycleControl;
48 
49 namespace rpc
50 {
51 class MirBasicRpcChannel;
52 }
53 }
54 
55 namespace input
56 {
57 namespace receiver
58 {
59 class InputPlatform;
60 }
61 }
62 
63 namespace logging
64 {
65 class Logger;
66 }
67 }
68 
70 {
71 public:
72  MirConnection(std::string const& error_message);
73 
75  ~MirConnection() noexcept;
76 
77  MirConnection(MirConnection const &) = delete;
78  MirConnection& operator=(MirConnection const &) = delete;
79 
81  MirSurfaceParameters const & params,
82  mir_surface_callback callback,
83  void * context);
85  MirSurface *surface,
86  mir_surface_callback callback,
87  void *context);
88 
89  char const * get_error_message();
90 
92  const char* app_name,
93  mir_connected_callback callback,
94  void * context);
95 
97 
98  MirWaitHandle* drm_auth_magic(unsigned int magic,
100  void* context);
101 
103 
105 
106  void populate(MirPlatformPackage& platform_package);
109  unsigned int formats_size, unsigned int& valid_formats);
110 
111  std::shared_ptr<mir::client::ClientPlatform> get_client_platform();
112 
113  static bool is_valid(MirConnection *connection);
114 
116 
117  EGLNativeDisplayType egl_native_display();
118 
119  void on_surface_created(int id, MirSurface* surface);
120 
122  void done_display_configure();
123 
124  bool set_extra_platform_data(std::vector<int> const& extra_platform_data);
125 
126  std::shared_ptr<google::protobuf::RpcChannel> rpc_channel() const
127  {
128  return channel;
129  }
130 
131  mir::protobuf::DisplayServer& display_server();
132 
133 private:
134  std::mutex mutex; // Protects all members of *this (except release_wait_handles)
135 
136  std::shared_ptr<google::protobuf::RpcChannel> const channel;
137  mir::protobuf::DisplayServer::Stub server;
138  std::shared_ptr<mir::logging::Logger> const logger;
139  mir::protobuf::Void void_response;
140  mir::protobuf::Connection connect_result;
141  mir::protobuf::Void ignored;
142  mir::protobuf::ConnectParameters connect_parameters;
143  mir::protobuf::DRMAuthMagicStatus drm_auth_magic_status;
144  mir::protobuf::DisplayConfiguration display_configuration_response;
145 
146  std::shared_ptr<mir::client::ClientPlatformFactory> const client_platform_factory;
147  std::shared_ptr<mir::client::ClientPlatform> platform;
148  std::shared_ptr<EGLNativeDisplayType> native_display;
149 
150  std::shared_ptr<mir::input::receiver::InputPlatform> const input_platform;
151 
152  std::string error_message;
153 
154  MirWaitHandle connect_wait_handle;
155  MirWaitHandle disconnect_wait_handle;
156  MirWaitHandle drm_auth_magic_wait_handle;
157  MirWaitHandle configure_display_wait_handle;
158 
159  std::mutex release_wait_handle_guard;
160  std::vector<MirWaitHandle*> release_wait_handles;
161 
162  std::shared_ptr<mir::client::DisplayConfiguration> const display_configuration;
163 
164  std::shared_ptr<mir::client::LifecycleControl> const lifecycle_control;
165 
166  std::shared_ptr<mir::client::ConnectionSurfaceMap> const surface_map;
167 
168  std::vector<int> extra_platform_data;
169 
170  struct SurfaceRelease;
171 
172  void set_error_message(std::string const& error);
173  void done_disconnect();
174  void connected(mir_connected_callback callback, void * context);
175  void released(SurfaceRelease );
176  void done_drm_auth_magic(mir_drm_auth_magic_callback callback, void* context);
177  bool validate_user_display_config(MirDisplayConfiguration* config);
178 };
179 
180 #endif /* MIR_CLIENT_MIR_CONNECTION_H_ */
MirWaitHandle * connect(const char *app_name, mir_connected_callback callback, void *context)
Definition: mir_connection.cpp:239
Definition: client_types.h:150
Definition: client_types.h:252
void(* mir_connected_callback)(MirConnection *connection, void *client_context)
Callback to be passed when issuing a mir_connect request.
Definition: client_types.h:63
Definition: mir_surface.h:54
Definition: mir_wait_handle.h:31
MirConnection & operator=(MirConnection const &)=delete
void available_surface_formats(MirPixelFormat *formats, unsigned int formats_size, unsigned int &valid_formats)
Definition: mir_connection.cpp:351
MirWaitHandle * release_surface(MirSurface *surface, mir_surface_callback callback, void *context)
Definition: mir_connection.cpp:172
void done_display_configure()
Definition: mir_connection.cpp:431
bool set_extra_platform_data(std::vector< int > const &extra_platform_data)
Definition: mir_connection.cpp:475
std::shared_ptr< mir::client::ClientPlatform > get_client_platform()
Definition: mir_connection.cpp:372
void(* mir_surface_callback)(MirSurface *surface, void *client_context)
Callback to be passed when calling:
Definition: client_types.h:74
MirConnection * mir_connection()
Definition: mir_connection.cpp:379
EGLNativeDisplayType egl_native_display()
Definition: mir_connection.cpp:384
void populate(MirPlatformPackage &platform_package)
Definition: mir_connection.cpp:319
void register_display_change_callback(mir_display_config_callback callback, void *context)
Definition: mir_connection.cpp:401
MirWaitHandle * drm_auth_magic(unsigned int magic, mir_drm_auth_magic_callback callback, void *context)
Definition: mir_connection.cpp:290
MirPixelFormat
The order of components in a format enum matches the order of the components as they would be written...
Definition: common.h:99
Definition: client_context.h:27
std::shared_ptr< google::protobuf::RpcChannel > rpc_channel() const
Definition: mir_connection.h:126
void(* mir_lifecycle_event_callback)(MirConnection *connection, MirLifecycleState state, void *context)
Callback called when a lifecycle event/callback is requested from the running server.
Definition: client_types.h:94
void on_surface_created(int id, MirSurface *surface)
Definition: mir_connection.cpp:391
~MirConnection() noexcept
Definition: mir_connection.cpp:94
MirWaitHandle * disconnect()
Definition: mir_connection.cpp:273
MirWaitHandle * configure_display(MirDisplayConfiguration *configuration)
Definition: mir_connection.cpp:443
void(* mir_display_config_callback)(MirConnection *connection, void *context)
Callback called when a display config change has occurred.
Definition: client_types.h:103
void(* mir_drm_auth_magic_callback)(int status, void *context)
Definition: mir_client_library_drm.h:32
MirConnection(std::string const &error_message)
Definition: mir_connection.cpp:69
error
Definition: connector_report_tp.h:60
char const * get_error_message()
Definition: mir_connection.cpp:124
Definition: mir_connection.h:69
void register_lifecycle_event_callback(mir_lifecycle_event_callback callback, void *context)
Definition: mir_connection.cpp:396
Definition: connection_configuration.h:51
mir::protobuf::DisplayServer & display_server()
Definition: mir_connection.cpp:490
static bool is_valid(MirConnection *connection)
Definition: mir_connection.cpp:307
MirWaitHandle * create_surface(MirSurfaceParameters const &params, mir_surface_callback callback, void *context)
Definition: mir_connection.cpp:114
MirDisplayConfiguration * create_copy_of_display_config()
Definition: mir_connection.cpp:345
MirSurfaceParameters is the structure of minimum required information that you must provide to Mir in...
Definition: client_types.h:121

Copyright © 2012,2013 Canonical Ltd.
Generated on Fri Apr 11 21:14:53 UTC 2014