summaryrefslogtreecommitdiff
path: root/kms++/card.h
diff options
context:
space:
mode:
Diffstat (limited to 'kms++/card.h')
-rw-r--r--kms++/card.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/kms++/card.h b/kms++/card.h
new file mode 100644
index 0000000..5ecaecf
--- /dev/null
+++ b/kms++/card.h
@@ -0,0 +1,71 @@
+#pragma once
+
+#include <cstdint>
+#include <vector>
+#include <map>
+
+#include "decls.h"
+#include "pipeline.h"
+
+namespace kms
+{
+class Card
+{
+ friend class Framebuffer;
+public:
+ Card();
+ Card(const std::string& device);
+ ~Card();
+
+ Card(const Card& other) = delete;
+ Card& operator=(const Card& other) = delete;
+
+ int fd() const { return m_fd; }
+
+ void drop_master();
+
+ Connector* get_first_connected_connector() const;
+
+ DrmObject* get_object(uint32_t id) const;
+ Connector* get_connector(uint32_t id) const;
+ Crtc* get_crtc(uint32_t id) const;
+ Encoder* get_encoder(uint32_t id) const;
+ Plane* get_plane(uint32_t id) const;
+ Property* get_prop(uint32_t id) const;
+ Property* get_prop(const std::string& name) const;
+
+ bool master() const { return m_master; }
+ bool has_atomic() const { return m_has_atomic; }
+ bool has_has_universal_planes() const { return m_has_universal_planes; }
+
+ const std::vector<Connector*> get_connectors() const { return m_connectors; }
+ const std::vector<Encoder*> get_encoders() const { return m_encoders; }
+ const std::vector<Crtc*> get_crtcs() const { return m_crtcs; }
+ const std::vector<Plane*> get_planes() const { return m_planes; }
+ const std::vector<Property*> get_properties() const { return m_properties; }
+
+ const std::vector<DrmObject*> get_objects() const;
+
+ std::vector<Pipeline> get_connected_pipelines();
+
+ void call_page_flip_handlers();
+
+private:
+ void restore_modes();
+
+ std::map<uint32_t, DrmObject*> m_obmap;
+
+ std::vector<Connector*> m_connectors;
+ std::vector<Encoder*> m_encoders;
+ std::vector<Crtc*> m_crtcs;
+ std::vector<Plane*> m_planes;
+ std::vector<Property*> m_properties;
+ std::vector<Framebuffer*> m_framebuffers;
+
+ int m_fd;
+ bool m_master;
+
+ bool m_has_atomic;
+ bool m_has_universal_planes;
+};
+}