rev |
line source |
nuclear@0
|
1 /************************************************************************************
|
nuclear@0
|
2
|
nuclear@0
|
3 Filename : Service_NetSessionCommon.cpp
|
nuclear@0
|
4 Content : Server for service interface
|
nuclear@0
|
5 Created : June 12, 2014
|
nuclear@0
|
6 Authors : Kevin Jenkins, Chris Taylor
|
nuclear@0
|
7
|
nuclear@0
|
8 Copyright : Copyright 2014 Oculus VR, LLC All Rights reserved.
|
nuclear@0
|
9
|
nuclear@0
|
10 Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License");
|
nuclear@0
|
11 you may not use the Oculus VR Rift SDK except in compliance with the License,
|
nuclear@0
|
12 which is provided at the time of installation or download, or which
|
nuclear@0
|
13 otherwise accompanies this software in either electronic or hard copy form.
|
nuclear@0
|
14
|
nuclear@0
|
15 You may obtain a copy of the License at
|
nuclear@0
|
16
|
nuclear@0
|
17 http://www.oculusvr.com/licenses/LICENSE-3.2
|
nuclear@0
|
18
|
nuclear@0
|
19 Unless required by applicable law or agreed to in writing, the Oculus VR SDK
|
nuclear@0
|
20 distributed under the License is distributed on an "AS IS" BASIS,
|
nuclear@0
|
21 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
nuclear@0
|
22 See the License for the specific language governing permissions and
|
nuclear@0
|
23 limitations under the License.
|
nuclear@0
|
24
|
nuclear@0
|
25 ************************************************************************************/
|
nuclear@0
|
26
|
nuclear@0
|
27 #include "Service_NetSessionCommon.h"
|
nuclear@0
|
28 #include "../OVR_Stereo.h"
|
nuclear@0
|
29
|
nuclear@0
|
30 namespace OVR { namespace Service {
|
nuclear@0
|
31
|
nuclear@0
|
32
|
nuclear@0
|
33 //// NetSessionCommon
|
nuclear@0
|
34
|
nuclear@0
|
35 NetSessionCommon::NetSessionCommon() :
|
nuclear@0
|
36 Terminated(false)
|
nuclear@0
|
37 {
|
nuclear@0
|
38 pSession = new Net::Session;
|
nuclear@0
|
39 OVR_ASSERT(pSession != NULL);
|
nuclear@0
|
40
|
nuclear@0
|
41 pRPC = new Net::Plugins::RPC1;
|
nuclear@0
|
42 OVR_ASSERT(pRPC != NULL);
|
nuclear@0
|
43
|
nuclear@0
|
44 pSession->AddSessionListener(pRPC);
|
nuclear@0
|
45 }
|
nuclear@0
|
46
|
nuclear@0
|
47 NetSessionCommon::~NetSessionCommon()
|
nuclear@0
|
48 {
|
nuclear@0
|
49 if (pSession)
|
nuclear@0
|
50 {
|
nuclear@0
|
51 delete pSession;
|
nuclear@0
|
52 pSession = NULL;
|
nuclear@0
|
53 }
|
nuclear@0
|
54 if (pRPC)
|
nuclear@0
|
55 {
|
nuclear@0
|
56 delete pRPC;
|
nuclear@0
|
57 pRPC = NULL;
|
nuclear@0
|
58 }
|
nuclear@0
|
59
|
nuclear@0
|
60 Terminated = true;
|
nuclear@0
|
61
|
nuclear@0
|
62 OVR_ASSERT(IsFinished());
|
nuclear@0
|
63 }
|
nuclear@0
|
64
|
nuclear@0
|
65 void NetSessionCommon::onSystemDestroy()
|
nuclear@0
|
66 {
|
nuclear@0
|
67 Terminated = true;
|
nuclear@0
|
68
|
nuclear@0
|
69 Join();
|
nuclear@0
|
70
|
nuclear@0
|
71 Release();
|
nuclear@0
|
72 }
|
nuclear@0
|
73
|
nuclear@0
|
74 void NetSessionCommon::onThreadDestroy()
|
nuclear@0
|
75 {
|
nuclear@0
|
76 Terminated = true;
|
nuclear@0
|
77 if (pSession)
|
nuclear@0
|
78 {
|
nuclear@0
|
79 pSession->Shutdown();
|
nuclear@0
|
80 }
|
nuclear@0
|
81 }
|
nuclear@0
|
82
|
nuclear@0
|
83 void NetSessionCommon::SerializeHMDInfo(Net::BitStream *bitStream, HMDInfo* hmdInfo)
|
nuclear@0
|
84 {
|
nuclear@0
|
85 bitStream->Write(hmdInfo->ProductName);
|
nuclear@0
|
86 bitStream->Write(hmdInfo->Manufacturer);
|
nuclear@0
|
87
|
nuclear@0
|
88 int32_t w = hmdInfo->Version;
|
nuclear@0
|
89 bitStream->Write(w);
|
nuclear@0
|
90
|
nuclear@0
|
91 w = hmdInfo->HmdType;
|
nuclear@0
|
92 bitStream->Write(w);
|
nuclear@0
|
93
|
nuclear@0
|
94 w = hmdInfo->ResolutionInPixels.w;
|
nuclear@0
|
95 bitStream->Write(w);
|
nuclear@0
|
96
|
nuclear@0
|
97 w = hmdInfo->ResolutionInPixels.h;
|
nuclear@0
|
98 bitStream->Write(w);
|
nuclear@0
|
99
|
nuclear@0
|
100 w = hmdInfo->ShimInfo.DeviceNumber;
|
nuclear@0
|
101 bitStream->Write(w);
|
nuclear@0
|
102
|
nuclear@0
|
103 w = hmdInfo->ShimInfo.NativeWidth;
|
nuclear@0
|
104 bitStream->Write(w);
|
nuclear@0
|
105
|
nuclear@0
|
106 w = hmdInfo->ShimInfo.NativeHeight;
|
nuclear@0
|
107 bitStream->Write(w);
|
nuclear@0
|
108
|
nuclear@0
|
109 w = hmdInfo->ShimInfo.Rotation;
|
nuclear@0
|
110 bitStream->Write(w);
|
nuclear@0
|
111
|
nuclear@0
|
112 bitStream->Write(hmdInfo->ScreenSizeInMeters.w);
|
nuclear@0
|
113 bitStream->Write(hmdInfo->ScreenSizeInMeters.h);
|
nuclear@0
|
114 bitStream->Write(hmdInfo->ScreenGapSizeInMeters);
|
nuclear@0
|
115 bitStream->Write(hmdInfo->CenterFromTopInMeters);
|
nuclear@0
|
116 bitStream->Write(hmdInfo->LensSeparationInMeters);
|
nuclear@0
|
117
|
nuclear@0
|
118 w = hmdInfo->DesktopX;
|
nuclear@0
|
119 bitStream->Write(w);
|
nuclear@0
|
120
|
nuclear@0
|
121 w = hmdInfo->DesktopY;
|
nuclear@0
|
122 bitStream->Write(w);
|
nuclear@0
|
123
|
nuclear@0
|
124 w = hmdInfo->Shutter.Type;
|
nuclear@0
|
125 bitStream->Write(w);
|
nuclear@0
|
126
|
nuclear@0
|
127 bitStream->Write(hmdInfo->Shutter.VsyncToNextVsync);
|
nuclear@0
|
128 bitStream->Write(hmdInfo->Shutter.VsyncToFirstScanline);
|
nuclear@0
|
129 bitStream->Write(hmdInfo->Shutter.FirstScanlineToLastScanline);
|
nuclear@0
|
130 bitStream->Write(hmdInfo->Shutter.PixelSettleTime);
|
nuclear@0
|
131 bitStream->Write(hmdInfo->Shutter.PixelPersistence);
|
nuclear@0
|
132 bitStream->Write(hmdInfo->DisplayDeviceName);
|
nuclear@0
|
133
|
nuclear@0
|
134 w = hmdInfo->DisplayId;
|
nuclear@0
|
135 bitStream->Write(w);
|
nuclear@0
|
136
|
nuclear@0
|
137 bitStream->Write(hmdInfo->PrintedSerial);
|
nuclear@0
|
138
|
nuclear@0
|
139 uint8_t b = hmdInfo->InCompatibilityMode ? 1 : 0;
|
nuclear@0
|
140 bitStream->Write(b);
|
nuclear@0
|
141
|
nuclear@0
|
142 w = hmdInfo->VendorId;
|
nuclear@0
|
143 bitStream->Write(w);
|
nuclear@0
|
144
|
nuclear@0
|
145 w = hmdInfo->ProductId;
|
nuclear@0
|
146 bitStream->Write(w);
|
nuclear@0
|
147
|
nuclear@0
|
148 bitStream->Write(hmdInfo->CameraFrustumFarZInMeters);
|
nuclear@0
|
149 bitStream->Write(hmdInfo->CameraFrustumHFovInRadians);
|
nuclear@0
|
150 bitStream->Write(hmdInfo->CameraFrustumNearZInMeters);
|
nuclear@0
|
151 bitStream->Write(hmdInfo->CameraFrustumVFovInRadians);
|
nuclear@0
|
152
|
nuclear@0
|
153 w = hmdInfo->FirmwareMajor;
|
nuclear@0
|
154 bitStream->Write(w);
|
nuclear@0
|
155
|
nuclear@0
|
156 w = hmdInfo->FirmwareMinor;
|
nuclear@0
|
157 bitStream->Write(w);
|
nuclear@0
|
158
|
nuclear@0
|
159 bitStream->Write(hmdInfo->PelOffsetR.x);
|
nuclear@0
|
160 bitStream->Write(hmdInfo->PelOffsetR.y);
|
nuclear@0
|
161 bitStream->Write(hmdInfo->PelOffsetB.x);
|
nuclear@0
|
162 bitStream->Write(hmdInfo->PelOffsetB.y);
|
nuclear@0
|
163
|
nuclear@0
|
164 // Important please read before modifying!
|
nuclear@0
|
165 // ----------------------------------------------------
|
nuclear@0
|
166 // Please add new serialized data to the end, here.
|
nuclear@0
|
167 // Otherwise we will break backwards compatibility
|
nuclear@0
|
168 // and e.g. 0.4.4 runtime will not work with 0.4.3 SDK.
|
nuclear@0
|
169
|
nuclear@0
|
170 // Please also update the DeserializeHMDInfo() function
|
nuclear@0
|
171 // below also and make sure that the members you added
|
nuclear@0
|
172 // are initialized properly in the HMDInfo constructor.
|
nuclear@0
|
173
|
nuclear@0
|
174 // Note that whenever new fields are added here you
|
nuclear@0
|
175 // should also update the minor version of the RPC
|
nuclear@0
|
176 // protocol in OVR_Session.h so that clients fail at
|
nuclear@0
|
177 // a version check instead of when this data is
|
nuclear@0
|
178 // found to be truncated from the server.
|
nuclear@0
|
179 }
|
nuclear@0
|
180
|
nuclear@0
|
181 bool NetSessionCommon::DeserializeHMDInfo(Net::BitStream *bitStream, HMDInfo* hmdInfo)
|
nuclear@0
|
182 {
|
nuclear@0
|
183 bitStream->Read(hmdInfo->ProductName);
|
nuclear@0
|
184 bitStream->Read(hmdInfo->Manufacturer);
|
nuclear@0
|
185
|
nuclear@0
|
186 int32_t w = 0;
|
nuclear@0
|
187 if (!bitStream->Read(w))
|
nuclear@0
|
188 {
|
nuclear@0
|
189 // This indicates that no HMD could be found
|
nuclear@0
|
190 return false;
|
nuclear@0
|
191 }
|
nuclear@0
|
192 hmdInfo->Version = w;
|
nuclear@0
|
193
|
nuclear@0
|
194 bitStream->Read(w);
|
nuclear@0
|
195 hmdInfo->HmdType = (HmdTypeEnum)w;
|
nuclear@0
|
196
|
nuclear@0
|
197 bitStream->Read(w);
|
nuclear@0
|
198 hmdInfo->ResolutionInPixels.w = w;
|
nuclear@0
|
199
|
nuclear@0
|
200 bitStream->Read(w);
|
nuclear@0
|
201 hmdInfo->ResolutionInPixels.h = w;
|
nuclear@0
|
202
|
nuclear@0
|
203 bitStream->Read(w);
|
nuclear@0
|
204 hmdInfo->ShimInfo.DeviceNumber = w;
|
nuclear@0
|
205
|
nuclear@0
|
206 bitStream->Read(w);
|
nuclear@0
|
207 hmdInfo->ShimInfo.NativeWidth = w;
|
nuclear@0
|
208
|
nuclear@0
|
209 bitStream->Read(w);
|
nuclear@0
|
210 hmdInfo->ShimInfo.NativeHeight = w;
|
nuclear@0
|
211
|
nuclear@0
|
212 bitStream->Read(w);
|
nuclear@0
|
213 hmdInfo->ShimInfo.Rotation = w;
|
nuclear@0
|
214
|
nuclear@0
|
215 bitStream->Read(hmdInfo->ScreenSizeInMeters.w);
|
nuclear@0
|
216 bitStream->Read(hmdInfo->ScreenSizeInMeters.h);
|
nuclear@0
|
217 bitStream->Read(hmdInfo->ScreenGapSizeInMeters);
|
nuclear@0
|
218 bitStream->Read(hmdInfo->CenterFromTopInMeters);
|
nuclear@0
|
219 bitStream->Read(hmdInfo->LensSeparationInMeters);
|
nuclear@0
|
220
|
nuclear@0
|
221 bitStream->Read(w);
|
nuclear@0
|
222 hmdInfo->DesktopX = w;
|
nuclear@0
|
223
|
nuclear@0
|
224 bitStream->Read(w);
|
nuclear@0
|
225 hmdInfo->DesktopY = w;
|
nuclear@0
|
226
|
nuclear@0
|
227 bitStream->Read(w);
|
nuclear@0
|
228 hmdInfo->Shutter.Type = (HmdShutterTypeEnum)w;
|
nuclear@0
|
229
|
nuclear@0
|
230 bitStream->Read(hmdInfo->Shutter.VsyncToNextVsync);
|
nuclear@0
|
231 bitStream->Read(hmdInfo->Shutter.VsyncToFirstScanline);
|
nuclear@0
|
232 bitStream->Read(hmdInfo->Shutter.FirstScanlineToLastScanline);
|
nuclear@0
|
233 bitStream->Read(hmdInfo->Shutter.PixelSettleTime);
|
nuclear@0
|
234 bitStream->Read(hmdInfo->Shutter.PixelPersistence);
|
nuclear@0
|
235 bitStream->Read(hmdInfo->DisplayDeviceName);
|
nuclear@0
|
236
|
nuclear@0
|
237 bitStream->Read(w);
|
nuclear@0
|
238 hmdInfo->DisplayId = w;
|
nuclear@0
|
239
|
nuclear@0
|
240 bitStream->Read(hmdInfo->PrintedSerial);
|
nuclear@0
|
241
|
nuclear@0
|
242 uint8_t b = 0;
|
nuclear@0
|
243 bitStream->Read(b);
|
nuclear@0
|
244 hmdInfo->InCompatibilityMode = (b != 0);
|
nuclear@0
|
245
|
nuclear@0
|
246 bitStream->Read(w);
|
nuclear@0
|
247 hmdInfo->VendorId = w;
|
nuclear@0
|
248
|
nuclear@0
|
249 bitStream->Read(w);
|
nuclear@0
|
250 hmdInfo->ProductId = w;
|
nuclear@0
|
251
|
nuclear@0
|
252 bitStream->Read(hmdInfo->CameraFrustumFarZInMeters);
|
nuclear@0
|
253 bitStream->Read(hmdInfo->CameraFrustumHFovInRadians);
|
nuclear@0
|
254 bitStream->Read(hmdInfo->CameraFrustumNearZInMeters);
|
nuclear@0
|
255 bitStream->Read(hmdInfo->CameraFrustumVFovInRadians);
|
nuclear@0
|
256
|
nuclear@0
|
257 bitStream->Read(w);
|
nuclear@0
|
258 hmdInfo->FirmwareMajor = w;
|
nuclear@0
|
259
|
nuclear@0
|
260 if (!bitStream->Read(w))
|
nuclear@0
|
261 {
|
nuclear@0
|
262 OVR_ASSERT(false);
|
nuclear@0
|
263 return false;
|
nuclear@0
|
264 }
|
nuclear@0
|
265 hmdInfo->FirmwareMinor = w;
|
nuclear@0
|
266
|
nuclear@0
|
267 bitStream->Read(hmdInfo->PelOffsetR.x);
|
nuclear@0
|
268 bitStream->Read(hmdInfo->PelOffsetR.y);
|
nuclear@0
|
269 bitStream->Read(hmdInfo->PelOffsetB.x);
|
nuclear@0
|
270 if (!bitStream->Read(hmdInfo->PelOffsetB.y))
|
nuclear@0
|
271 {
|
nuclear@0
|
272 OVR_ASSERT(false);
|
nuclear@0
|
273 return false;
|
nuclear@0
|
274 }
|
nuclear@0
|
275
|
nuclear@0
|
276 // Important please read before modifying!
|
nuclear@0
|
277 // ----------------------------------------------------
|
nuclear@0
|
278 // Please add new serialized data to the end, here.
|
nuclear@0
|
279 // Otherwise we will break backwards compatibility
|
nuclear@0
|
280 // and e.g. 0.4.4 runtime will not work with 0.4.3 SDK.
|
nuclear@0
|
281
|
nuclear@0
|
282 // Be sure to check that the very last one read properly
|
nuclear@0
|
283 // since HMD Info truncation should be caught here.
|
nuclear@0
|
284
|
nuclear@0
|
285 return true;
|
nuclear@0
|
286 }
|
nuclear@0
|
287
|
nuclear@0
|
288 // Prefix key names with this to pass through to server
|
nuclear@0
|
289 static const char* BypassPrefix = "server:";
|
nuclear@0
|
290
|
nuclear@0
|
291 static const char* KeyNames[][NetSessionCommon::ENumTypes] = {
|
nuclear@0
|
292 /* EGetStringValue */ { "CameraSerial", "CameraUUID", 0 },
|
nuclear@0
|
293 /* EGetBoolValue */ { "ReleaseDK2Sensors", "ReleaseLegacySensors", 0 },
|
nuclear@0
|
294 /* EGetIntValue */ { 0 },
|
nuclear@0
|
295 /* EGetNumberValue */{ "CenterPupilDepth", "LoggingMask", 0 },
|
nuclear@0
|
296 /* EGetNumberValues */{ "NeckModelVector3f", 0 },
|
nuclear@0
|
297 /* ESetStringValue */ { 0 },
|
nuclear@0
|
298 /* ESetBoolValue */ { "ReleaseDK2Sensors", "ReleaseLegacySensors", 0 },
|
nuclear@0
|
299 /* ESetIntValue */ { 0 },
|
nuclear@0
|
300 /* ESetNumberValue */{ "CenterPupilDepth", "LoggingMask", 0 },
|
nuclear@0
|
301 /* ESetNumberValues */{ "NeckModelVector3f", 0 },
|
nuclear@0
|
302 };
|
nuclear@0
|
303
|
nuclear@0
|
304 bool IsInStringArray(const char* a[], const char* key)
|
nuclear@0
|
305 {
|
nuclear@0
|
306 for (int i = 0; a[i]; ++i)
|
nuclear@0
|
307 {
|
nuclear@0
|
308 if (OVR_strcmp(a[i], key) == 0)
|
nuclear@0
|
309 return true;
|
nuclear@0
|
310 }
|
nuclear@0
|
311
|
nuclear@0
|
312 return false;
|
nuclear@0
|
313 }
|
nuclear@0
|
314
|
nuclear@0
|
315 const char *NetSessionCommon::FilterKeyPrefix(const char* key)
|
nuclear@0
|
316 {
|
nuclear@0
|
317 // If key starts with BypassPrefix,
|
nuclear@0
|
318 if (strstr(key, BypassPrefix) == key)
|
nuclear@0
|
319 {
|
nuclear@0
|
320 key += strlen(BypassPrefix);
|
nuclear@0
|
321 }
|
nuclear@0
|
322
|
nuclear@0
|
323 return key;
|
nuclear@0
|
324 }
|
nuclear@0
|
325
|
nuclear@0
|
326 bool NetSessionCommon::IsServiceProperty(EGetterSetters e, const char* key)
|
nuclear@0
|
327 {
|
nuclear@0
|
328 if ((e >= 0 && e < ENumTypes) && IsInStringArray(KeyNames[e], key))
|
nuclear@0
|
329 {
|
nuclear@0
|
330 return true;
|
nuclear@0
|
331 }
|
nuclear@0
|
332
|
nuclear@0
|
333 // If key starts with BypassPrefix,
|
nuclear@0
|
334 if (strstr(key, BypassPrefix) == key)
|
nuclear@0
|
335 {
|
nuclear@0
|
336 return true;
|
nuclear@0
|
337 }
|
nuclear@0
|
338
|
nuclear@0
|
339 return false;
|
nuclear@0
|
340 }
|
nuclear@0
|
341
|
nuclear@0
|
342
|
nuclear@0
|
343 }} // namespace OVR::Service
|