MythTV master
mythdrmconnector.cpp
Go to the documentation of this file.
2
3#include <algorithm>
4
12{
13 if (FD && Id)
14 if (auto c = std::shared_ptr<MythDRMConnector>(new MythDRMConnector(FD, Id)); c.get() && c->m_id)
15 return c;
16
17 return nullptr;
18}
19
20DRMConn MythDRMConnector::GetConnector(const DRMConns &Connectors, uint32_t Id)
21{
22 auto match = [&Id](const auto & Conn) { return Conn->m_id == Id; };
23 if (auto found = std::find_if(Connectors.cbegin(), Connectors.cend(), match); found != Connectors.cend())
24 return *found;
25 return nullptr;
26}
27
29{
30 DRMConns result;
31 if (auto resources = MythDRMResources(FD); *resources)
32 {
33 for (auto i = 0; i < resources->count_connectors; ++i)
34 if (auto connector = Create(FD, resources->connectors[i]); connector.get())
35 result.emplace_back(connector);
36 }
37 return result;
38}
39
41{
42 if (auto * connector = drmModeGetConnector(FD, Id); connector)
43 {
44 m_id = connector->connector_id;
45 m_encoderId = connector->encoder_id;
46 m_type = connector->connector_type;
47 m_typeId = connector->connector_type_id;
49 m_state = connector->connection;
50 m_mmWidth = connector->mmWidth;
51 m_mmHeight = connector->mmHeight;
52 m_properties = MythDRMProperty::GetProperties(FD, m_id, DRM_MODE_OBJECT_CONNECTOR);
53 for (auto i = 0; i < connector->count_modes; ++i)
54 m_modes.emplace_back(MythDRMMode::Create(&connector->modes[i], i));
55 drmModeFreeConnector(connector);
56 }
57}
58
60{
61 return m_state == DRM_MODE_CONNECTED;
62}
63
64QString MythDRMConnector::GetConnectorName(uint32_t Type, uint32_t Id)
65{
66 constexpr size_t count = DRM_MODE_CONNECTOR_DPI + 1;
67 static const std::array<const QString,count> s_connectorNames
68 {
69 "None", "VGA", "DVI", "DVI", "DVI", "Composite", "TV", "LVDS",
70 "CTV", "DIN", "DP", "HDMI", "HDMI", "TV", "eDP", "Virtual", "DSI", "DPI"
71 };
72 uint32_t type = std::min(Type, static_cast<uint32_t>(DRM_MODE_CONNECTOR_DPI));
73 return QString("%1%2").arg(s_connectorNames[type]).arg(Id);
74}
75
77{
78 for (const auto & connector : Connectors)
79 if (Name.compare(connector->m_name, Qt::CaseInsensitive) == 0)
80 return connector;
81
82 return nullptr;
83}
MythDRMConnector(int FD, uint32_t Id)
static DRMConns GetConnectors(int FD)
static DRMConn GetConnectorByName(const DRMConns &Connectors, const QString &Name)
static DRMConn Create(int FD, uint32_t Id)
bool Connected() const
static DRMConn GetConnector(const DRMConns &Connectors, uint32_t Id)
static QString GetConnectorName(uint32_t Type, uint32_t Id)
drmModeConnection m_state
static DRMMode Create(drmModeModeInfoPtr Mode, int Index)
Definition: mythdrmmode.cpp:7
static DRMProps GetProperties(int FD, uint32_t ObjectId, uint32_t ObjectType)
A simple wrapper around a drmModeResPtr that ensures proper cleanup.
std::vector< DRMConn > DRMConns
std::shared_ptr< class MythDRMConnector > DRMConn