Patch for xcb-proto and a test program are applied.
The test program can be compiled by gcc -o dpmsnotify dpmsnotify.c -lxcb
-lxcb-dpms
>From 00f7947121181fc98cb09e4b86e14bd4738958d0 Mon Sep 17 00:00:00 2001
From: Alexander Volkov <a.vol...@rusbitech.ru>
Date: Mon, 1 Oct 2018 19:41:18 +0300
Subject: [PATCH] dpms: Add DPMSInfoNotify event
See the description in xorgproto repository.
Signed-off-by: Alexander Volkov <a.vol...@rusbitech.ru>
---
src/dpms.xml | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/src/dpms.xml b/src/dpms.xml
index 5581284..814a14e 100644
--- a/src/dpms.xml
+++ b/src/dpms.xml
@@ -26,7 +26,8 @@ sale, use or other dealings in this Software without prior written
authorization from the authors.
-->
<xcb header="dpms" extension-xname="DPMS" extension-name="DPMS"
- major-version="0" minor-version="0">
+ major-version="1" minor-version="2">
+ <import>xproto</import>
<request name="GetVersion" opcode="0">
<field type="CARD16" name="client_major_version" />
<field type="CARD16" name="client_minor_version" />
@@ -84,4 +85,20 @@ authorization from the authors.
<pad bytes="21" />
</reply>
</request>
+
+ <enum name="EventMask" >
+ <item name="InfoNotify"> <bit>0</bit> </item>
+ </enum>
+
+ <request name="SelectInput" opcode="8">
+ <field type="CARD32" name="event_mask" mask="EventMask"/>
+ </request>
+
+ <event name="InfoNotify" number="0" xge="true">
+ <pad bytes="2" />
+ <field type="TIMESTAMP" name="timestamp"/>
+ <field type="CARD16" name="power_level" enum="DPMSMode" />
+ <field type="BOOL" name="state" />
+ <pad bytes="21"/>
+ </event>
</xcb>
--
2.17.0
#include <stdlib.h>
#include <stdio.h>
#include <xcb/xcb.h>
#include <xcb/dpms.h>
int main()
{
xcb_connection_t *c;
xcb_generic_event_t *e;
/* Open the connection to the X server */
c = xcb_connect (NULL, NULL);
const struct xcb_query_extension_reply_t *dpms = xcb_get_extension_data(c, &xcb_dpms_id);
fprintf(stdout, "dpms present %d\n", dpms->present);
xcb_dpms_get_version_cookie_t version_cookie = xcb_dpms_get_version(c, XCB_DPMS_MAJOR_VERSION, XCB_DPMS_MINOR_VERSION);
xcb_dpms_get_version_reply_t *version_reply = xcb_dpms_get_version_reply(c, version_cookie, NULL);
fprintf(stdout, "dpms version %d.%d\n", version_reply->server_major_version, version_reply->server_minor_version);
free(version_reply);
xcb_dpms_select_input(c, XCB_DPMS_EVENT_MASK_INFO_NOTIFY);
xcb_flush (c);
while ((e = xcb_wait_for_event (c))) {
uint8_t response_type = e->response_type & ~0x80;
if (response_type == XCB_GE_GENERIC) {
xcb_dpms_info_notify_event_t *info = (xcb_dpms_info_notify_event_t *)e;
if (info->extension == dpms->major_opcode && info->event_type == XCB_DPMS_INFO_NOTIFY)
fprintf(stdout, "dpms state %d, power level %d\n", info->state, info->power_level);
}
free (e);
}
return 0;
}
_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel