Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set sw=2 ts=8 et 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_gfx_vr_VRMessageUtils_h
8 : #define mozilla_gfx_vr_VRMessageUtils_h
9 :
10 : #include "ipc/IPCMessageUtils.h"
11 : #include "mozilla/GfxMessageUtils.h"
12 : #include "VRManager.h"
13 :
14 : #include "gfxVR.h"
15 :
16 : namespace IPC {
17 :
18 : template<>
19 : struct ParamTraits<mozilla::gfx::VRDeviceType> :
20 : public ContiguousEnumSerializer<mozilla::gfx::VRDeviceType,
21 : mozilla::gfx::VRDeviceType(0),
22 : mozilla::gfx::VRDeviceType(mozilla::gfx::VRDeviceType::NumVRDeviceTypes)> {};
23 :
24 : template<>
25 : struct ParamTraits<mozilla::gfx::VRDisplayCapabilityFlags> :
26 : public BitFlagsEnumSerializer<mozilla::gfx::VRDisplayCapabilityFlags,
27 : mozilla::gfx::VRDisplayCapabilityFlags::Cap_All> {};
28 :
29 : template <>
30 : struct ParamTraits<mozilla::gfx::VRDisplayInfo>
31 : {
32 : typedef mozilla::gfx::VRDisplayInfo paramType;
33 :
34 0 : static void Write(Message* aMsg, const paramType& aParam)
35 : {
36 0 : WriteParam(aMsg, aParam.mType);
37 0 : WriteParam(aMsg, aParam.mDisplayID);
38 0 : WriteParam(aMsg, aParam.mDisplayName);
39 0 : WriteParam(aMsg, aParam.mCapabilityFlags);
40 0 : WriteParam(aMsg, aParam.mEyeResolution);
41 0 : WriteParam(aMsg, aParam.mIsConnected);
42 0 : WriteParam(aMsg, aParam.mIsMounted);
43 0 : WriteParam(aMsg, aParam.mPresentingGroups);
44 0 : WriteParam(aMsg, aParam.mGroupMask);
45 0 : WriteParam(aMsg, aParam.mStageSize);
46 0 : WriteParam(aMsg, aParam.mSittingToStandingTransform);
47 0 : WriteParam(aMsg, aParam.mFrameId);
48 0 : for (int i = 0; i < mozilla::gfx::VRDisplayInfo::NumEyes; i++) {
49 0 : WriteParam(aMsg, aParam.mEyeFOV[i]);
50 0 : WriteParam(aMsg, aParam.mEyeTranslation[i]);
51 : }
52 0 : for (int i = 0; i < mozilla::gfx::kVRMaxLatencyFrames; i++) {
53 0 : WriteParam(aMsg, aParam.mLastSensorState[i]);
54 : }
55 0 : }
56 :
57 0 : static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
58 : {
59 0 : if (!ReadParam(aMsg, aIter, &(aResult->mType)) ||
60 0 : !ReadParam(aMsg, aIter, &(aResult->mDisplayID)) ||
61 0 : !ReadParam(aMsg, aIter, &(aResult->mDisplayName)) ||
62 0 : !ReadParam(aMsg, aIter, &(aResult->mCapabilityFlags)) ||
63 0 : !ReadParam(aMsg, aIter, &(aResult->mEyeResolution)) ||
64 0 : !ReadParam(aMsg, aIter, &(aResult->mIsConnected)) ||
65 0 : !ReadParam(aMsg, aIter, &(aResult->mIsMounted)) ||
66 0 : !ReadParam(aMsg, aIter, &(aResult->mPresentingGroups)) ||
67 0 : !ReadParam(aMsg, aIter, &(aResult->mGroupMask)) ||
68 0 : !ReadParam(aMsg, aIter, &(aResult->mStageSize)) ||
69 0 : !ReadParam(aMsg, aIter, &(aResult->mSittingToStandingTransform)) ||
70 0 : !ReadParam(aMsg, aIter, &(aResult->mFrameId))) {
71 0 : return false;
72 : }
73 0 : for (int i = 0; i < mozilla::gfx::VRDisplayInfo::NumEyes; i++) {
74 0 : if (!ReadParam(aMsg, aIter, &(aResult->mEyeFOV[i])) ||
75 0 : !ReadParam(aMsg, aIter, &(aResult->mEyeTranslation[i]))) {
76 0 : return false;
77 : }
78 : }
79 0 : for (int i = 0; i < mozilla::gfx::kVRMaxLatencyFrames; i++) {
80 0 : if (!ReadParam(aMsg, aIter, &(aResult->mLastSensorState[i]))) {
81 0 : return false;
82 : }
83 : }
84 :
85 0 : return true;
86 : }
87 : };
88 :
89 : template <>
90 : struct ParamTraits<mozilla::gfx::VRHMDSensorState>
91 : {
92 : typedef mozilla::gfx::VRHMDSensorState paramType;
93 :
94 0 : static void Write(Message* aMsg, const paramType& aParam)
95 : {
96 0 : WriteParam(aMsg, aParam.timestamp);
97 0 : WriteParam(aMsg, aParam.inputFrameID);
98 0 : WriteParam(aMsg, aParam.flags);
99 0 : WriteParam(aMsg, aParam.orientation[0]);
100 0 : WriteParam(aMsg, aParam.orientation[1]);
101 0 : WriteParam(aMsg, aParam.orientation[2]);
102 0 : WriteParam(aMsg, aParam.orientation[3]);
103 0 : WriteParam(aMsg, aParam.position[0]);
104 0 : WriteParam(aMsg, aParam.position[1]);
105 0 : WriteParam(aMsg, aParam.position[2]);
106 0 : WriteParam(aMsg, aParam.angularVelocity[0]);
107 0 : WriteParam(aMsg, aParam.angularVelocity[1]);
108 0 : WriteParam(aMsg, aParam.angularVelocity[2]);
109 0 : WriteParam(aMsg, aParam.angularAcceleration[0]);
110 0 : WriteParam(aMsg, aParam.angularAcceleration[1]);
111 0 : WriteParam(aMsg, aParam.angularAcceleration[2]);
112 0 : WriteParam(aMsg, aParam.linearVelocity[0]);
113 0 : WriteParam(aMsg, aParam.linearVelocity[1]);
114 0 : WriteParam(aMsg, aParam.linearVelocity[2]);
115 0 : WriteParam(aMsg, aParam.linearAcceleration[0]);
116 0 : WriteParam(aMsg, aParam.linearAcceleration[1]);
117 0 : WriteParam(aMsg, aParam.linearAcceleration[2]);
118 0 : }
119 :
120 0 : static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
121 : {
122 0 : if (!ReadParam(aMsg, aIter, &(aResult->timestamp)) ||
123 0 : !ReadParam(aMsg, aIter, &(aResult->inputFrameID)) ||
124 0 : !ReadParam(aMsg, aIter, &(aResult->flags)) ||
125 0 : !ReadParam(aMsg, aIter, &(aResult->orientation[0])) ||
126 0 : !ReadParam(aMsg, aIter, &(aResult->orientation[1])) ||
127 0 : !ReadParam(aMsg, aIter, &(aResult->orientation[2])) ||
128 0 : !ReadParam(aMsg, aIter, &(aResult->orientation[3])) ||
129 0 : !ReadParam(aMsg, aIter, &(aResult->position[0])) ||
130 0 : !ReadParam(aMsg, aIter, &(aResult->position[1])) ||
131 0 : !ReadParam(aMsg, aIter, &(aResult->position[2])) ||
132 0 : !ReadParam(aMsg, aIter, &(aResult->angularVelocity[0])) ||
133 0 : !ReadParam(aMsg, aIter, &(aResult->angularVelocity[1])) ||
134 0 : !ReadParam(aMsg, aIter, &(aResult->angularVelocity[2])) ||
135 0 : !ReadParam(aMsg, aIter, &(aResult->angularAcceleration[0])) ||
136 0 : !ReadParam(aMsg, aIter, &(aResult->angularAcceleration[1])) ||
137 0 : !ReadParam(aMsg, aIter, &(aResult->angularAcceleration[2])) ||
138 0 : !ReadParam(aMsg, aIter, &(aResult->linearVelocity[0])) ||
139 0 : !ReadParam(aMsg, aIter, &(aResult->linearVelocity[1])) ||
140 0 : !ReadParam(aMsg, aIter, &(aResult->linearVelocity[2])) ||
141 0 : !ReadParam(aMsg, aIter, &(aResult->linearAcceleration[0])) ||
142 0 : !ReadParam(aMsg, aIter, &(aResult->linearAcceleration[1])) ||
143 0 : !ReadParam(aMsg, aIter, &(aResult->linearAcceleration[2]))) {
144 0 : return false;
145 : }
146 0 : return true;
147 : }
148 : };
149 :
150 : template <>
151 : struct ParamTraits<mozilla::gfx::VRFieldOfView>
152 : {
153 : typedef mozilla::gfx::VRFieldOfView paramType;
154 :
155 0 : static void Write(Message* aMsg, const paramType& aParam)
156 : {
157 0 : WriteParam(aMsg, aParam.upDegrees);
158 0 : WriteParam(aMsg, aParam.rightDegrees);
159 0 : WriteParam(aMsg, aParam.downDegrees);
160 0 : WriteParam(aMsg, aParam.leftDegrees);
161 0 : }
162 :
163 0 : static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
164 : {
165 0 : if (!ReadParam(aMsg, aIter, &(aResult->upDegrees)) ||
166 0 : !ReadParam(aMsg, aIter, &(aResult->rightDegrees)) ||
167 0 : !ReadParam(aMsg, aIter, &(aResult->downDegrees)) ||
168 0 : !ReadParam(aMsg, aIter, &(aResult->leftDegrees))) {
169 0 : return false;
170 : }
171 :
172 0 : return true;
173 : }
174 : };
175 :
176 : template <>
177 : struct ParamTraits<mozilla::gfx::VRControllerInfo>
178 : {
179 : typedef mozilla::gfx::VRControllerInfo paramType;
180 :
181 : static void Write(Message* aMsg, const paramType& aParam)
182 : {
183 : WriteParam(aMsg, aParam.mType);
184 : WriteParam(aMsg, aParam.mControllerID);
185 : WriteParam(aMsg, aParam.mControllerName);
186 : WriteParam(aMsg, aParam.mMappingType);
187 : WriteParam(aMsg, aParam.mNumButtons);
188 : WriteParam(aMsg, aParam.mNumAxes);
189 : }
190 :
191 : static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
192 : {
193 : if (!ReadParam(aMsg, aIter, &(aResult->mType)) ||
194 : !ReadParam(aMsg, aIter, &(aResult->mControllerID)) ||
195 : !ReadParam(aMsg, aIter, &(aResult->mControllerName)) ||
196 : !ReadParam(aMsg, aIter, &(aResult->mMappingType)) ||
197 : !ReadParam(aMsg, aIter, &(aResult->mNumButtons)) ||
198 : !ReadParam(aMsg, aIter, &(aResult->mNumAxes))) {
199 : return false;
200 : }
201 :
202 : return true;
203 : }
204 : };
205 :
206 : template <>
207 : struct ParamTraits<mozilla::gfx::VRSubmitFrameResultInfo>
208 : {
209 : typedef mozilla::gfx::VRSubmitFrameResultInfo paramType;
210 :
211 0 : static void Write(Message* aMsg, const paramType& aParam)
212 : {
213 0 : WriteParam(aMsg, aParam.mBase64Image);
214 0 : WriteParam(aMsg, aParam.mFormat);
215 0 : WriteParam(aMsg, aParam.mWidth);
216 0 : WriteParam(aMsg, aParam.mHeight);
217 0 : WriteParam(aMsg, aParam.mFrameNum);
218 0 : }
219 :
220 0 : static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
221 : {
222 0 : if (!ReadParam(aMsg, aIter, &(aResult->mBase64Image)) ||
223 0 : !ReadParam(aMsg, aIter, &(aResult->mFormat)) ||
224 0 : !ReadParam(aMsg, aIter, &(aResult->mWidth)) ||
225 0 : !ReadParam(aMsg, aIter, &(aResult->mHeight)) ||
226 0 : !ReadParam(aMsg, aIter, &(aResult->mFrameNum))) {
227 0 : return false;
228 : }
229 :
230 0 : return true;
231 : }
232 : };
233 :
234 : } // namespace IPC
235 :
236 : #endif // mozilla_gfx_vr_VRMessageUtils_h
|