From 67df5b4ad1aff39b6792fa77847258c3f14b9b39 Mon Sep 17 00:00:00 2001 From: Deon Thomas Date: Wed, 26 Jun 2013 08:32:42 +0900 Subject: [PATCH] Ecore DPMS Function to get the current dpms power level --- src/lib/ecore_x/Ecore_X.h | 9 ++++++++ src/lib/ecore_x/xcb/ecore_xcb_dpms.c | 33 ++++++++++++++++++++++++++++ src/lib/ecore_x/xlib/ecore_x_dpms.c | 24 ++++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/src/lib/ecore_x/Ecore_X.h b/src/lib/ecore_x/Ecore_X.h index fa10024a27..8aac0e996c 100644 --- a/src/lib/ecore_x/Ecore_X.h +++ b/src/lib/ecore_x/Ecore_X.h @@ -398,6 +398,14 @@ typedef enum _Ecore_X_Error_Code ECORE_X_ERROR_CODE_BAD_IMPLEMENTATION = 17, } Ecore_X_Error_Code; +typedef enum _Ecore_X_Dpms_Mode +{ + ECORE_X_DPMS_MODE_ON = 0, + ECORE_X_DPMS_MODE_STANDBY = 1, + ECORE_X_DPMS_MODE_SUSPEND = 2, + ECORE_X_DPMS_MODE_OFF = 3 +} Ecore_X_Dpms_Mode; + typedef struct _Ecore_X_Event_Mouse_In Ecore_X_Event_Mouse_In; typedef struct _Ecore_X_Event_Mouse_Out Ecore_X_Event_Mouse_Out; typedef struct _Ecore_X_Event_Window_Focus_In Ecore_X_Event_Window_Focus_In; @@ -2371,6 +2379,7 @@ EAPI Eina_Bool ecore_x_dpms_query(void); EAPI Eina_Bool ecore_x_dpms_capable_get(void); EAPI Eina_Bool ecore_x_dpms_enabled_get(void); EAPI void ecore_x_dpms_enabled_set(int enabled); +EAPI Ecore_X_Dpms_Mode ecore_x_dpms_power_level_get(void); EAPI void ecore_x_dpms_timeouts_get(unsigned int *standby, unsigned int *suspend, unsigned int *off); EAPI Eina_Bool ecore_x_dpms_timeouts_set(unsigned int standby, unsigned int suspend, unsigned int off); EAPI unsigned int ecore_x_dpms_timeout_standby_get(void); diff --git a/src/lib/ecore_x/xcb/ecore_xcb_dpms.c b/src/lib/ecore_x/xcb/ecore_xcb_dpms.c index 98dc7d3d8c..95360e3073 100644 --- a/src/lib/ecore_x/xcb/ecore_xcb_dpms.c +++ b/src/lib/ecore_x/xcb/ecore_xcb_dpms.c @@ -319,3 +319,36 @@ ecore_x_dpms_timeout_off_set(unsigned int new_timeout) ecore_x_dpms_timeouts_set(standby, suspend, new_timeout); } +/** + * Check the DPMS power level. + * @return @c 0 if DPMS is :In Use + * @return @c 1 if DPMS is :Blanked, low power + * @return @c 2 if DPMS is :Blanked, lower power + * @return @c 3 if DPMS is :Shut off, awaiting activity + * @return @c -1 otherwise. +*/ +EAPI Ecore_X_Dpms_Mode +ecore_x_dpms_power_level_get(void) +{ + Ecore_X_Dpms_Mode ret = -1; +#ifdef ECORE_XCB_DPMS + xcb_dpms_info_cookie_t cookie; + xcb_dpms_info_reply_t *reply; +#endif + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + CHECK_XCB_CONN; + + if (!_dpms_avail) return ret; + +#ifdef ECORE_XCB_DPMS + cookie = xcb_dpms_info_unchecked(_ecore_xcb_conn); + reply = xcb_dpms_info_reply(_ecore_xcb_conn, cookie, NULL); + if (!reply) return -1; + + ret = reply->power_level; + free(reply); +#endif + + return ret; +} diff --git a/src/lib/ecore_x/xlib/ecore_x_dpms.c b/src/lib/ecore_x/xlib/ecore_x_dpms.c index beb914d863..b3c3e38c4c 100644 --- a/src/lib/ecore_x/xlib/ecore_x_dpms.c +++ b/src/lib/ecore_x/xlib/ecore_x_dpms.c @@ -79,6 +79,30 @@ ecore_x_dpms_enabled_get(void) #endif /* ifdef ECORE_XDPMS */ } +/** + * Check the DPMS power level. + * @return @c 0 if DPMS is :In Use + * @return @c 1 if DPMS is :Blanked, low power + * @return @c 2 if DPMS is :Blanked, lower power + * @return @c 3 if DPMS is :Shut off, awaiting activity + * @return @c -1 othwhise. + */ + +EAPI Ecore_X_Dpms_Mode +ecore_x_dpms_power_level_get(void) +{ +#ifdef ECORE_XDPMS + unsigned char state; + unsigned short power_lvl; + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + DPMSInfo(_ecore_x_disp, &power_lvl, &state); + return (int)power_lvl; +#else + return -1; +#endif +} + /** * Sets the DPMS state of the display. * @param enabled @c 0 to disable DPMS characteristics of the server, enable it otherwise.