summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Hoosier <matt.hoosier@garmin.com>2020-05-27 15:29:00 -0500
committerMatt Hoosier <matt.hoosier@garmin.com>2020-05-28 14:08:42 -0500
commit554f3f0231c432dea740e56d6a51a15983c93310 (patch)
tree5b8a7e630944ef168de903afc33c7fbe20ec083d
parenta9480f87902840388497ff85062e73381317626f (diff)
card: add factory function for selecting card by name
Uses drmOpen() to do the heavy lifting.
-rw-r--r--kms++/inc/kms++/card.h2
-rw-r--r--kms++/src/card.cpp10
2 files changed, 12 insertions, 0 deletions
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<Card> 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> 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<Card>(new Card(fd, true));
+}
+
Card::Card(const std::string& dev_path)
{
const char* drv_p = getenv("KMSXX_DRIVER");