From 55b222b0b02bcc53c7301f8e3200553f046bc4e5 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Sat, 25 Jun 2005 13:53:48 +0000 Subject: [PATCH] Stephan already implemented the needed support for dpms stuff too, so why not implementing the client methods too? git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13274 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/app/ServerProtocol.h | 4 +++ src/kits/interface/PrivateScreen.cpp | 43 +++++++++++++------------ src/servers/app/ServerApp.cpp | 47 ++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 22 deletions(-) diff --git a/headers/private/app/ServerProtocol.h b/headers/private/app/ServerProtocol.h index b720cc0596..666846b771 100644 --- a/headers/private/app/ServerProtocol.h +++ b/headers/private/app/ServerProtocol.h @@ -142,6 +142,10 @@ enum { AS_GET_RETRACE_SEMAPHORE, AS_GET_ACCELERANT_INFO, + + AS_SET_DPMS, + AS_GET_DPMS_STATE, + AS_GET_DPMS_CAPABILITIES, // Global function call defs AS_SET_UI_COLORS, diff --git a/src/kits/interface/PrivateScreen.cpp b/src/kits/interface/PrivateScreen.cpp index 9ba8199f3e..9b09a054cd 100644 --- a/src/kits/interface/PrivateScreen.cpp +++ b/src/kits/interface/PrivateScreen.cpp @@ -390,6 +390,9 @@ BPrivateScreen::GetPixelClockLimits(display_mode *mode, uint32 *low, uint32 *hig status_t BPrivateScreen::GetTimingConstraints(display_timing_constraints *dtc) { + if (dtc == NULL) + return B_BAD_VALUE; + BPrivate::AppServerLink link; link.StartMessage(AS_GET_TIMING_CONSTRAINTS); link.Attach(ID()); @@ -407,33 +410,30 @@ BPrivateScreen::GetTimingConstraints(display_timing_constraints *dtc) status_t BPrivateScreen::SetDPMS(uint32 dpmsState) { - status_t status = B_ERROR; - /* BPrivate::AppServerLink link; - PortMessage reply; - link.SetOpCode(AS_SET_DPMS); + link.StartMessage(AS_SET_DPMS); link.Attach(ID()); link.Attach(dpmsState); - link.FlushWithReply(&reply); - reply.Read(&status); - */ - return status; + int32 reply; + if (link.FlushWithReply(reply) == B_OK && reply == SERVER_TRUE) + return B_OK; + + return B_ERROR; } uint32 BPrivateScreen::DPMSState() { - // TODO: Implement uint32 state = 0; - /* + BPrivate::AppServerLink link; - PortMessage reply; - link.SetOpCode(AS_GET_DPMS_STATE); + link.StartMessage(AS_GET_DPMS_STATE); link.Attach(ID()); - link.FlushWithReply(&reply); - reply.Read(&state); - */ + int32 reply; + if (link.FlushWithReply(reply) == B_OK && reply == SERVER_TRUE) + link.Read(&state); + return state; } @@ -441,16 +441,15 @@ BPrivateScreen::DPMSState() uint32 BPrivateScreen::DPMSCapabilites() { - // TODO: Implement uint32 capabilities = 0; - /* + BPrivate::AppServerLink link; - PortMessage reply; - link.SetOpCode(AS_GET_DPMS_CAPABILITIES); + link.StartMessage(AS_GET_DPMS_CAPABILITIES); link.Attach(ID()); - link.FlushWithReply(&reply); - reply.Read(&capabilities); - */ + int32 reply; + if (link.FlushWithReply(reply) == B_OK && reply == SERVER_TRUE) + link.Read(&capabilities); + return capabilities; } diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index bf6b563aa4..65430f7f8a 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -2047,6 +2047,53 @@ status_t ret = B_ERROR; break; } + case AS_SET_DPMS: + { + STRACE(("ServerApp %s: AS_SET_DPMS\n", fSignature.String())); + screen_id id; + link.Read(&id); + + uint32 mode; + link.Read(&mode); + + if (gDesktop->GetHWInterface()->SetDPMSMode(mode) == B_OK) + fLink.StartMessage(SERVER_TRUE); + else + fLink.StartMessage(SERVER_FALSE); + + fLink.Flush(); + + break; + } + + case AS_GET_DPMS_STATE: + { + STRACE(("ServerApp %s: AS_GET_DPMS_STATE\n", fSignature.String())); + + screen_id id; + link.Read(&id); + + uint32 state = gDesktop->GetHWInterface()->DPMSMode(); + fLink.StartMessage(SERVER_TRUE); + fLink.Attach(state); + fLink.Flush(); + + break; + } + + case AS_GET_DPMS_CAPABILITIES: + { + STRACE(("ServerApp %s: AS_GET_DPMS_CAPABILITIES\n", fSignature.String())); + screen_id id; + link.Read(&id); + + uint32 capabilities = gDesktop->GetHWInterface()->DPMSCapabilities(); + fLink.StartMessage(SERVER_TRUE); + fLink.Attach(capabilities); + fLink.Flush(); + break; + } + default: printf("ServerApp %s received unhandled message code offset %s\n", fSignature.String(), MsgCodeToBString(code).String());