1 #pragma once
3 #include <cstdint>
4 #include <vector>
5 #include <map>
7 #include "decls.h"
8 #include "pipeline.h"
10 namespace kms
11 {
12 class Card
13 {
14 friend class Framebuffer;
15 public:
16 Card();
17 Card(const std::string& device);
18 ~Card();
20 Card(const Card& other) = delete;
21 Card& operator=(const Card& other) = delete;
23 int fd() const { return m_fd; }
25 void drop_master();
27 Connector* get_first_connected_connector() const;
29 DrmObject* get_object(uint32_t id) const;
30 Connector* get_connector(uint32_t id) const;
31 Crtc* get_crtc(uint32_t id) const;
32 Encoder* get_encoder(uint32_t id) const;
33 Plane* get_plane(uint32_t id) const;
34 Property* get_prop(uint32_t id) const;
35 Property* get_prop(const std::string& name) const;
37 bool master() const { return m_master; }
38 bool has_atomic() const { return m_has_atomic; }
39 bool has_has_universal_planes() const { return m_has_universal_planes; }
41 const std::vector<Connector*> get_connectors() const { return m_connectors; }
42 const std::vector<Encoder*> get_encoders() const { return m_encoders; }
43 const std::vector<Crtc*> get_crtcs() const { return m_crtcs; }
44 const std::vector<Plane*> get_planes() const { return m_planes; }
45 const std::vector<Property*> get_properties() const { return m_properties; }
47 const std::vector<DrmObject*> get_objects() const;
49 std::vector<Pipeline> get_connected_pipelines();
51 void call_page_flip_handlers();
53 private:
54 void restore_modes();
56 std::map<uint32_t, DrmObject*> m_obmap;
58 std::vector<Connector*> m_connectors;
59 std::vector<Encoder*> m_encoders;
60 std::vector<Crtc*> m_crtcs;
61 std::vector<Plane*> m_planes;
62 std::vector<Property*> m_properties;
63 std::vector<Framebuffer*> m_framebuffers;
65 int m_fd;
66 bool m_master;
68 bool m_has_atomic;
69 bool m_has_universal_planes;
70 };
71 }