MythTV  master
mythdrmconnector.cpp
Go to the documentation of this file.
2 
3 #include <algorithm>
4 
11 DRMConn MythDRMConnector::Create(int FD, uint32_t Id)
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 
20 DRMConn 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 
64 QString 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 
76 DRMConn MythDRMConnector::GetConnectorByName(const DRMConns& Connectors, const QString &Name)
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::GetConnectors
static DRMConns GetConnectors(int FD)
Definition: mythdrmconnector.cpp:28
MythDRMConnector::MythDRMConnector
MythDRMConnector(int FD, uint32_t Id)
Definition: mythdrmconnector.cpp:40
MythDRMConnector::m_modes
DRMModes m_modes
Definition: mythdrmconnector.h:31
MythDRMConnector::m_mmHeight
uint32_t m_mmHeight
Definition: mythdrmconnector.h:30
MythDRMConnector::m_state
drmModeConnection m_state
Definition: mythdrmconnector.h:28
MythDRMConnector::m_id
uint32_t m_id
Definition: mythdrmconnector.h:23
MythDRMConnector::GetConnectorName
static QString GetConnectorName(uint32_t Type, uint32_t Id)
Definition: mythdrmconnector.cpp:64
MythDRMConnector::m_mmWidth
uint32_t m_mmWidth
Definition: mythdrmconnector.h:29
MythDRMResources
A simple wrapper around a drmModeResPtr that ensures proper cleanup.
Definition: mythdrmresources.h:24
mythdrmconnector.h
DRMConn
std::shared_ptr< class MythDRMConnector > DRMConn
Definition: mythdrmconnector.h:10
MythDRMMode::Create
static DRMMode Create(drmModeModeInfoPtr Mode, int Index)
Definition: mythdrmmode.cpp:7
MythDRMConnector::GetConnectorByName
static DRMConn GetConnectorByName(const DRMConns &Connectors, const QString &Name)
Definition: mythdrmconnector.cpp:76
MythDRMConnector::m_properties
DRMProps m_properties
Definition: mythdrmconnector.h:32
MythDRMConnector::Connected
bool Connected() const
Definition: mythdrmconnector.cpp:59
MythDRMConnector::m_type
uint32_t m_type
Definition: mythdrmconnector.h:25
Name
Definition: channelsettings.cpp:71
MythDRMConnector::m_typeId
uint32_t m_typeId
Definition: mythdrmconnector.h:26
MythDRMConnector::m_encoderId
uint32_t m_encoderId
Definition: mythdrmconnector.h:24
DRMConns
std::vector< DRMConn > DRMConns
Definition: mythdrmconnector.h:11
MythDRMConnector::GetConnector
static DRMConn GetConnector(const DRMConns &Connectors, uint32_t Id)
Definition: mythdrmconnector.cpp:20
MythDRMConnector::Create
static DRMConn Create(int FD, uint32_t Id)
Definition: mythdrmconnector.cpp:11
MythDRMProperty::GetProperties
static DRMProps GetProperties(int FD, uint32_t ObjectId, uint32_t ObjectType)
Definition: mythdrmproperty.cpp:25
MythDRMConnector::m_name
QString m_name
Definition: mythdrmconnector.h:27