VBoxGuestR3LibMouse.cpp revision bc830c4bf23fbfb4373b949a1d408b4a1c67017d
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* $Id$ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBoxGuestR3Lib - Ring-3 Support Library for VirtualBox guest additions, Mouse.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2007 innotek GmbH
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync */
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync/*******************************************************************************
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync* Header Files *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync*******************************************************************************/
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VBGLR3Internal.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Retrieve mouse co-ordinate information from the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pfFeatures Where to store the mouse features.
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync * @param px Where to store the X co-ordinate.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param py Where to store the Y co-ordinate.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3GetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VMMDevReqMouseStatus Req;
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync vmmdevInitRequest(&Req.header, VMMDevReq_GetMouseStatus);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Req.mouseFeatures = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Req.pointerXPos = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Req.pointerYPos = 0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync int rc = vbglR3GRPerform(&Req.header);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync if (RT_SUCCESS(rc))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (pfFeatures)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *pfFeatures = Req.mouseFeatures;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (px)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *px = Req.pointerXPos;
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync if (py)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *py = Req.pointerYPos;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync return rc;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Send mouse features to the host.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param fFeatures Supported mouse pointer features.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBGLR3DECL(int) VbglR3SetMouseStatus(uint32_t fFeatures)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VMMDevReqMouseStatus Req;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync vmmdevInitRequest(&Req.header, VMMDevReq_SetMouseStatus);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Req.mouseFeatures = fFeatures;
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync Req.pointerXPos = 0;
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync Req.pointerYPos = 0;
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync return vbglR3GRPerform(&Req.header);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync}
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync