From ba5ae9472e88e28b47a8564972f98891694df7c2 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Fri, 3 Jun 2016 19:42:47 +0300 Subject: add kmsblank app --- utils/kmsblank.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 utils/kmsblank.cpp (limited to 'utils/kmsblank.cpp') diff --git a/utils/kmsblank.cpp b/utils/kmsblank.cpp new file mode 100644 index 0000000..8b883bb --- /dev/null +++ b/utils/kmsblank.cpp @@ -0,0 +1,104 @@ +#include +#include +#include + +#include +#include +#include "opts.h" + +using namespace std; +using namespace kms; + +static const char* usage_str = + "Usage: kmsblank [OPTION]...\n\n" + "Blank screen(s)\n\n" + "Options:\n" + " --device=DEVICE DEVICE is the path to DRM card to open\n" + " -c, --connector=CONN CONN is \n" + " -t, --time=TIME blank/unblank in TIME intervals\n" + "\n" + " can be given by index () or id (@).\n" + " can also be given by name.\n" + ; + +static void usage() +{ + puts(usage_str); +} + +int main(int argc, char **argv) +{ + string dev_path = "/dev/dri/card0"; + + vector conn_strs; + uint32_t time = 0; + + OptionSet optionset = { + Option("|device=", [&dev_path](string s) + { + dev_path = s; + }), + Option("c|connector=", [&conn_strs](string str) + { + conn_strs.push_back(str); + }), + Option("t|time=", [&time](string str) + { + time = stoul(str); + }), + Option("h|help", []() + { + usage(); + exit(-1); + }), + }; + + optionset.parse(argc, argv); + + if (optionset.params().size() > 0) { + usage(); + exit(-1); + } + + Card card(dev_path); + + vector conns; + + if (conn_strs.size() > 0) { + for (string s : conn_strs) { + auto c = resolve_connector(card, s); + if (!c) + EXIT("Failed to resolve connector '%s'", s.c_str()); + conns.push_back(c); + } + } else { + conns = card.get_connectors(); + } + + bool blank = true; + + while (true) { + for (Connector* conn : conns) { + if (!conn->connected()) { + printf("Connector %u not connected\n", conn->idx()); + continue; + } + + printf("Connector %u: %sblank\n", conn->idx(), blank ? "" : "un"); + int r = conn->set_prop_value("DPMS", blank ? 3 : 0); + if (r) + EXIT("Failed to set DPMS: %d", r); + } + + if (time == 0) + break; + + usleep(1000 * time); + + blank = !blank; + } + + printf("press enter to exit\n"); + + getchar(); +} -- cgit v1.2.3