Mir
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules 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 {
40 class SharedLibrary;
41 
43 namespace client
44 {
45 class ConnectionConfiguration;
46 class ClientPlatformFactory;
47 class ConnectionSurfaceMap;
48 class DisplayConfiguration;
49 class LifecycleControl;
50 class EventHandlerRegister;
51 
52 namespace rpc
53 {
54 class MirBasicRpcChannel;
55 }
56 }
57 
58 namespace input
59 {
60 namespace receiver
61 {
62 class InputPlatform;
63 }
64 }
65 
66 namespace logging
67 {
68 class Logger;
69 }
70 }
71 
73 {
74 public:
75  MirConnection(std::string const& error_message);
76 
78  ~MirConnection() noexcept;
79 
80  MirConnection(MirConnection const &) = delete;
81  MirConnection& operator=(MirConnection const &) = delete;
82 
84  MirSurfaceParameters const & params,
85  mir_surface_callback callback,
86  void * context);
88  MirSurface *surface,
89  mir_surface_callback callback,
90  void *context);
91 
93 
94  char const * get_error_message();
95 
97  const char* app_name,
98  mir_connected_callback callback,
99  void * context);
100 
102 
103  MirWaitHandle* drm_auth_magic(unsigned int magic,
105  void* context);
106 
108 
110 
111  void populate(MirPlatformPackage& platform_package);
114  unsigned int formats_size, unsigned int& valid_formats);
115 
116  std::shared_ptr<mir::client::ClientPlatform> get_client_platform();
117 
118  static bool is_valid(MirConnection *connection);
119 
121 
122  EGLNativeDisplayType egl_native_display();
123 
124  void on_surface_created(int id, MirSurface* surface);
125 
127  void done_display_configure();
128 
129  bool set_extra_platform_data(std::vector<int> const& extra_platform_data);
130 
131  std::shared_ptr<google::protobuf::RpcChannel> rpc_channel() const
132  {
133  return channel;
134  }
135 
137  std::shared_ptr<mir::logging::Logger> const& the_logger() const;
138 
139 private:
140  // MUST be first data member so it is destroyed last.
141  struct Deregisterer
142  { MirConnection* const self; ~Deregisterer(); } deregisterer;
143 
144  // MUST be placed before any variables for components that are loaded
145  // from a shared library, e.g., the ClientPlatform* objects.
146  std::shared_ptr<mir::SharedLibrary> const platform_library;
147 
148  std::mutex mutex; // Protects all members of *this (except release_wait_handles)
149 
150  std::shared_ptr<google::protobuf::RpcChannel> const channel;
152  std::shared_ptr<mir::logging::Logger> const logger;
153  mir::protobuf::Void void_response;
154  mir::protobuf::Connection connect_result;
155  mir::protobuf::Void ignored;
156  mir::protobuf::ConnectParameters connect_parameters;
157  mir::protobuf::DRMAuthMagicStatus drm_auth_magic_status;
158  mir::protobuf::DisplayConfiguration display_configuration_response;
159 
160  std::shared_ptr<mir::client::ClientPlatformFactory> const client_platform_factory;
161  std::shared_ptr<mir::client::ClientPlatform> platform;
162  std::shared_ptr<EGLNativeDisplayType> native_display;
163 
164  std::shared_ptr<mir::input::receiver::InputPlatform> const input_platform;
165 
166  std::string error_message;
167 
168  MirWaitHandle connect_wait_handle;
169  MirWaitHandle disconnect_wait_handle;
170  MirWaitHandle drm_auth_magic_wait_handle;
171  MirWaitHandle configure_display_wait_handle;
172 
173  std::mutex release_wait_handle_guard;
174  std::vector<MirWaitHandle*> release_wait_handles;
175 
176  std::shared_ptr<mir::client::DisplayConfiguration> const display_configuration;
177 
178  std::shared_ptr<mir::client::LifecycleControl> const lifecycle_control;
179 
180  std::shared_ptr<mir::client::ConnectionSurfaceMap> const surface_map;
181 
182  std::shared_ptr<mir::client::EventHandlerRegister> const event_handler_register;
183 
184  std::vector<int> extra_platform_data;
185 
186  struct SurfaceRelease;
187 
188  MirConnection* next_valid{nullptr};
189 
190  void set_error_message(std::string const& error);
191  void done_disconnect();
192  void connected(mir_connected_callback callback, void * context);
193  void released(SurfaceRelease );
194  void done_drm_auth_magic(mir_drm_auth_magic_callback callback, void* context);
195  bool validate_user_display_config(MirDisplayConfiguration* config);
196 };
197 
198 #endif /* MIR_CLIENT_MIR_CONNECTION_H_ */
MirWaitHandle * connect(const char *app_name, mir_connected_callback callback, void *context)
Definition: mir_connection.cpp:267
All things Mir.
Definition: aging_buffer.h:24
Definition: client_types.h:164
Definition: client_types.h:266
void(* mir_connected_callback)(MirConnection *connection, void *client_context)
Callback to be passed when issuing a mir_connect request.
Definition: client_types.h:64
Definition: mir_surface.h:56
MirPromptSession * create_prompt_session()
Definition: mir_connection.cpp:214
Definition: mir_wait_handle.h:31
Definition: mir_protobuf.pb.h:3348
MirConnection & operator=(MirConnection const &)=delete
std::shared_ptr< mir::logging::Logger > const & the_logger() const
Definition: mir_connection.cpp:531
void available_surface_formats(MirPixelFormat *formats, unsigned int formats_size, unsigned int &valid_formats)
Definition: mir_connection.cpp:386
Definition: mir_protobuf.pb.h:69
MirWaitHandle * release_surface(MirSurface *surface, mir_surface_callback callback, void *context)
Definition: mir_connection.cpp:189
void done_display_configure()
Definition: mir_connection.cpp:466
bool set_extra_platform_data(std::vector< int > const &extra_platform_data)
Definition: mir_connection.cpp:511
std::shared_ptr< mir::client::ClientPlatform > get_client_platform()
Definition: mir_connection.cpp:407
void(* mir_surface_callback)(MirSurface *surface, void *client_context)
Callback to be passed when calling:
Definition: client_types.h:75
MirConnection * mir_connection()
Definition: mir_connection.cpp:414
EGLNativeDisplayType egl_native_display()
Definition: mir_connection.cpp:419
Definition: mir_protobuf.pb.h:1834
Definition: mir_protobuf.pb.h:2127
void populate(MirPlatformPackage &platform_package)
Definition: mir_connection.cpp:354
void register_display_change_callback(mir_display_config_callback callback, void *context)
Definition: mir_connection.cpp:436
MirWaitHandle * drm_auth_magic(unsigned int magic, mir_drm_auth_magic_callback callback, void *context)
Definition: mir_connection.cpp:319
Definition: mir_prompt_session.h:40
MirPixelFormat
The order of components in a format enum matches the order of the components as they would be written...
Definition: common.h:119
Definition: client_context.h:27
std::shared_ptr< google::protobuf::RpcChannel > rpc_channel() const
Definition: mir_connection.h:131
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:95
Definition: mir_protobuf.pb.h:1737
void on_surface_created(int id, MirSurface *surface)
Definition: mir_connection.cpp:426
~MirConnection() noexcept
Definition: mir_connection.cpp:116
MirWaitHandle * disconnect()
Definition: mir_connection.cpp:301
MirWaitHandle * configure_display(MirDisplayConfiguration *configuration)
Definition: mir_connection.cpp:478
void(* mir_display_config_callback)(MirConnection *connection, void *context)
Callback called when a display config change has occurred.
Definition: client_types.h:104
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:86
error
Definition: connector_report_tp.h:60
char const * get_error_message()
Definition: mir_connection.cpp:141
Definition: mir_connection.h:72
void register_lifecycle_event_callback(mir_lifecycle_event_callback callback, void *context)
Definition: mir_connection.cpp:431
Definition: connection_configuration.h:54
mir::protobuf::DisplayServer & display_server()
Definition: mir_connection.cpp:526
static bool is_valid(MirConnection *connection)
Definition: mir_connection.cpp:337
MirWaitHandle * create_surface(MirSurfaceParameters const &params, mir_surface_callback callback, void *context)
Definition: mir_connection.cpp:131
Definition: mir_protobuf.pb.h:3255
MirDisplayConfiguration * create_copy_of_display_config()
Definition: mir_connection.cpp:380
Definition: mir_protobuf.pb.h:1304
MirSurfaceParameters is the structure of minimum required information that you must provide to Mir in...
Definition: client_types.h:135

Copyright © 2012,2013 Canonical Ltd.
Generated on Fri Oct 10 14:07:14 UTC 2014