gfx/vr/ipc/PVRManager.ipdl
author Daosheng Mu <daoshengmu@gmail.com>
Tue, 07 Mar 2017 10:17:57 +0800
changeset 349320 5d8e162ef5f73106037a6ad5c34770f26ab86447
parent 349318 3381a8485d054b31ada9f67fd880267db1d6b0ef
child 360337 c66058d34b17c6297297472c40bbff6f0061e76a
permissions -rw-r--r--
Bug 1299937 - Part 6: Handle Stop vibrating when the window defoucses; r=qdot MozReview-Commit-ID: Kvd40jnSPvK

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: sw=2 ts=8 et :
 */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

include LayersSurfaces;
include protocol PTexture;
include protocol PVRLayer;
include LayersMessages;
include GamepadEventTypes;

include "VRMessageUtils.h";

using struct mozilla::gfx::VRFieldOfView from "gfxVR.h";
using struct mozilla::gfx::VRDisplayInfo from "gfxVR.h";
using struct mozilla::gfx::VRSensorUpdate from "gfxVR.h";
using struct mozilla::gfx::VRHMDSensorState from "gfxVR.h";
using struct mozilla::gfx::VRControllerInfo from "gfxVR.h";
using mozilla::layers::LayersBackend from "mozilla/layers/LayersTypes.h";
using mozilla::layers::TextureFlags from "mozilla/layers/CompositorTypes.h";


namespace mozilla {
namespace gfx {

/**
 * The PVRManager protocol is used to enable communication of VR display
 * enumeration and sensor state between the compositor thread and
 * content threads/processes.
 */
sync protocol PVRManager
{
  manages PTexture;
  manages PVRLayer;

parent:
  async PTexture(SurfaceDescriptor aSharedData, LayersBackend aBackend,
                 TextureFlags aTextureFlags, uint64_t aSerial);

  async PVRLayer(uint32_t aDisplayID, float aLeftEyeX, float aLeftEyeY, float aLeftEyeWidth, float aLeftEyeHeight, float aRightEyeX, float aRightEyeY, float aRightEyeWidth, float aRightEyeHeight);

  // (Re)Enumerate VR Displays.  An updated list of VR displays will be returned
  // asynchronously to children via UpdateDisplayInfo.
  async RefreshDisplays();

  // Reset the sensor of the display identified by aDisplayID so that the current
  // sensor state is the "Zero" position.
  async ResetSensor(uint32_t aDisplayID);

  sync GetSensorState(uint32_t aDisplayID) returns(VRHMDSensorState aState);
  async SetHaveEventListener(bool aHaveEventListener);

  async ControllerListenerAdded();
  async ControllerListenerRemoved();
  async VibrateHaptic(uint32_t aControllerIdx, uint32_t aHapticIndex,
                      double aIntensity, double aDuration, uint32_t aPromiseID);
  async StopVibrateHaptic(uint32_t aControllerIdx);

  async CreateVRTestSystem();
  async CreateVRServiceTestDisplay(nsCString aID, uint32_t aPromiseID);
  async CreateVRServiceTestController(nsCString aID, uint32_t aPromiseID);
  async SetDisplayInfoToMockDisplay(uint32_t aDeviceID, VRDisplayInfo aDisplayInfo);
  async SetSensorStateToMockDisplay(uint32_t aDeviceID, VRHMDSensorState aSensorState);

  async NewButtonEventToMockController(uint32_t aDeviceID, long aButton,
                                       bool aPressed);
  async NewAxisMoveEventToMockController(uint32_t aDeviceID, long aAxis,
                                         double aValue);
  async NewPoseMoveToMockController(uint32_t aDeviceID, GamepadPoseState aPose);

child:

  async ParentAsyncMessages(AsyncParentMessageData[] aMessages);

  // Notify children of updated VR display enumeration and details.  This will
  // be sent to all children when the parent receives RefreshDisplays, even
  // if no changes have been detected.  This ensures that Promises exposed
  // through DOM calls are always resolved.
  async UpdateDisplayInfo(VRDisplayInfo[] aDisplayUpdates);

  async NotifyVSync();
  async NotifyVRVSync(uint32_t aDisplayID);
  async GamepadUpdate(GamepadChangeEvent aGamepadEvent);
  async ReplyGamepadVibrateHaptic(uint32_t aPromiseID);

  async ReplyCreateVRServiceTestDisplay(nsCString aID, uint32_t aPromiseID,
                                        uint32_t aDeviceID);
  async ReplyCreateVRServiceTestController(nsCString aID, uint32_t aPromiseID,
                                           uint32_t aDeviceID);

  async __delete__();

};

} // gfx
} // mozilla