libkms++/connector: Add methods for getting details of the DRM object
authorJyri Sarha <jsarha@ti.com>
Tue, 20 Oct 2015 13:46:01 +0000 (16:46 +0300)
committerJyri Sarha <jsarha@ti.com>
Tue, 20 Oct 2015 16:18:32 +0000 (19:18 +0300)
libkms++/connector.cpp
libkms++/connector.h

index 0d6d4d753c49885df61d1d0559628e0502eeb9cf..eca3edd8c258a88c01b8bd337dafbab04dc790e5 100644 (file)
@@ -42,6 +42,17 @@ static const map<int, string> connection_str = {
        { DRM_MODE_UNKNOWNCONNECTION, "Unknown" },
 };
 
+static const map<int, string> subpix_str = {
+#define DEF_SUBPIX(c) { DRM_MODE_SUBPIXEL_##c, #c }
+       DEF_SUBPIX(UNKNOWN),
+       DEF_SUBPIX(HORIZONTAL_RGB),
+       DEF_SUBPIX(HORIZONTAL_BGR),
+       DEF_SUBPIX(VERTICAL_RGB),
+       DEF_SUBPIX(VERTICAL_BGR),
+       DEF_SUBPIX(NONE),
+#undef DEF_SUBPIX
+};
+
 struct ConnectorPriv
 {
        drmModeConnectorPtr drm_connector;
@@ -139,4 +150,56 @@ Crtc* Connector::get_current_crtc() const
                return 0;
 }
 
+uint32_t Connector::connector_type() const
+{
+       return m_priv->drm_connector->connector_type;
+}
+
+uint32_t Connector::connector_type_id() const
+{
+       return m_priv->drm_connector->connector_type_id;
+}
+
+uint32_t Connector::mmWidth() const
+{
+       return m_priv->drm_connector->mmWidth;
+}
+
+uint32_t Connector::mmHeight() const
+{
+       return m_priv->drm_connector->mmHeight;
+}
+
+uint32_t Connector::subpixel() const
+{
+       return m_priv->drm_connector->subpixel;
+}
+
+const string& Connector::subpixel_str() const
+{
+       return subpix_str.at(subpixel());
+}
+
+std::vector<Videomode> Connector::get_modes() const
+{
+       vector<Videomode> modes;
+
+       for (int i = 0; i < m_priv->drm_connector->count_modes; i++)
+               modes.push_back(drm_mode_to_video_mode(
+                                       m_priv->drm_connector->modes[i]));
+
+       return modes;
+}
+
+std::vector<Encoder*> Connector::get_encoders() const
+{
+       vector<Encoder*> encoders;
+
+       for (int i = 0; i < m_priv->drm_connector->count_encoders; i++) {
+               auto enc = card().get_encoder(m_priv->drm_connector->encoders[i]);
+               encoders.push_back(enc);
+       }
+       return encoders;
+}
+
 }
index 8ce6cda0568fb0ce87398a3f8942118c9aba24db..f586f4e316c48724c401da4763bcc93e9f4f7d5f 100644 (file)
@@ -37,6 +37,15 @@ public:
 
        bool connected() const;
 
+       const std::string& fullname() const { return m_fullname; }
+       uint32_t connector_type() const;
+       uint32_t connector_type_id() const;
+       uint32_t mmWidth() const;
+       uint32_t mmHeight() const;
+       uint32_t subpixel() const;
+       const std::string& subpixel_str() const;
+       std::vector<Videomode> get_modes() const;
+       std::vector<Encoder*> get_encoders() const;
 private:
        Connector(Card& card, uint32_t id, uint32_t idx);
        ~Connector();