From 82b200e00c2c7dbeae108b21b2bba39305300d4a Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Fri, 11 Jan 2019 12:09:40 +0200 Subject: card: add open_modesetting_card() Add open_modesetting_card() which iterates the DRM cards and returns the first one that has crtcs and connectors. Signed-off-by: Tomi Valkeinen --- kms++/src/card.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'kms++/src') diff --git a/kms++/src/card.cpp b/kms++/src/card.cpp index 4632f22..04750af 100644 --- a/kms++/src/card.cpp +++ b/kms++/src/card.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -18,6 +19,25 @@ using namespace std; namespace kms { +unique_ptr Card::open_modesetting_card() +{ + for (uint32_t i = 0; ; ++i) { + string path = "/dev/dri/card" + to_string(i); + + struct stat buffer; + if (stat(path.c_str(), &buffer)) + break; + + unique_ptr card = unique_ptr(new Card(path)); + + if (card->get_connectors().size() > 0 && + card->get_crtcs().size() > 0) + return card; + } + + throw runtime_error("No modesetting DRM card found"); +} + static int open_device_by_path(string path) { int fd = open(path.c_str(), O_RDWR | O_CLOEXEC); -- cgit v1.2.3