GamepadMessageUtils.h (6052B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef mozilla_dom_gamepad_GamepadMessageUtils_h 8 #define mozilla_dom_gamepad_GamepadMessageUtils_h 9 10 #include "ipc/EnumSerializer.h" 11 #include "mozilla/dom/BindingIPCUtils.h" 12 #include "mozilla/dom/GamepadBinding.h" 13 #include "mozilla/dom/GamepadHandle.h" 14 #include "mozilla/dom/GamepadLightIndicatorBinding.h" 15 #include "mozilla/dom/GamepadPoseState.h" 16 #include "mozilla/dom/GamepadTouchState.h" 17 18 namespace IPC { 19 20 template <> 21 struct ParamTraits<mozilla::dom::GamepadLightIndicatorType> 22 : public mozilla::dom::WebIDLEnumSerializer< 23 mozilla::dom::GamepadLightIndicatorType> {}; 24 25 template <> 26 struct ParamTraits<mozilla::dom::GamepadMappingType> 27 : public mozilla::dom::WebIDLEnumSerializer< 28 mozilla::dom::GamepadMappingType> {}; 29 30 template <> 31 struct ParamTraits<mozilla::dom::GamepadHand> 32 : public mozilla::dom::WebIDLEnumSerializer<mozilla::dom::GamepadHand> {}; 33 34 template <> 35 struct ParamTraits<mozilla::dom::GamepadCapabilityFlags> 36 : public BitFlagsEnumSerializer< 37 mozilla::dom::GamepadCapabilityFlags, 38 mozilla::dom::GamepadCapabilityFlags::Cap_All> {}; 39 40 template <> 41 struct ParamTraits<mozilla::dom::GamepadPoseState> { 42 typedef mozilla::dom::GamepadPoseState paramType; 43 44 static void Write(MessageWriter* aWriter, const paramType& aParam) { 45 WriteParam(aWriter, aParam.flags); 46 WriteParam(aWriter, aParam.orientation[0]); 47 WriteParam(aWriter, aParam.orientation[1]); 48 WriteParam(aWriter, aParam.orientation[2]); 49 WriteParam(aWriter, aParam.orientation[3]); 50 WriteParam(aWriter, aParam.position[0]); 51 WriteParam(aWriter, aParam.position[1]); 52 WriteParam(aWriter, aParam.position[2]); 53 WriteParam(aWriter, aParam.angularVelocity[0]); 54 WriteParam(aWriter, aParam.angularVelocity[1]); 55 WriteParam(aWriter, aParam.angularVelocity[2]); 56 WriteParam(aWriter, aParam.angularAcceleration[0]); 57 WriteParam(aWriter, aParam.angularAcceleration[1]); 58 WriteParam(aWriter, aParam.angularAcceleration[2]); 59 WriteParam(aWriter, aParam.linearVelocity[0]); 60 WriteParam(aWriter, aParam.linearVelocity[1]); 61 WriteParam(aWriter, aParam.linearVelocity[2]); 62 WriteParam(aWriter, aParam.linearAcceleration[0]); 63 WriteParam(aWriter, aParam.linearAcceleration[1]); 64 WriteParam(aWriter, aParam.linearAcceleration[2]); 65 WriteParam(aWriter, aParam.isPositionValid); 66 WriteParam(aWriter, aParam.isOrientationValid); 67 } 68 69 static bool Read(MessageReader* aReader, paramType* aResult) { 70 if (!ReadParam(aReader, &(aResult->flags)) || 71 !ReadParam(aReader, &(aResult->orientation[0])) || 72 !ReadParam(aReader, &(aResult->orientation[1])) || 73 !ReadParam(aReader, &(aResult->orientation[2])) || 74 !ReadParam(aReader, &(aResult->orientation[3])) || 75 !ReadParam(aReader, &(aResult->position[0])) || 76 !ReadParam(aReader, &(aResult->position[1])) || 77 !ReadParam(aReader, &(aResult->position[2])) || 78 !ReadParam(aReader, &(aResult->angularVelocity[0])) || 79 !ReadParam(aReader, &(aResult->angularVelocity[1])) || 80 !ReadParam(aReader, &(aResult->angularVelocity[2])) || 81 !ReadParam(aReader, &(aResult->angularAcceleration[0])) || 82 !ReadParam(aReader, &(aResult->angularAcceleration[1])) || 83 !ReadParam(aReader, &(aResult->angularAcceleration[2])) || 84 !ReadParam(aReader, &(aResult->linearVelocity[0])) || 85 !ReadParam(aReader, &(aResult->linearVelocity[1])) || 86 !ReadParam(aReader, &(aResult->linearVelocity[2])) || 87 !ReadParam(aReader, &(aResult->linearAcceleration[0])) || 88 !ReadParam(aReader, &(aResult->linearAcceleration[1])) || 89 !ReadParam(aReader, &(aResult->linearAcceleration[2])) || 90 !ReadParam(aReader, &(aResult->isPositionValid)) || 91 !ReadParam(aReader, &(aResult->isOrientationValid))) { 92 return false; 93 } 94 return true; 95 } 96 }; 97 98 template <> 99 struct ParamTraits<mozilla::dom::GamepadTouchState> { 100 typedef mozilla::dom::GamepadTouchState paramType; 101 102 static void Write(MessageWriter* aWriter, const paramType& aParam) { 103 WriteParam(aWriter, aParam.touchId); 104 WriteParam(aWriter, aParam.surfaceId); 105 WriteParam(aWriter, aParam.position[0]); 106 WriteParam(aWriter, aParam.position[1]); 107 WriteParam(aWriter, aParam.surfaceDimensions[0]); 108 WriteParam(aWriter, aParam.surfaceDimensions[1]); 109 WriteParam(aWriter, aParam.isSurfaceDimensionsValid); 110 } 111 112 static bool Read(MessageReader* aReader, paramType* aResult) { 113 if (!ReadParam(aReader, &(aResult->touchId)) || 114 !ReadParam(aReader, &(aResult->surfaceId)) || 115 !ReadParam(aReader, &(aResult->position[0])) || 116 !ReadParam(aReader, &(aResult->position[1])) || 117 !ReadParam(aReader, &(aResult->surfaceDimensions[0])) || 118 !ReadParam(aReader, &(aResult->surfaceDimensions[1])) || 119 !ReadParam(aReader, &(aResult->isSurfaceDimensionsValid))) { 120 return false; 121 } 122 return true; 123 } 124 }; 125 126 template <> 127 struct ParamTraits<mozilla::dom::GamepadHandleKind> 128 : public ContiguousEnumSerializerInclusive< 129 mozilla::dom::GamepadHandleKind, 130 mozilla::dom::GamepadHandleKind::GamepadPlatformManager, 131 mozilla::dom::GamepadHandleKind::VR> {}; 132 133 template <> 134 struct ParamTraits<mozilla::dom::GamepadHandle> { 135 typedef mozilla::dom::GamepadHandle paramType; 136 static void Write(MessageWriter* aWriter, const paramType& aParam) { 137 WriteParam(aWriter, aParam.mValue); 138 WriteParam(aWriter, aParam.mKind); 139 } 140 static bool Read(MessageReader* aReader, paramType* aParam) { 141 return ReadParam(aReader, &aParam->mValue) && 142 ReadParam(aReader, &aParam->mKind); 143 } 144 }; 145 146 } // namespace IPC 147 148 #endif // mozilla_dom_gamepad_GamepadMessageUtils_h