Mir
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
real_kms_output.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2013 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU 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 General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17  */
18 
19 #ifndef MIR_GRAPHICS_GBM_REAL_KMS_OUTPUT_H_
20 #define MIR_GRAPHICS_GBM_REAL_KMS_OUTPUT_H_
21 
22 #include "kms_output.h"
23 #include "drm_mode_resources.h"
24 
25 #include <memory>
26 #include <mutex>
27 
28 namespace mir
29 {
30 namespace graphics
31 {
32 namespace gbm
33 {
34 
35 class PageFlipper;
36 
37 class RealKMSOutput : public KMSOutput
38 {
39 public:
40  RealKMSOutput(int drm_fd, uint32_t connector_id,
41  std::shared_ptr<PageFlipper> const& page_flipper);
43 
44  void reset();
45  void configure(geometry::Displacement fb_offset, size_t kms_mode_index);
46  geometry::Size size() const;
47 
48  bool set_crtc(uint32_t fb_id);
49  void clear_crtc();
50  bool schedule_page_flip(uint32_t fb_id);
51  void wait_for_page_flip();
52 
53  void set_cursor(gbm_bo* buffer);
54  void move_cursor(geometry::Point destination);
55  void clear_cursor();
56  bool has_cursor() const;
57 
58  void set_power_mode(MirPowerMode mode);
59 
60 private:
61  bool ensure_crtc();
62  void restore_saved_crtc();
63 
64  int const drm_fd;
65  uint32_t const connector_id;
66  std::shared_ptr<PageFlipper> const page_flipper;
67 
68  DRMModeConnectorUPtr connector;
69  size_t mode_index;
70  geometry::Displacement fb_offset;
71  DRMModeCrtcUPtr current_crtc;
72  drmModeCrtc saved_crtc;
73  bool using_saved_crtc;
74  bool has_cursor_;
75 
76  MirPowerMode power_mode;
77  int dpms_enum_id;
78 
79  std::mutex power_mutex;
80 };
81 
82 }
83 }
84 }
85 
86 #endif /* MIR_GRAPHICS_GBM_REAL_KMS_OUTPUT_H_ */

Copyright © 2012,2013 Canonical Ltd.
Generated on Tue Oct 15 00:23:28 UTC 2013