From 554f3f0231c432dea740e56d6a51a15983c93310 Mon Sep 17 00:00:00 2001 From: Matt Hoosier Date: Wed, 27 May 2020 15:29:00 -0500 Subject: card: add factory function for selecting card by name Uses drmOpen() to do the heavy lifting. --- kms++/inc/kms++/card.h | 2 ++ kms++/src/card.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/kms++/inc/kms++/card.h b/kms++/inc/kms++/card.h index 9ca06b2..5c1cf7c 100644 --- a/kms++/inc/kms++/card.h +++ b/kms++/inc/kms++/card.h @@ -24,6 +24,8 @@ class Card { friend class Framebuffer; public: + static std::unique_ptr open_named_card(const std::string& name); + Card(const std::string& dev_path = ""); Card(const std::string& driver, uint32_t idx); Card(int fd, bool take_ownership); diff --git a/kms++/src/card.cpp b/kms++/src/card.cpp index 062645a..527aca6 100644 --- a/kms++/src/card.cpp +++ b/kms++/src/card.cpp @@ -104,6 +104,16 @@ static int open_device_by_driver(string name, uint32_t idx) throw invalid_argument("Failed to find a DRM device " + name + ":" + to_string(idx)); } +std::unique_ptr Card::open_named_card(const std::string& name) +{ + int fd = drmOpen(name.c_str(), 0); + + if (fd < 0) + throw invalid_argument(string(strerror(errno)) + " opening card \"" + name + "\""); + + return std::unique_ptr(new Card(fd, true)); +} + Card::Card(const std::string& dev_path) { const char* drv_p = getenv("KMSXX_DRIVER"); -- cgit v1.2.3