psmovebridge 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- psmovebridge-0.1.0/LICENSE +21 -0
- psmovebridge-0.1.0/PKG-INFO +13 -0
- psmovebridge-0.1.0/README.md +155 -0
- psmovebridge-0.1.0/psmovebridge/__init__.py +1 -0
- psmovebridge-0.1.0/psmovebridge/client.py +172 -0
- psmovebridge-0.1.0/psmovebridge/protocol_pb2.py +310 -0
- psmovebridge-0.1.0/psmovebridge/tracker.py +72 -0
- psmovebridge-0.1.0/psmovebridge.egg-info/PKG-INFO +13 -0
- psmovebridge-0.1.0/psmovebridge.egg-info/SOURCES.txt +12 -0
- psmovebridge-0.1.0/psmovebridge.egg-info/dependency_links.txt +1 -0
- psmovebridge-0.1.0/psmovebridge.egg-info/requires.txt +1 -0
- psmovebridge-0.1.0/psmovebridge.egg-info/top_level.txt +1 -0
- psmovebridge-0.1.0/setup.cfg +4 -0
- psmovebridge-0.1.0/setup.py +13 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yohan Konan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: psmovebridge
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Asynchronous Python client and OpenTrack UDP bridge for PSMoveServiceEx.
|
|
5
|
+
Author: Yohan KONAN
|
|
6
|
+
Requires-Python: >=3.8
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Dist: protobuf>=3.20.0
|
|
9
|
+
Dynamic: author
|
|
10
|
+
Dynamic: license-file
|
|
11
|
+
Dynamic: requires-dist
|
|
12
|
+
Dynamic: requires-python
|
|
13
|
+
Dynamic: summary
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# PSMoveBridge
|
|
2
|
+
|
|
3
|
+
**PSMoveBridge** is an asynchronous, lightweight Python library engineered to interface directly with **PSMoveServiceEx** via TCP and UDP sockets. It receives real-time 6DoF / 3DoF positional tracking streams and seamlessly relays them to external applications such as OpenTrack, FreeTrack, etc...
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🛠️ Features
|
|
8
|
+
|
|
9
|
+
* **Dual-Mode TCP/UDP Protocol:**
|
|
10
|
+
* **TCP (Port 9512):** Handshake negotiation, session connection ID retrieval, subscription requests, and ACK handling.
|
|
11
|
+
* **UDP (Port 9512):** High-frequency, low-latency stream of serialized `DeviceOutputDataFrame` packets.
|
|
12
|
+
* **Built-in Protobuf Serialization:** Direct parsing of native PSMoveServiceEx Protobuf objects (`hmd_data_packet`, `virtual_hmd_state`).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 📦 Project Architecture
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
psmovebridge/
|
|
20
|
+
├── psmovebridge/
|
|
21
|
+
│ ├── __init__.py
|
|
22
|
+
│ ├── client.py # PSMoveClient: Socket manager and event loop
|
|
23
|
+
│ ├── tracker.py # HMDData: Pose data abstraction and state updates
|
|
24
|
+
│ └── protocol_pb2.py # Compiled PSMoveServiceEx Protobuf bindings
|
|
25
|
+
├── examples/
|
|
26
|
+
│ └── opentrack_example.py # Binary UDP packet relay for OpenTrack
|
|
27
|
+
├── .gitignore # Git exclusion rules
|
|
28
|
+
├── LICENSE # MIT License
|
|
29
|
+
├── README.md
|
|
30
|
+
└── setup.py # Package installation configuration
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 🚀 Installation
|
|
37
|
+
|
|
38
|
+
### Option 1: Via PyPI (Recommended)
|
|
39
|
+
|
|
40
|
+
Once published, you can install the latest stable version of `psmovebridge` directly from PyPI:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pip install psmovebridge
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Option 2: From Source (Local / Development)
|
|
50
|
+
|
|
51
|
+
If you want to contribute to the project, run the latest code, or modify the library locally:
|
|
52
|
+
|
|
53
|
+
1. **Clone the repository:**
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git clone https://github.com/fullyohan/psmovebridge.git
|
|
57
|
+
cd psmovebridge
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
2. **Install in editable mode:**
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pip install -e .
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
> **Note:** The `-e` (editable) flag links the package directly to your source directory. Any changes made to the code inside `psmovebridge/` will immediately reflect across your environment without needing a reinstall.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 💻 Usage Examples
|
|
75
|
+
|
|
76
|
+
### 1. OpenTrack Bridge (UDP Relay)
|
|
77
|
+
|
|
78
|
+
This script intercepts HMD 0's pose from PSMoveServiceEx and forwards it over UDP in OpenTrack's expected binary format (Port 4242):
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
import socket
|
|
82
|
+
import struct
|
|
83
|
+
from psmovebridge import PSMoveClient
|
|
84
|
+
|
|
85
|
+
# OpenTrack socket settings
|
|
86
|
+
OPENTRACK_IP = "127.0.0.1"
|
|
87
|
+
OPENTRACK_PORT = 4242
|
|
88
|
+
sock_opentrack = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def process_pose(hmd):
|
|
92
|
+
# Extract coordinates (x, y, z) and Euler angles (Yaw, Pitch, Roll)
|
|
93
|
+
x, y, z = hmd.position.x, hmd.position.y, hmd.position.z
|
|
94
|
+
yaw, pitch, roll = hmd.orientation.yaw, hmd.orientation.pitch, hmd.orientation.roll
|
|
95
|
+
|
|
96
|
+
# Pack binary payload expected by OpenTrack's "UDP over network" input (6 x float64 / double)
|
|
97
|
+
payload = struct.pack("dddddd", x, y, z, yaw, pitch, roll)
|
|
98
|
+
sock_opentrack.sendto(payload, (OPENTRACK_IP, OPENTRACK_PORT))
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def main():
|
|
102
|
+
client = PSMoveClient(ip="127.0.0.1", port=9512)
|
|
103
|
+
|
|
104
|
+
print("[PSMoveBridge] Connecting to service...")
|
|
105
|
+
client.connect()
|
|
106
|
+
|
|
107
|
+
print("[PSMoveBridge] Subscribing to HMD ID 0 stream...")
|
|
108
|
+
client.subscribe_hmd(hmd_id=0)
|
|
109
|
+
|
|
110
|
+
print("[PSMoveBridge] Streaming active. Press Ctrl+C to stop.")
|
|
111
|
+
client.listen(callback=process_pose)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
if __name__ == "__main__":
|
|
115
|
+
main()
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 2. Basic Console Monitoring
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
from psmovebridge import PSMoveClient
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def print_hmd_info(hmd_data):
|
|
126
|
+
pos = hmd_data.position
|
|
127
|
+
print(f"\r[HMD] Pos -> X: {pos.x:.2f} | Y: {pos.y:.2f} | Z: {pos.z:.2f}", end="")
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
client = PSMoveClient()
|
|
131
|
+
client.connect()
|
|
132
|
+
client.subscribe_hmd(0)
|
|
133
|
+
client.listen(callback=print_hmd_info)
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## ⚙️ Protocol & Handshake Breakdown
|
|
140
|
+
|
|
141
|
+
The client executes the following sequence during initialization:
|
|
142
|
+
|
|
143
|
+
1. **Local UDP Binding:** Binds an ephemeral port and applies `SIO_UDP_CONNRESET` fix for Windows stability.
|
|
144
|
+
2. **TCP Handshake:** Connects to port `9512` to receive the initial `tcp_connection_id` generated by PSMoveServiceEx.
|
|
145
|
+
3. **UDP Binding Packet:** Transmits a `DeviceInputDataFrame` over UDP containing the assigned `tcp_connection_id` to link the UDP socket session on the server.
|
|
146
|
+
4. **Stream Subscription:** Sends a `START_HMD_DATA_STREAM` TCP request ordering the server to begin broadcasting `DeviceOutputDataFrame` UDP packets.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 📜 License & Credits
|
|
151
|
+
|
|
152
|
+
* **License:** Distributed under the [MIT License](https://github.com/fullyohan/psmovebridge/LICENSE).
|
|
153
|
+
* **Credits:** Protobuf definitions (`PSMoveProtocol.proto`) are derived from the [PSMoveServiceEx](https://github.com/Timocop/PSMoveServiceEx) project, licensed under MIT.
|
|
154
|
+
|
|
155
|
+
---
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .client import PSMoveClient
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""PSMoveClient Socket & Network Protocol Manager.
|
|
2
|
+
|
|
3
|
+
Handles dual TCP/UDP socket communication with PSMoveServiceEx, managing initial
|
|
4
|
+
handshakes, UDP binding, subscription requests, and event-driven data streaming.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import select
|
|
8
|
+
import socket
|
|
9
|
+
import struct
|
|
10
|
+
import time
|
|
11
|
+
from typing import Callable, Optional
|
|
12
|
+
|
|
13
|
+
from psmovebridge import protocol_pb2 as proto
|
|
14
|
+
from .tracker import HMDData
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PSMoveClient:
|
|
18
|
+
"""Network client for interfacing with PSMoveServiceEx over TCP and UDP.
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
ip (str): Target IP address of the PSMoveServiceEx server.
|
|
22
|
+
port (int): Target TCP/UDP port (default is 9512).
|
|
23
|
+
tcp_sock (Optional[socket.socket]): TCP socket for control/handshake.
|
|
24
|
+
udp_sock (Optional[socket.socket]): UDP socket for high-frequency tracking streams.
|
|
25
|
+
connection_id (int): Session ID assigned by the server upon connection.
|
|
26
|
+
is_running (bool): State flag controlling the main event loop.
|
|
27
|
+
hmd_data (HMDData): Instance storing the parsed HMD spatial state.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, ip: str = "127.0.0.1", port: int = 9512) -> None:
|
|
31
|
+
"""Initializes the PSMoveClient instance."""
|
|
32
|
+
self.ip: str = ip
|
|
33
|
+
self.port: int = port
|
|
34
|
+
self.tcp_sock: Optional[socket.socket] = None
|
|
35
|
+
self.udp_sock: Optional[socket.socket] = None
|
|
36
|
+
self.connection_id: int = -1
|
|
37
|
+
self.is_running: bool = False
|
|
38
|
+
self.hmd_data: HMDData = HMDData()
|
|
39
|
+
|
|
40
|
+
def connect(self) -> None:
|
|
41
|
+
"""Establishes dual TCP/UDP connections and executes the service handshake.
|
|
42
|
+
|
|
43
|
+
Configures socket options (including Windows-specific SIO_UDP_CONNRESET fixes),
|
|
44
|
+
retrieves the session TCP connection ID, and registers the local UDP socket.
|
|
45
|
+
"""
|
|
46
|
+
# 1. Initialize and bind local UDP socket
|
|
47
|
+
self.udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
48
|
+
try:
|
|
49
|
+
# Fix WinError 10054: Prevents UDP socket termination when ICMP Port Unreachable is returned
|
|
50
|
+
self.udp_sock.ioctl(-1744830452, False)
|
|
51
|
+
except (AttributeError, OSError, ValueError):
|
|
52
|
+
pass
|
|
53
|
+
self.udp_sock.bind(("127.0.0.1", 0))
|
|
54
|
+
|
|
55
|
+
# 2. Establish control TCP socket connection
|
|
56
|
+
self.tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
57
|
+
self.tcp_sock.connect((self.ip, self.port))
|
|
58
|
+
|
|
59
|
+
# 3. Read initial response to extract assigned session connection_id
|
|
60
|
+
init_payload = self._recv_tcp()
|
|
61
|
+
if init_payload:
|
|
62
|
+
res = proto.Response()
|
|
63
|
+
res.ParseFromString(init_payload)
|
|
64
|
+
if hasattr(res, "result_connection_info"):
|
|
65
|
+
self.connection_id = res.result_connection_info.tcp_connection_id
|
|
66
|
+
|
|
67
|
+
# 4. Transmit UDP registration frame to pair sockets on the server side
|
|
68
|
+
input_df = proto.DeviceInputDataFrame()
|
|
69
|
+
if hasattr(input_df, "connection_id"):
|
|
70
|
+
input_df.connection_id = self.connection_id
|
|
71
|
+
elif hasattr(input_df, "tcp_connection_id"):
|
|
72
|
+
input_df.tcp_connection_id = self.connection_id
|
|
73
|
+
|
|
74
|
+
serialized_msg = input_df.SerializeToString()
|
|
75
|
+
header = struct.pack(">I", len(serialized_msg))
|
|
76
|
+
|
|
77
|
+
# Send packet burst to guarantee UDP registration
|
|
78
|
+
for _ in range(3):
|
|
79
|
+
self.udp_sock.sendto(header + serialized_msg, (self.ip, self.port))
|
|
80
|
+
time.sleep(0.01)
|
|
81
|
+
|
|
82
|
+
def subscribe_hmd(self, hmd_id: int = 0) -> None:
|
|
83
|
+
"""Sends a request over TCP to subscribe to a specific HMD data stream.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
hmd_id (int): Target HMD device identifier (default is 0).
|
|
87
|
+
"""
|
|
88
|
+
if not self.tcp_sock:
|
|
89
|
+
raise RuntimeError("TCP socket is not connected. Call connect() first.")
|
|
90
|
+
|
|
91
|
+
req = proto.Request()
|
|
92
|
+
req.type = proto.Request.RequestType.Value("START_HMD_DATA_STREAM")
|
|
93
|
+
req.request_id = 1
|
|
94
|
+
stream_req = req.request_start_hmd_data_stream
|
|
95
|
+
stream_req.hmd_id = hmd_id
|
|
96
|
+
stream_req.include_position_data = True
|
|
97
|
+
stream_req.include_raw_tracker_data = True
|
|
98
|
+
|
|
99
|
+
req_bytes = req.SerializeToString()
|
|
100
|
+
self.tcp_sock.sendall(struct.pack(">I", len(req_bytes)) + req_bytes)
|
|
101
|
+
self._recv_tcp() # Await server ACK response
|
|
102
|
+
|
|
103
|
+
def listen(self, callback: Callable[[HMDData], None]) -> None:
|
|
104
|
+
"""Main non-blocking event loop using I/O multiplexing.
|
|
105
|
+
|
|
106
|
+
Listens for incoming UDP datagrams, parses Protobuf payloads, and invokes
|
|
107
|
+
the provided callback upon valid pose updates.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
callback (Callable[[HMDData], None]): Function triggered when HMD pose updates.
|
|
111
|
+
"""
|
|
112
|
+
if not self.udp_sock or not self.tcp_sock:
|
|
113
|
+
raise RuntimeError("Sockets are not initialized. Call connect() first.")
|
|
114
|
+
|
|
115
|
+
self.is_running = True
|
|
116
|
+
try:
|
|
117
|
+
while self.is_running:
|
|
118
|
+
# Multiplex socket I/O with 50ms timeout to prevent CPU spinning
|
|
119
|
+
readable, _, _ = select.select(
|
|
120
|
+
[self.udp_sock, self.tcp_sock], [], [], 0.05
|
|
121
|
+
)
|
|
122
|
+
for s in readable:
|
|
123
|
+
if s is self.udp_sock:
|
|
124
|
+
data, _ = self.udp_sock.recvfrom(4096)
|
|
125
|
+
if len(data) > 4:
|
|
126
|
+
# Extract 4-byte big-endian framing length header
|
|
127
|
+
size = struct.unpack(">I", data[:4])[0]
|
|
128
|
+
df = proto.DeviceOutputDataFrame()
|
|
129
|
+
df.ParseFromString(data[4 : 4 + size])
|
|
130
|
+
|
|
131
|
+
if df.HasField("hmd_data_packet"):
|
|
132
|
+
if self.hmd_data.update_from_protobuf(df.hmd_data_packet):
|
|
133
|
+
callback(self.hmd_data)
|
|
134
|
+
except KeyboardInterrupt:
|
|
135
|
+
self.close()
|
|
136
|
+
|
|
137
|
+
def close(self) -> None:
|
|
138
|
+
"""Gracefully terminates sockets and stops the listening loop."""
|
|
139
|
+
self.is_running = False
|
|
140
|
+
if self.tcp_sock:
|
|
141
|
+
self.tcp_sock.close()
|
|
142
|
+
self.tcp_sock = None
|
|
143
|
+
if self.udp_sock:
|
|
144
|
+
self.udp_sock.close()
|
|
145
|
+
self.udp_sock = None
|
|
146
|
+
|
|
147
|
+
def _recv_tcp(self) -> Optional[bytes]:
|
|
148
|
+
"""Internal helper to read length-prefixed messages over TCP.
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
Optional[bytes]: The deserialized binary payload, or None on failure.
|
|
152
|
+
"""
|
|
153
|
+
if not self.tcp_sock:
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
try:
|
|
157
|
+
# Read 4-byte big-endian message length header
|
|
158
|
+
raw_len = self.tcp_sock.recv(4)
|
|
159
|
+
if not raw_len:
|
|
160
|
+
return None
|
|
161
|
+
length = struct.unpack(">I", raw_len)[0]
|
|
162
|
+
|
|
163
|
+
# Read exact payload byte count
|
|
164
|
+
payload = b""
|
|
165
|
+
while len(payload) < length:
|
|
166
|
+
chunk = self.tcp_sock.recv(length - len(payload))
|
|
167
|
+
if not chunk:
|
|
168
|
+
break
|
|
169
|
+
payload += chunk
|
|
170
|
+
return payload
|
|
171
|
+
except Exception:
|
|
172
|
+
return None
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: PSMoveProtocol.proto
|
|
5
|
+
# Protobuf Python Version: 7.35.1
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
7,
|
|
15
|
+
35,
|
|
16
|
+
1,
|
|
17
|
+
'',
|
|
18
|
+
'PSMoveProtocol.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14PSMoveProtocol.proto\x12\x0ePSMoveProtocol\"\x1d\n\x05Pixel\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\".\n\x0b\x46loatVector\x12\t\n\x01i\x18\x01 \x01(\x02\x12\t\n\x01j\x18\x02 \x01(\x02\x12\t\n\x01k\x18\x03 \x01(\x02\",\n\tIntVector\x12\t\n\x01i\x18\x01 \x01(\x05\x12\t\n\x01j\x18\x02 \x01(\x05\x12\t\n\x01k\x18\x03 \x01(\x05\"+\n\x08Position\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"(\n\x05\x45uler\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"9\n\x0bOrientation\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\x12\t\n\x01w\x18\x04 \x01(\x02\"m\n\x07\x45llipse\x12%\n\x06\x63\x65nter\x18\x01 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x15\n\rhalf_x_extent\x18\x02 \x01(\x02\x12\x15\n\rhalf_y_extent\x18\x03 \x01(\x02\x12\r\n\x05\x61ngle\x18\x04 \x01(\x02\"2\n\x07Polygon\x12\'\n\x08vertices\x18\x01 \x03(\x0b\x32\x15.PSMoveProtocol.Pixel\"N\n\tOptionSet\x12\x13\n\x0boption_name\x18\x01 \x01(\t\x12\x16\n\x0eoption_strings\x18\x02 \x03(\t\x12\x14\n\x0coption_index\x18\x03 \x01(\x05\"d\n\x04Pose\x12\x30\n\x0borientation\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x12*\n\x08position\x18\x02 \x01(\x0b\x32\x18.PSMoveProtocol.Position\"\x8e\x02\n\x17ProjectionBlacklistList\x12/\n\x02_1\x18\x01 \x01(\x0b\x32#.PSMoveProtocol.ProjectionBlacklist\x12/\n\x02_2\x18\x02 \x01(\x0b\x32#.PSMoveProtocol.ProjectionBlacklist\x12/\n\x02_3\x18\x03 \x01(\x0b\x32#.PSMoveProtocol.ProjectionBlacklist\x12/\n\x02_4\x18\x04 \x01(\x0b\x32#.PSMoveProtocol.ProjectionBlacklist\x12/\n\x02_5\x18\x05 \x01(\x0b\x32#.PSMoveProtocol.ProjectionBlacklist\"A\n\x13ProjectionBlacklist\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01w\x18\x03 \x01(\x02\x12\t\n\x01h\x18\x04 \x01(\x02\"\xd3\x01\n\x13TrackingColorPreset\x12\x35\n\ncolor_type\x18\x01 \x01(\x0e\x32!.PSMoveProtocol.TrackingColorType\x12\x12\n\nhue_center\x18\x02 \x01(\x02\x12\x11\n\thue_range\x18\x03 \x01(\x02\x12\x19\n\x11saturation_center\x18\x04 \x01(\x02\x12\x18\n\x10saturation_range\x18\x05 \x01(\x02\x12\x14\n\x0cvalue_center\x18\x06 \x01(\x02\x12\x13\n\x0bvalue_range\x18\x07 \x01(\x02\"\x9f\x82\x01\n\x07Request\x12\x12\n\nrequest_id\x18\x01 \x01(\x05\x12\x31\n\x04type\x18\x02 \x01(\x0e\x32#.PSMoveProtocol.Request.RequestType\x12U\n\x1brequest_get_controller_list\x18\x03 \x01(\x0b\x32\x30.PSMoveProtocol.Request.RequestGetControllerList\x12^\n request_start_psmove_data_stream\x18\x04 \x01(\x0b\x32\x34.PSMoveProtocol.Request.RequestStartPSMoveDataStream\x12\\\n\x1frequest_stop_psmove_data_stream\x18\x05 \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestStopPSMoveDataStream\x12\x43\n\x11reset_orientation\x18\x07 \x01(\x0b\x32(.PSMoveProtocol.Request.RequestResetPose\x12J\n\x11unpair_controller\x18\x08 \x01(\x0b\x32/.PSMoveProtocol.Request.RequestUnpairController\x12\x46\n\x0fpair_controller\x18\t \x01(\x0b\x32-.PSMoveProtocol.Request.RequestPairController\x12W\n\x18\x63\x61ncel_bluetooth_request\x18\n \x01(\x0b\x32\x35.PSMoveProtocol.Request.RequestCancelBluetoothRequest\x12Z\n\x1eset_led_tracking_color_request\x18\x0c \x01(\x0b\x32\x32.PSMoveProtocol.Request.RequestSetLEDTrackingColor\x12|\n/set_controller_magnetometer_calibration_request\x18\r \x01(\x0b\x32\x43.PSMoveProtocol.Request.RequestSetControllerMagnetometerCalibration\x12~\n0set_controller_accelerometer_calibration_request\x18\x0e \x01(\x0b\x32\x44.PSMoveProtocol.Request.RequestSetControllerAccelerometerCalibration\x12v\n,set_controller_gyroscope_calibration_request\x18\x0f \x01(\x0b\x32@.PSMoveProtocol.Request.RequestSetControllerGyroscopeCalibration\x12h\n%request_set_optical_noise_calibration\x18\x10 \x01(\x0b\x32\x39.PSMoveProtocol.Request.RequestSetOpticalNoiseCalibration\x12[\n\x1erequest_set_orientation_filter\x18\x11 \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestSetOrientationFilter\x12U\n\x1brequest_set_position_filter\x18\x12 \x01(\x0b\x32\x30.PSMoveProtocol.Request.RequestSetPositionFilter\x12j\n&request_set_controller_prediction_time\x18\x13 \x01(\x0b\x32:.PSMoveProtocol.Request.RequestSetControllerPredictionTime\x12]\n\x1frequest_set_attached_controller\x18\x14 \x01(\x0b\x32\x34.PSMoveProtocol.Request.RequestSetAttachedController\x12Q\n\x19request_set_gamepad_index\x18\x15 \x01(\x0b\x32..PSMoveProtocol.Request.RequestSetGamepadIndex\x12|\n0request_set_controller_data_stream_tracker_index\x18\x16 \x01(\x0b\x32\x42.PSMoveProtocol.Request.RequestSetControllerDataStreamTrackerIndex\x12U\n\x1brequest_set_controller_hand\x18\x17 \x01(\x0b\x32\x30.PSMoveProtocol.Request.RequestSetControllerHand\x12`\n!request_start_tracker_data_stream\x18\x18 \x01(\x0b\x32\x35.PSMoveProtocol.Request.RequestStartTrackerDataStream\x12^\n request_stop_tracker_data_stream\x18\x19 \x01(\x0b\x32\x34.PSMoveProtocol.Request.RequestStopTrackerDataStream\x12W\n\x1crequest_get_tracker_settings\x18\x1a \x01(\x0b\x32\x31.PSMoveProtocol.Request.RequestGetTrackerSettings\x12W\n\x1crequest_set_tracker_exposure\x18\x1b \x01(\x0b\x32\x31.PSMoveProtocol.Request.RequestSetTrackerExposure\x12O\n\x18request_set_tracker_gain\x18\x1c \x01(\x0b\x32-.PSMoveProtocol.Request.RequestSetTrackerGain\x12S\n\x1arequest_set_tracker_option\x18\x1d \x01(\x0b\x32/.PSMoveProtocol.Request.RequestSetTrackerOption\x12^\n request_set_tracker_color_preset\x18\x1e \x01(\x0b\x32\x34.PSMoveProtocol.Request.RequestSetTrackerColorPreset\x12[\n\x1erequest_set_tracker_intrinsics\x18\x1f \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestSetTrackerIntrinsics\x12O\n\x18request_set_tracker_pose\x18 \x01(\x0b\x32-.PSMoveProtocol.Request.RequestSetTrackerPose\x12]\n\x1frequest_reload_tracker_settings\x18! \x01(\x0b\x32\x34.PSMoveProtocol.Request.RequestReloadTrackerSettings\x12W\n\x1crequest_save_tracker_profile\x18\" \x01(\x0b\x32\x31.PSMoveProtocol.Request.RequestSaveTrackerProfile\x12Y\n\x1drequest_apply_tracker_profile\x18# \x01(\x0b\x32\x32.PSMoveProtocol.Request.RequestApplyTrackerProfile\x12X\n\x1drequest_start_hmd_data_stream\x18$ \x01(\x0b\x32\x31.PSMoveProtocol.Request.RequestStartHmdDataStream\x12V\n\x1crequest_stop_hmd_data_stream\x18% \x01(\x0b\x32\x30.PSMoveProtocol.Request.RequestStopHmdDataStream\x12\x61\n\"set_hmd_led_tracking_color_request\x18& \x01(\x0b\x32\x35.PSMoveProtocol.Request.RequestSetHmdLEDTrackingColor\x12p\n)set_hmd_accelerometer_calibration_request\x18\' \x01(\x0b\x32=.PSMoveProtocol.Request.RequestSetHMDAccelerometerCalibration\x12h\n%set_hmd_gyroscope_calibration_request\x18( \x01(\x0b\x32\x39.PSMoveProtocol.Request.RequestSetHMDGyroscopeCalibration\x12\x62\n\"request_set_hmd_orientation_filter\x18) \x01(\x0b\x32\x36.PSMoveProtocol.Request.RequestSetHMDOrientationFilter\x12\\\n\x1frequest_set_hmd_position_filter\x18* \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestSetHMDPositionFilter\x12\\\n\x1frequest_set_hmd_prediction_time\x18+ \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestSetHMDPredictionTime\x12n\n)request_set_hmd_data_stream_tracker_index\x18, \x01(\x0b\x32;.PSMoveProtocol.Request.RequestSetHMDDataStreamTrackerIndex\x12Z\n\x1erequest_set_tracker_frame_rate\x18- \x01(\x0b\x32\x32.PSMoveProtocol.Request.RequestSetTrackerFrameRate\x12\\\n\x1frequest_set_tracker_frame_width\x18. \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestSetTrackerFrameWidth\x12^\n request_set_tracker_frame_height\x18/ \x01(\x0b\x32\x34.PSMoveProtocol.Request.RequestSetTrackerFrameHeight\x12l\n\'request_set_controller_optical_tracking\x18\x30 \x01(\x0b\x32;.PSMoveProtocol.Request.RequestSetControllerOpticalTracking\x12l\n\'request_set_controller_psmove_emulation\x18\x31 \x01(\x0b\x32;.PSMoveProtocol.Request.RequestSetControllerPSmoveEmulation\x12n\n(request_set_tracker_projection_blacklist\x18\x32 \x01(\x0b\x32<.PSMoveProtocol.Request.RequestSetTrackerProjectionBlacklist\x12[\n\x1erequest_set_controller_offsets\x18\x33 \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestSetControllerOffsets\x12M\n\x17request_set_hmd_offsets\x18\x34 \x01(\x0b\x32,.PSMoveProtocol.Request.RequestSetHMDOffsets\x12Y\n\x1drequest_get_playspace_offsets\x18\x35 \x01(\x0b\x32\x32.PSMoveProtocol.Request.RequestGetPlayspaceOffsets\x12Y\n\x1drequest_set_playspace_offsets\x18\x36 \x01(\x0b\x32\x32.PSMoveProtocol.Request.RequestSetPlayspaceOffsets\x12j\n&request_set_controller_filter_settings\x18\x37 \x01(\x0b\x32:.PSMoveProtocol.Request.RequestSetControllerFilterSettings\x12\\\n\x1frequest_set_hmd_filter_settings\x18\x38 \x01(\x0b\x32\x33.PSMoveProtocol.Request.RequestSetHmdFilterSettings\x12\x87\x01\n5set_controller_magnetometer_calibration_basic_request\x18\x39 \x01(\x0b\x32H.PSMoveProtocol.Request.RequestSetControllerMagnetometerCalibrationBasic\x12\x81\x01\n2request_set_controller_orientation_prediction_time\x18: \x01(\x0b\x32\x45.PSMoveProtocol.Request.RequestSetControllerOrientationPredictionTime\x12s\n+request_set_hmd_orientation_prediction_time\x18; \x01(\x0b\x32>.PSMoveProtocol.Request.RequestSetHmdOrientationPredictionTime\x12\x85\x01\n4set_controller_accelerometer_calibration_avg_request\x18< \x01(\x0b\x32G.PSMoveProtocol.Request.RequestSetControllerAccelerometerCalibrationAvg\x12\x83\x01\n3set_controller_accelerometer_calibration_ex_request\x18= \x01(\x0b\x32\x46.PSMoveProtocol.Request.RequestSetControllerAccelerometerCalibrationEx\x12i\n&set_hmd_tracking_led_overrides_request\x18> \x01(\x0b\x32\x39.PSMoveProtocol.Request.RequestSetHmdTrackingLedOverrides\x1a;\n\x18RequestGetControllerList\x12\x1f\n\x17include_usb_controllers\x18\x01 \x01(\x08\x1a\xf2\x01\n\x1cRequestStartPSMoveDataStream\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x1d\n\x15include_position_data\x18\x02 \x01(\x08\x12\x1c\n\x14include_physics_data\x18\x03 \x01(\x08\x12\x1f\n\x17include_raw_sensor_data\x18\x04 \x01(\x08\x12&\n\x1einclude_calibrated_sensor_data\x18\x05 \x01(\x08\x12 \n\x18include_raw_tracker_data\x18\x06 \x01(\x08\x12\x13\n\x0b\x64isable_roi\x18\x07 \x01(\x08\x1a\x34\n\x1bRequestStopPSMoveDataStream\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x1a[\n\x10RequestResetPose\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x30\n\x0borientation\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x1a\x30\n\x17RequestUnpairController\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x1a.\n\x15RequestPairController\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x1a\x36\n\x1dRequestCancelBluetoothRequest\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x1aj\n\x1aRequestSetLEDTrackingColor\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x35\n\ncolor_type\x18\x02 \x01(\x0e\x32!.PSMoveProtocol.TrackingColorType\x1a\xc7\x03\n+RequestSetControllerMagnetometerCalibration\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x33\n\x0e\x65llipse_center\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_extents\x18\x03 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_basis_x\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_basis_y\x18\x05 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_basis_z\x18\x06 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x19\n\x11\x65llipse_fit_error\x18\x07 \x01(\x02\x12:\n\x15magnetometer_identity\x18\x08 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x1d\n\x15magnetometer_variance\x18\t \x01(\x02\x1am\n,RequestSetControllerAccelerometerCalibration\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x14\n\x0cnoise_radius\x18\x02 \x01(\x02\x12\x10\n\x08variance\x18\x03 \x01(\x02\x1a\xac\x01\n(RequestSetControllerGyroscopeCalibration\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12-\n\x08raw_bias\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x10\n\x08variance\x18\x03 \x01(\x02\x12\r\n\x05\x64rift\x18\x04 \x01(\x02\x12\x19\n\x11gyro_gain_setting\x18\x05 \x01(\t\x1a\xd4\x01\n!RequestSetOpticalNoiseCalibration\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12#\n\x1bposition_variance_exp_fit_a\x18\x02 \x01(\x02\x12#\n\x1bposition_variance_exp_fit_b\x18\x03 \x01(\x02\x12&\n\x1eorientation_variance_exp_fit_a\x18\x04 \x01(\x02\x12&\n\x1eorientation_variance_exp_fit_b\x18\x05 \x01(\x02\x1aP\n\x1bRequestSetOrientationFilter\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x1a\n\x12orientation_filter\x18\x02 \x01(\t\x1aJ\n\x18RequestSetPositionFilter\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x17\n\x0fposition_filter\x18\x02 \x01(\t\x1aT\n\"RequestSetControllerPredictionTime\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x17\n\x0fprediction_time\x18\x02 \x01(\x02\x1aY\n\x1cRequestSetAttachedController\x12\x1b\n\x13\x63hild_controller_id\x18\x01 \x01(\x05\x12\x1c\n\x14parent_controller_id\x18\x02 \x01(\x05\x1a\x46\n\x16RequestSetGamepadIndex\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x15\n\rgamepad_index\x18\x02 \x01(\x05\x1aW\n*RequestSetControllerDataStreamTrackerIndex\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x12\n\ntracker_id\x18\x02 \x01(\x05\x1aj\n\x18RequestSetControllerHand\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x37\n\x0f\x63ontroller_hand\x18\x02 \x01(\x0e\x32\x1e.PSMoveProtocol.ControllerHand\x1a\x33\n\x1dRequestStartTrackerDataStream\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x1a\x32\n\x1cRequestStopTrackerDataStream\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x1a\xc8\x01\n\x19RequestGetTrackerSettings\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x11\n\tdevice_id\x18\x02 \x01(\x05\x12Y\n\x0f\x64\x65vice_category\x18\x03 \x01(\x0e\x32@.PSMoveProtocol.Request.RequestGetTrackerSettings.DeviceCategory\")\n\x0e\x44\x65viceCategory\x12\x0e\n\nCONTROLLER\x10\x00\x12\x07\n\x03HMD\x10\x01\x1aT\n\x19RequestSetTrackerExposure\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x02\x12\x14\n\x0csave_setting\x18\x03 \x01(\x08\x1aP\n\x15RequestSetTrackerGain\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x02\x12\x14\n\x0csave_setting\x18\x03 \x01(\x08\x1aX\n\x17RequestSetTrackerOption\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x13\n\x0boption_name\x18\x02 \x01(\t\x12\x14\n\x0coption_index\x18\x03 \x01(\x05\x1a\x89\x02\n\x1cRequestSetTrackerColorPreset\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x11\n\tdevice_id\x18\x02 \x01(\x05\x12\\\n\x0f\x64\x65vice_category\x18\x03 \x01(\x0e\x32\x43.PSMoveProtocol.Request.RequestSetTrackerColorPreset.DeviceCategory\x12\x39\n\x0c\x63olor_preset\x18\x04 \x01(\x0b\x32#.PSMoveProtocol.TrackingColorPreset\")\n\x0e\x44\x65viceCategory\x12\x0e\n\nCONTROLLER\x10\x00\x12\x07\n\x03HMD\x10\x01\x1a\x83\x02\n\x1bRequestSetTrackerIntrinsics\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x34\n\x15tracker_focal_lengths\x18\x02 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x36\n\x17tracker_principal_point\x18\x03 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x12\n\ntracker_k1\x18\x04 \x01(\x02\x12\x12\n\ntracker_k2\x18\x05 \x01(\x02\x12\x12\n\ntracker_k3\x18\x06 \x01(\x02\x12\x12\n\ntracker_p1\x18\x07 \x01(\x02\x12\x12\n\ntracker_p2\x18\x08 \x01(\x02\x1aO\n\x15RequestSetTrackerPose\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\"\n\x04pose\x18\x02 \x01(\x0b\x32\x14.PSMoveProtocol.Pose\x1a\x32\n\x1cRequestReloadTrackerSettings\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x1a\x46\n\x19RequestSaveTrackerProfile\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x15\n\rcontroller_id\x18\x02 \x01(\x05\x1aG\n\x1aRequestApplyTrackerProfile\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x15\n\rcontroller_id\x18\x02 \x01(\x05\x1a\xe8\x01\n\x19RequestStartHmdDataStream\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x1d\n\x15include_position_data\x18\x02 \x01(\x08\x12\x1c\n\x14include_physics_data\x18\x03 \x01(\x08\x12\x1f\n\x17include_raw_sensor_data\x18\x04 \x01(\x08\x12&\n\x1einclude_calibrated_sensor_data\x18\x05 \x01(\x08\x12 \n\x18include_raw_tracker_data\x18\x06 \x01(\x08\x12\x13\n\x0b\x64isable_roi\x18\x07 \x01(\x08\x1a*\n\x18RequestStopHmdDataStream\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x1a\x66\n\x1dRequestSetHmdLEDTrackingColor\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x35\n\ncolor_type\x18\x02 \x01(\x0e\x32!.PSMoveProtocol.TrackingColorType\x1a\x87\x01\n%RequestSetHMDAccelerometerCalibration\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x38\n\x13raw_average_gravity\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x14\n\x0craw_variance\x18\x03 \x01(\x02\x1a\x8b\x01\n!RequestSetHMDGyroscopeCalibration\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12-\n\x08raw_bias\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x14\n\x0craw_variance\x18\x03 \x01(\x02\x12\x11\n\traw_drift\x18\x04 \x01(\x02\x1aL\n\x1eRequestSetHMDOrientationFilter\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x1a\n\x12orientation_filter\x18\x02 \x01(\t\x1a\x46\n\x1bRequestSetHMDPositionFilter\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x17\n\x0fposition_filter\x18\x02 \x01(\t\x1a\x46\n\x1bRequestSetHMDPredictionTime\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x17\n\x0fprediction_time\x18\x02 \x01(\x02\x1aI\n#RequestSetHMDDataStreamTrackerIndex\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x12\n\ntracker_id\x18\x02 \x01(\x05\x1aU\n\x1aRequestSetTrackerFrameRate\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x02\x12\x14\n\x0csave_setting\x18\x03 \x01(\x08\x1aV\n\x1bRequestSetTrackerFrameWidth\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x02\x12\x14\n\x0csave_setting\x18\x03 \x01(\x08\x1aW\n\x1cRequestSetTrackerFrameHeight\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x02\x12\x14\n\x0csave_setting\x18\x03 \x01(\x08\x1aM\n#RequestSetControllerOpticalTracking\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x1aM\n#RequestSetControllerPSmoveEmulation\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x1a\x81\x01\n$RequestSetTrackerProjectionBlacklist\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x45\n\x14projection_blacklist\x18\x02 \x01(\x0b\x32\'.PSMoveProtocol.ProjectionBlacklistList\x1a\xa0\x02\n\x1bRequestSetControllerOffsets\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x31\n\x0foffset_position\x18\x02 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x12offset_orientation\x18\x03 \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12\x37\n\x18offset_world_orientation\x18\x04 \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12.\n\x0coffset_scale\x18\x05 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x1b\n\x13offset_magnetometer\x18\x06 \x01(\x02\x1a\xf5\x01\n\x14RequestSetHMDOffsets\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x31\n\x0foffset_position\x18\x02 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x12offset_orientation\x18\x03 \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12\x37\n\x18offset_world_orientation\x18\x04 \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12.\n\x0coffset_scale\x18\x05 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x1a\xa8\x01\n\x1aRequestGetPlayspaceOffsets\x12!\n\x19playspace_orientation_yaw\x18\x01 \x01(\x02\x12\x34\n\x12playspace_position\x18\x02 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x0fplayspace_scale\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x1a\xa8\x01\n\x1aRequestSetPlayspaceOffsets\x12!\n\x19playspace_orientation_yaw\x18\x01 \x01(\x02\x12\x34\n\x12playspace_position\x18\x02 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x0fplayspace_scale\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x1a\xde\x08\n\"RequestSetControllerFilterSettings\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\'\n\x1f\x66ilter_lowpassoptical_smoothing\x18\x02 \x01(\x02\x12&\n\x1e\x66ilter_lowpassoptical_distance\x18\x03 \x01(\x02\x12\"\n\x1a\x66ilter_enable_magnetometer\x18\x04 \x01(\x08\x12+\n#filter_use_passive_drift_correction\x18\x05 \x01(\x08\x12.\n&filter_passive_drift_correction_method\x18\x06 \x01(\x05\x12\x30\n(filter_passive_drift_correction_deadzone\x18\x07 \x01(\x02\x12\x38\n0filter_passive_drift_correction_gravity_deadzone\x18\x08 \x01(\x02\x12-\n%filter_passive_drift_correction_delay\x18\t \x01(\x02\x12*\n\"filter_opticaltarget_controller_id\x18\n \x01(\x05\x12 \n\x18\x66ilter_use_stabilization\x18\x0b \x01(\x08\x12&\n\x1e\x66ilter_stabilization_min_scale\x18\x0c \x01(\x02\x12\x1c\n\x14\x66ilter_madgwick_beta\x18\r \x01(\x02\x12%\n\x1d\x66ilter_madgwick_stabilization\x18\x0e \x01(\x08\x12.\n&filter_madgwick_stabilization_min_beta\x18\x0f \x01(\x02\x12\x36\n.filter_madgwick_stabilization_smoothing_factor\x18\x10 \x01(\x02\x12(\n filter_velocity_smoothing_factor\x18\x11 \x01(\x02\x12\'\n\x1f\x66ilter_angular_smoothing_factor\x18\x12 \x01(\x02\x12)\n!filter_velocity_prediction_cutoff\x18\x13 \x01(\x02\x12(\n filter_angular_prediction_cutoff\x18\x14 \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_error\x18\x15 \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_noise\x18\x16 \x01(\x02\x12-\n%filter_position_kalman_disable_cutoff\x18\x17 \x01(\x08\x12%\n\x1d\x66ilter_madgwick_smart_correct\x18\x18 \x01(\x08\x12\x19\n\x11UNUSED_4567457475\x18\x19 \x01(\x08\x12,\n$filter_magnetometer_deviation_cutoff\x18\x1a \x01(\x02\x1a\x90\x05\n\x1bRequestSetHmdFilterSettings\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\'\n\x1f\x66ilter_lowpassoptical_smoothing\x18\x02 \x01(\x02\x12&\n\x1e\x66ilter_lowpassoptical_distance\x18\x03 \x01(\x02\x12\x1c\n\x14\x66ilter_madgwick_beta\x18\x04 \x01(\x02\x12%\n\x1d\x66ilter_madgwick_stabilization\x18\x05 \x01(\x08\x12.\n&filter_madgwick_stabilization_min_beta\x18\x06 \x01(\x02\x12\x36\n.filter_madgwick_stabilization_smoothing_factor\x18\x07 \x01(\x02\x12(\n filter_velocity_smoothing_factor\x18\x08 \x01(\x02\x12\'\n\x1f\x66ilter_angular_smoothing_factor\x18\t \x01(\x02\x12)\n!filter_velocity_prediction_cutoff\x18\n \x01(\x02\x12(\n filter_angular_prediction_cutoff\x18\x0b \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_error\x18\x0c \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_noise\x18\r \x01(\x02\x12-\n%filter_position_kalman_disable_cutoff\x18\x0e \x01(\x08\x12%\n\x1d\x66ilter_madgwick_smart_correct\x18\x0f \x01(\x08\x12\x19\n\x11UNUSED_4567457475\x18\x10 \x01(\x08\x1a\xf1\x02\n0RequestSetControllerMagnetometerCalibrationBasic\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x33\n\x0e\x65llipse_center\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_extents\x18\x03 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_basis_x\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_basis_y\x18\x05 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x34\n\x0f\x65llipse_basis_z\x18\x06 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x19\n\x11\x65llipse_fit_error\x18\x07 \x01(\x02\x1a\x63\n-RequestSetControllerOrientationPredictionTime\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x1b\n\x13\x61ng_prediction_time\x18\x02 \x01(\x02\x1aU\n&RequestSetHmdOrientationPredictionTime\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x1b\n\x13\x61ng_prediction_time\x18\x02 \x01(\x02\x1a\x98\x01\n/RequestSetControllerAccelerometerCalibrationAvg\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x38\n\x13raw_average_gravity\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x14\n\x0craw_variance\x18\x03 \x01(\x02\x1a\xe4\x01\n.RequestSetControllerAccelerometerCalibrationEx\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x32\n\rscale_gravity\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x33\n\x0eoffset_gravity\x18\x03 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x32\n\rdrift_gravity\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x1a^\n!RequestSetHmdTrackingLedOverrides\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12\x12\n\nuse_custom\x18\x02 \x01(\x08\x12\x15\n\rled_overrides\x18\x03 \x01(\x05\"\xb3\x0f\n\x0bRequestType\x12\x17\n\x13GET_CONTROLLER_LIST\x10\x00\x12 \n\x1cSTART_CONTROLLER_DATA_STREAM\x10\x01\x12\x1f\n\x1bSTOP_CONTROLLER_DATA_STREAM\x10\x02\x12\x15\n\x11RESET_ORIENTATION\x10\x03\x12\x15\n\x11UNPAIR_CONTROLLER\x10\x04\x12\x13\n\x0fPAIR_CONTROLLER\x10\x05\x12\x1c\n\x18\x43\x41NCEL_BLUETOOTH_REQUEST\x10\x06\x12\x1a\n\x16SET_LED_TRACKING_COLOR\x10\x07\x12+\n\'SET_CONTROLLER_MAGNETOMETER_CALIBRATION\x10\x08\x12,\n(SET_CONTROLLER_ACCELEROMETER_CALIBRATION\x10\t\x12(\n$SET_CONTROLLER_GYROSCOPE_CALIBRATION\x10\n\x12!\n\x1dSET_OPTICAL_NOISE_CALIBRATION\x10\x0b\x12\x1a\n\x16SET_ORIENTATION_FILTER\x10\x0c\x12\x17\n\x13SET_POSITION_FILTER\x10\r\x12\"\n\x1eSET_CONTROLLER_PREDICTION_TIME\x10\x0e\x12\x1b\n\x17SET_ATTACHED_CONTROLLER\x10\x0f\x12\x15\n\x11SET_GAMEPAD_INDEX\x10\x10\x12,\n(SET_CONTROLLER_DATA_STREAM_TRACKER_INDEX\x10\x11\x12\x17\n\x13SET_CONTROLLER_HAND\x10\x12\x12\x14\n\x10GET_TRACKER_LIST\x10\x13\x12\x1d\n\x19START_TRACKER_DATA_STREAM\x10\x14\x12\x1c\n\x18STOP_TRACKER_DATA_STREAM\x10\x15\x12\x18\n\x14GET_TRACKER_SETTINGS\x10\x16\x12\x18\n\x14SET_TRACKER_EXPOSURE\x10\x17\x12\x14\n\x10SET_TRACKER_GAIN\x10\x18\x12\x16\n\x12SET_TRACKER_OPTION\x10\x19\x12\x1c\n\x18SET_TRACKER_COLOR_PRESET\x10\x1a\x12\x14\n\x10SET_TRACKER_POSE\x10\x1b\x12\x1a\n\x16SET_TRACKER_INTRINSICS\x10\x1c\x12\x1b\n\x17RELOAD_TRACKER_SETTINGS\x10\x1d\x12\x18\n\x14SAVE_TRACKER_PROFILE\x10\x1e\x12\x19\n\x15\x41PPLY_TRACKER_PROFILE\x10\x1f\x12\x1b\n\x17SEARCH_FOR_NEW_TRACKERS\x10 \x12\x1f\n\x1bGET_TRACKING_SPACE_SETTINGS\x10!\x12\x10\n\x0cGET_HMD_LIST\x10\"\x12\x19\n\x15START_HMD_DATA_STREAM\x10#\x12\x18\n\x14STOP_HMD_DATA_STREAM\x10$\x12\x1e\n\x1aSET_HMD_LED_TRACKING_COLOR\x10%\x12%\n!SET_HMD_ACCELEROMETER_CALIBRATION\x10&\x12!\n\x1dSET_HMD_GYROSCOPE_CALIBRATION\x10\'\x12\x1b\n\x17SET_HMD_PREDICTION_TIME\x10(\x12\x1e\n\x1aSET_HMD_ORIENTATION_FILTER\x10)\x12\x1b\n\x17SET_HMD_POSITION_FILTER\x10*\x12%\n!SET_HMD_DATA_STREAM_TRACKER_INDEX\x10+\x12\x17\n\x13GET_SERVICE_VERSION\x10,\x12\x1a\n\x16SET_TRACKER_FRAME_RATE\x10-\x12\x1b\n\x17SET_TRACKER_FRAME_WIDTH\x10.\x12\x1c\n\x18SET_TRACKER_FRAME_HEIGHT\x10/\x12#\n\x1fSET_CONTROLLER_OPTICAL_TRACKING\x10\x30\x12#\n\x1fSET_CONTROLLER_PSMOVE_EMULATION\x10\x31\x12#\n\x1fSET_TRACKER_PROJECTIONBLACKLIST\x10\x32\x12\x1a\n\x16SET_CONTROLLER_OFFSETS\x10\x33\x12\x13\n\x0fSET_HMD_OFFSETS\x10\x34\x12\x19\n\x15GET_PLAYSPACE_OFFSETS\x10\x35\x12\x19\n\x15SET_PLAYSPACE_OFFSETS\x10\x36\x12\"\n\x1eSET_CONTROLLER_FILTER_SETTINGS\x10\x37\x12\x1b\n\x17SET_HMD_FILTER_SETTINGS\x10\x38\x12\x31\n-SET_CONTROLLER_MAGNETOMETER_CALIBRATION_BASIC\x10\x39\x12&\n\"SET_CONTROLLER_ANG_PREDICTION_TIME\x10:\x12\x1f\n\x1bSET_HMD_ANG_PREDICTION_TIME\x10;\x12\x30\n,SET_CONTROLLER_ACCELEROMETER_CALIBRATION_AVG\x10<\x12/\n+SET_CONTROLLER_ACCELEROMETER_CALIBRATION_EX\x10=\x12\"\n\x1eSET_HMD_TRACKING_LED_OVERRIDES\x10>\"\xee<\n\x08Response\x12\x33\n\x04type\x18\x01 \x01(\x0e\x32%.PSMoveProtocol.Response.ResponseType\x12\x12\n\nrequest_id\x18\x02 \x01(\x05\x12\x38\n\x0bresult_code\x18\x03 \x01(\x0e\x32#.PSMoveProtocol.Response.ResultCode\x12M\n\x16result_connection_info\x18\x14 \x01(\x0b\x32-.PSMoveProtocol.Response.ResultConnectionInfo\x12`\n result_controller_stream_started\x18\x15 \x01(\x0b\x32\x36.PSMoveProtocol.Response.ResultControllerStreamStarted\x12M\n\x16result_controller_list\x18\x16 \x01(\x0b\x32-.PSMoveProtocol.Response.ResultControllerList\x12\x62\n!result_bluetooth_request_progress\x18\x17 \x01(\x0b\x32\x37.PSMoveProtocol.Response.ResultBluetoothRequestProgress\x12G\n\x13result_tracker_list\x18\x18 \x01(\x0b\x32*.PSMoveProtocol.Response.ResultTrackerList\x12O\n\x17result_tracker_settings\x18\x19 \x01(\x0b\x32..PSMoveProtocol.Response.ResultTrackerSettings\x12V\n\x1bresult_set_tracker_exposure\x18\x1a \x01(\x0b\x32\x31.PSMoveProtocol.Response.ResultSetTrackerExposure\x12N\n\x17result_set_tracker_gain\x18\x1b \x01(\x0b\x32-.PSMoveProtocol.Response.ResultSetTrackerGain\x12R\n\x19result_set_tracker_option\x18\x1c \x01(\x0b\x32/.PSMoveProtocol.Response.ResultSetTrackerOption\x12]\n\x1fresult_set_tracker_color_preset\x18\x1d \x01(\x0b\x32\x34.PSMoveProtocol.Response.ResultSetTrackerColorPreset\x12\\\n\x1eresult_tracking_space_settings\x18\x1e \x01(\x0b\x32\x34.PSMoveProtocol.Response.ResultTrackingSpaceSettings\x12?\n\x0fresult_hmd_list\x18\x1f \x01(\x0b\x32&.PSMoveProtocol.Response.ResultHMDList\x12M\n\x16result_service_version\x18 \x01(\x0b\x32-.PSMoveProtocol.Response.ResultServiceVersion\x12Y\n\x1dresult_set_tracker_frame_rate\x18! \x01(\x0b\x32\x32.PSMoveProtocol.Response.ResultSetTrackerFrameRate\x12[\n\x1eresult_set_tracker_frame_width\x18\" \x01(\x0b\x32\x33.PSMoveProtocol.Response.ResultSetTrackerFrameWidth\x12]\n\x1fresult_set_tracker_frame_height\x18# \x01(\x0b\x32\x34.PSMoveProtocol.Response.ResultSetTrackerFrameHeight\x12X\n\x1cresult_get_playspace_offsets\x18$ \x01(\x0b\x32\x32.PSMoveProtocol.Response.ResultGetPlayspaceOffsets\x1a\x31\n\x14ResultConnectionInfo\x12\x19\n\x11tcp_connection_id\x18\x01 \x01(\x05\x1a\x62\n\x1dResultControllerStreamStarted\x12\x41\n\x12initial_data_frame\x18\x01 \x01(\x0b\x32%.PSMoveProtocol.DeviceOutputDataFrame\x1a\x9b\x11\n\x14ResultControllerList\x12Q\n\x0b\x63ontrollers\x18\x01 \x03(\x0b\x32<.PSMoveProtocol.Response.ResultControllerList.ControllerInfo\x12\x13\n\x0bhost_serial\x18\x02 \x01(\t\x12\x15\n\rgamepad_count\x18\x03 \x01(\x05\x1a\x83\x10\n\x0e\x43ontrollerInfo\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x64\n\x0f\x63onnection_type\x18\x02 \x01(\x0e\x32K.PSMoveProtocol.Response.ResultControllerList.ControllerInfo.ConnectionType\x12\x37\n\x0f\x63ontroller_type\x18\x03 \x01(\x0e\x32\x1e.PSMoveProtocol.ControllerType\x12\x37\n\x0f\x63ontroller_hand\x18\x04 \x01(\x0e\x32\x1e.PSMoveProtocol.ControllerHand\x12>\n\x13tracking_color_type\x18\x05 \x01(\x0e\x32!.PSMoveProtocol.TrackingColorType\x12\x13\n\x0b\x64\x65vice_path\x18\x06 \x01(\t\x12\x15\n\rdevice_serial\x18\x07 \x01(\t\x12\x1c\n\x14\x61ssigned_host_serial\x18\x08 \x01(\t\x12 \n\x18parent_controller_serial\x18\t \x01(\t\x12\x18\n\x10\x66irmware_version\x18\n \x01(\x05\x12\x19\n\x11\x66irmware_revision\x18\x0b \x01(\x05\x12\x18\n\x10has_magnetometer\x18\x0c \x01(\x08\x12\x1a\n\x12orientation_filter\x18\r \x01(\t\x12\x17\n\x0fposition_filter\x18\x0e \x01(\t\x12\x19\n\x11gyro_gain_setting\x18\x0f \x01(\t\x12\x17\n\x0fprediction_time\x18\x10 \x01(\x02\x12\x15\n\rgamepad_index\x18\x11 \x01(\x05\x12\x17\n\x0fopticaltracking\x18\x12 \x01(\x08\x12\x18\n\x10psmove_emulation\x18\x13 \x01(\x08\x12\x31\n\x0foffset_position\x18\x14 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x12offset_orientation\x18\x15 \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12\x37\n\x18offset_world_orientation\x18\x16 \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12.\n\x0coffset_scale\x18\x17 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x1b\n\x13offset_magnetometer\x18\x18 \x01(\x02\x12\'\n\x1f\x66ilter_lowpassoptical_smoothing\x18\x19 \x01(\x02\x12&\n\x1e\x66ilter_lowpassoptical_distance\x18\x1a \x01(\x02\x12\"\n\x1a\x66ilter_enable_magnetometer\x18\x1b \x01(\x08\x12+\n#filter_use_passive_drift_correction\x18\x1c \x01(\x08\x12.\n&filter_passive_drift_correction_method\x18\x1d \x01(\x05\x12\x30\n(filter_passive_drift_correction_deadzone\x18\x1e \x01(\x02\x12\x38\n0filter_passive_drift_correction_gravity_deadzone\x18\x1f \x01(\x02\x12-\n%filter_passive_drift_correction_delay\x18 \x01(\x02\x12*\n\"filter_opticaltarget_controller_id\x18! \x01(\x05\x12 \n\x18\x66ilter_use_stabilization\x18\" \x01(\x08\x12&\n\x1e\x66ilter_stabilization_min_scale\x18# \x01(\x02\x12\x1b\n\x13\x61ng_prediction_time\x18$ \x01(\x02\x12\x1c\n\x14\x66ilter_madgwick_beta\x18% \x01(\x02\x12%\n\x1d\x66ilter_madgwick_stabilization\x18& \x01(\x08\x12.\n&filter_madgwick_stabilization_min_beta\x18\' \x01(\x02\x12\x36\n.filter_madgwick_stabilization_smoothing_factor\x18( \x01(\x02\x12(\n filter_velocity_smoothing_factor\x18) \x01(\x02\x12\'\n\x1f\x66ilter_angular_smoothing_factor\x18* \x01(\x02\x12)\n!filter_velocity_prediction_cutoff\x18+ \x01(\x02\x12(\n filter_angular_prediction_cutoff\x18, \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_error\x18- \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_noise\x18. \x01(\x02\x12-\n%filter_position_kalman_disable_cutoff\x18/ \x01(\x08\x12%\n\x1d\x66ilter_madgwick_smart_correct\x18\x30 \x01(\x08\x12\x19\n\x11UNUSED_4567457475\x18\x31 \x01(\x08\x12,\n$filter_magnetometer_deviation_cutoff\x18\x32 \x01(\x02\"(\n\x0e\x43onnectionType\x12\x07\n\x03USB\x10\x00\x12\r\n\tBLUETOOTH\x10\x01\x1a\x65\n\x1eResultBluetoothRequestProgress\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x17\n\x0fsteps_completed\x18\x02 \x01(\x05\x12\x13\n\x0btotal_steps\x18\x03 \x01(\x05\x1a\xcd\x05\n\x11ResultTrackerList\x12H\n\x08trackers\x18\x01 \x03(\x0b\x32\x36.PSMoveProtocol.Response.ResultTrackerList.TrackerInfo\x12\x1e\n\x16global_forward_degrees\x18\x02 \x01(\x02\x1a\xcd\x04\n\x0bTrackerInfo\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x31\n\x0ctracker_type\x18\x02 \x01(\x0e\x32\x1b.PSMoveProtocol.TrackerType\x12\x35\n\x0etracker_driver\x18\x03 \x01(\x0e\x32\x1d.PSMoveProtocol.TrackerDriver\x12\x13\n\x0b\x64\x65vice_path\x18\x04 \x01(\t\x12\x1a\n\x12shared_memory_name\x18\x05 \x01(\t\x12\x34\n\x15tracker_focal_lengths\x18\x06 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x36\n\x17tracker_principal_point\x18\x07 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x38\n\x19tracker_screen_dimensions\x18\x08 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x14\n\x0ctracker_hfov\x18\t \x01(\x02\x12\x14\n\x0ctracker_vfov\x18\n \x01(\x02\x12\x15\n\rtracker_znear\x18\x0b \x01(\x02\x12\x14\n\x0ctracker_zfar\x18\x0c \x01(\x02\x12\x12\n\ntracker_k1\x18\r \x01(\x02\x12\x12\n\ntracker_k2\x18\x0e \x01(\x02\x12\x12\n\ntracker_k3\x18\x0f \x01(\x02\x12\x12\n\ntracker_p1\x18\x10 \x01(\x02\x12\x12\n\ntracker_p2\x18\x11 \x01(\x02\x12*\n\x0ctracker_pose\x18\x12 \x01(\x0b\x32\x14.PSMoveProtocol.Pose\x1a\xa9\x02\n\x15ResultTrackerSettings\x12\x10\n\x08\x65xposure\x18\x01 \x01(\x02\x12\x0c\n\x04gain\x18\x02 \x01(\x02\x12.\n\x0boption_sets\x18\x03 \x03(\x0b\x32\x19.PSMoveProtocol.OptionSet\x12:\n\rcolor_presets\x18\x04 \x03(\x0b\x32#.PSMoveProtocol.TrackingColorPreset\x12\x12\n\nframe_rate\x18\x05 \x01(\x02\x12\x13\n\x0b\x66rame_width\x18\x06 \x01(\x02\x12\x14\n\x0c\x66rame_height\x18\x07 \x01(\x02\x12\x45\n\x14projection_blacklist\x18\x08 \x01(\x0b\x32\'.PSMoveProtocol.ProjectionBlacklistList\x1a\x30\n\x18ResultSetTrackerExposure\x12\x14\n\x0cnew_exposure\x18\x01 \x01(\x02\x1a(\n\x14ResultSetTrackerGain\x12\x10\n\x08new_gain\x18\x01 \x01(\x02\x1aG\n\x16ResultSetTrackerOption\x12\x13\n\x0boption_name\x18\x01 \x01(\t\x12\x18\n\x10new_option_index\x18\x02 \x01(\x05\x1ap\n\x1bResultSetTrackerColorPreset\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12=\n\x10new_color_preset\x18\x02 \x01(\x0b\x32#.PSMoveProtocol.TrackingColorPreset\x1a=\n\x1bResultTrackingSpaceSettings\x12\x1e\n\x16global_forward_degrees\x18\x01 \x01(\x02\x1a\xd9\t\n\rResultHMDList\x12\x43\n\x0bhmd_entries\x18\x01 \x03(\x0b\x32..PSMoveProtocol.Response.ResultHMDList.HMDInfo\x1a\x82\t\n\x07HMDInfo\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12)\n\x08hmd_type\x18\x02 \x01(\x0e\x32\x17.PSMoveProtocol.HMDType\x12>\n\x13tracking_color_type\x18\x03 \x01(\x0e\x32!.PSMoveProtocol.TrackingColorType\x12\x13\n\x0b\x64\x65vice_path\x18\x04 \x01(\t\x12\x1a\n\x12orientation_filter\x18\x05 \x01(\t\x12\x17\n\x0fposition_filter\x18\x06 \x01(\t\x12\x17\n\x0fprediction_time\x18\x07 \x01(\x02\x12\x31\n\x12offset_orientation\x18\x08 \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12\x37\n\x18offset_world_orientation\x18\t \x01(\x0b\x32\x15.PSMoveProtocol.Euler\x12\x31\n\x0foffset_position\x18\n \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12.\n\x0coffset_scale\x18\x0b \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\'\n\x1f\x66ilter_lowpassoptical_smoothing\x18\x0c \x01(\x02\x12&\n\x1e\x66ilter_lowpassoptical_distance\x18\r \x01(\x02\x12\x1b\n\x13\x61ng_prediction_time\x18\x0e \x01(\x02\x12\x1c\n\x14\x66ilter_madgwick_beta\x18\x0f \x01(\x02\x12%\n\x1d\x66ilter_madgwick_stabilization\x18\x10 \x01(\x08\x12.\n&filter_madgwick_stabilization_min_beta\x18\x11 \x01(\x02\x12\x36\n.filter_madgwick_stabilization_smoothing_factor\x18\x12 \x01(\x02\x12(\n filter_velocity_smoothing_factor\x18\x13 \x01(\x02\x12\'\n\x1f\x66ilter_angular_smoothing_factor\x18\x14 \x01(\x02\x12)\n!filter_velocity_prediction_cutoff\x18\x15 \x01(\x02\x12(\n filter_angular_prediction_cutoff\x18\x16 \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_error\x18\x17 \x01(\x02\x12$\n\x1c\x66ilter_position_kalman_noise\x18\x18 \x01(\x02\x12-\n%filter_position_kalman_disable_cutoff\x18\x19 \x01(\x08\x12%\n\x1d\x66ilter_madgwick_smart_correct\x18\x1a \x01(\x08\x12\x19\n\x11UNUSED_4567457475\x18\x1b \x01(\x08\x12#\n\x1buse_custom_optical_tracking\x18\x1c \x01(\x08\x12%\n\x1doverride_custom_tracking_leds\x18\x1d \x01(\x05\x1a\'\n\x14ResultServiceVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x1a\x33\n\x19ResultSetTrackerFrameRate\x12\x16\n\x0enew_frame_rate\x18\x01 \x01(\x02\x1a\x35\n\x1aResultSetTrackerFrameWidth\x12\x17\n\x0fnew_frame_width\x18\x01 \x01(\x02\x1a\x37\n\x1bResultSetTrackerFrameHeight\x12\x18\n\x10new_frame_height\x18\x01 \x01(\x02\x1a\xa7\x01\n\x19ResultGetPlayspaceOffsets\x12!\n\x19playspace_orientation_yaw\x18\x01 \x01(\x02\x12\x34\n\x12playspace_position\x18\x02 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x0fplayspace_scale\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\"\xa0\x05\n\x0cResponseType\x12\x12\n\x0eGENERAL_RESULT\x10\x00\x12\x13\n\x0f\x43ONNECTION_INFO\x10\x01\x12\x13\n\x0f\x43ONTROLLER_LIST\x10\x02\x12\x1d\n\x19\x43ONTROLLER_STREAM_STARTED\x10\x03\x12\x1b\n\x17\x43ONTROLLER_LIST_UPDATED\x10\x04\x12\x1c\n\x18UNPAIR_REQUEST_COMPLETED\x10\x05\x12\x1a\n\x16PAIR_REQUEST_COMPLETED\x10\x06\x12\x1e\n\x1a\x42LUETOOTH_REQUEST_PROGRESS\x10\x07\x12\x10\n\x0cTRACKER_LIST\x10\x08\x12\x18\n\x14TRACKER_LIST_UPDATED\x10\t\x12\x14\n\x10TRACKER_SETTINGS\x10\n\x12\x1c\n\x18TRACKER_EXPOSURE_UPDATED\x10\x0b\x12\x18\n\x14TRACKER_GAIN_UPDATED\x10\x0c\x12\x1a\n\x16TRACKER_OPTION_UPDATED\x10\r\x12\x1a\n\x16TRACKER_PRESET_UPDATED\x10\x0e\x12\x1b\n\x17TRACKING_SPACE_SETTINGS\x10\x0f\x12\x0c\n\x08HMD_LIST\x10\x10\x12\x14\n\x10HMD_LIST_UPDATED\x10\x11\x12\x13\n\x0fSERVICE_VERSION\x10\x12\x12\x1e\n\x1aTRACKER_FRAME_RATE_UPDATED\x10\x13\x12\x1f\n\x1bTRACKER_FRAME_WIDTH_UPDATED\x10\x14\x12 \n\x1cTRACKER_FRAME_HEIGHT_UPDATED\x10\x15\x12\x19\n\x15SYSTEM_BUTTON_PRESSED\x10\x16\x12\x19\n\x15GET_PLAYSPACE_OFFSETS\x10\x17\x12\x1b\n\x17PLAYSPACE_OFFSET_UPDATE\x10\x18\"B\n\nResultCode\x12\r\n\tRESULT_OK\x10\x00\x12\x10\n\x0cRESULT_ERROR\x10\x01\x12\x13\n\x0fRESULT_CANCELED\x10\x02\"\xe3\x42\n\x15\x44\x65viceOutputDataFrame\x12M\n\x0f\x64\x65vice_category\x18\x01 \x01(\x0e\x32\x34.PSMoveProtocol.DeviceOutputDataFrame.DeviceCategory\x12Z\n\x16\x63ontroller_data_packet\x18\x02 \x01(\x0b\x32:.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket\x12T\n\x13tracker_data_packet\x18\x03 \x01(\x0b\x32\x37.PSMoveProtocol.DeviceOutputDataFrame.TrackerDataPacket\x12L\n\x0fhmd_data_packet\x18\x04 \x01(\x0b\x32\x33.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket\x1a\xaf*\n\x14\x43ontrollerDataPacket\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x37\n\x0f\x63ontroller_type\x18\x02 \x01(\x0e\x32\x1e.PSMoveProtocol.ControllerType\x12\x14\n\x0csequence_num\x18\x03 \x01(\x05\x12\x13\n\x0bIsConnected\x18\x04 \x01(\x08\x12\x1b\n\x13\x62utton_down_bitmask\x18\x05 \x01(\r\x12\\\n\x0cpsmove_state\x18\x06 \x01(\x0b\x32\x46.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSMoveState\x12\\\n\x0cpsnavi_state\x18\x07 \x01(\x0b\x32\x46.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSNaviState\x12h\n\x12psdualshock4_state\x18\x08 \x01(\x0b\x32L.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSDualShock4State\x12r\n\x17virtualcontroller_state\x18\t \x01(\x0b\x32Q.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.VirtualControllerState\x1a\x95\r\n\x0bPSMoveState\x12 \n\x18ValidHardwareCalibration\x18\x01 \x01(\x08\x12\x19\n\x11IsTrackingEnabled\x18\x02 \x01(\x08\x12\x1b\n\x13IsCurrentlyTracking\x18\x03 \x01(\x08\x12\x1a\n\x12IsOrientationValid\x18\x04 \x01(\x08\x12\x17\n\x0fIsPositionValid\x18\x05 \x01(\x08\x12-\n\x0bposition_cm\x18\x06 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x30\n\x0borientation\x18\x07 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x12\x15\n\rtrigger_value\x18\x08 \x01(\x05\x12m\n\x0fraw_sensor_data\x18\t \x01(\x0b\x32T.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSMoveState.RawSensorData\x12{\n\x16\x63\x61librated_sensor_data\x18\n \x01(\x0b\x32[.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSMoveState.CalibratedSensorData\x12o\n\x10raw_tracker_data\x18\x0b \x01(\x0b\x32U.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSMoveState.RawTrackerData\x12h\n\x0cphysics_data\x18\x0c \x01(\x0b\x32R.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSMoveState.PhysicsData\x12\x15\n\rbattery_value\x18\r \x01(\x05\x12\x1b\n\x13tracking_color_type\x18\x0e \x01(\x05\x1a\xa0\x01\n\rRawSensorData\x12/\n\x0cmagnetometer\x18\x01 \x01(\x0b\x32\x19.PSMoveProtocol.IntVector\x12\x30\n\raccelerometer\x18\x02 \x01(\x0b\x32\x19.PSMoveProtocol.IntVector\x12,\n\tgyroscope\x18\x03 \x01(\x0b\x32\x19.PSMoveProtocol.IntVector\x1a\xad\x01\n\x14\x43\x61libratedSensorData\x12\x31\n\x0cmagnetometer\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x32\n\raccelerometer\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12.\n\tgyroscope\x18\x03 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x1a\x96\x02\n\x0eRawTrackerData\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12.\n\x0fscreen_location\x18\x02 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x36\n\x14relative_position_cm\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x10projected_sphere\x18\x04 \x01(\x0b\x32\x17.PSMoveProtocol.Ellipse\x12\x36\n\x14multicam_position_cm\x18\x05 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x1d\n\x15valid_tracker_bitmask\x18\x06 \x01(\r\x1a\x97\x02\n\x0bPhysicsData\x12\x38\n\x13velocity_cm_per_sec\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12@\n\x1b\x61\x63\x63\x65leration_cm_per_sec_sqr\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x41\n\x1c\x61ngular_velocity_rad_per_sec\x18\x03 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12I\n$angular_acceleration_rad_per_sec_sqr\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x1aN\n\x0bPSNaviState\x12\x15\n\rtrigger_value\x18\x01 \x01(\x05\x12\x13\n\x0bstick_xaxis\x18\x02 \x01(\x05\x12\x13\n\x0bstick_yaxis\x18\x03 \x01(\x05\x1a\xee\x0e\n\x11PSDualShock4State\x12 \n\x18ValidHardwareCalibration\x18\x01 \x01(\x08\x12\x19\n\x11IsTrackingEnabled\x18\x02 \x01(\x08\x12\x1b\n\x13IsCurrentlyTracking\x18\x03 \x01(\x08\x12\x1a\n\x12IsOrientationValid\x18\x04 \x01(\x08\x12\x17\n\x0fIsPositionValid\x18\x05 \x01(\x08\x12-\n\x0bposition_cm\x18\x06 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x30\n\x0borientation\x18\x07 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x12\x19\n\x11left_thumbstick_x\x18\x08 \x01(\x02\x12\x19\n\x11left_thumbstick_y\x18\t \x01(\x02\x12\x1a\n\x12right_thumbstick_x\x18\n \x01(\x02\x12\x1a\n\x12right_thumbstick_y\x18\x0b \x01(\x02\x12\x1a\n\x12left_trigger_value\x18\x0c \x01(\x02\x12\x1b\n\x13right_trigger_value\x18\r \x01(\x02\x12s\n\x0fraw_sensor_data\x18\x0e \x01(\x0b\x32Z.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSDualShock4State.RawSensorData\x12\x81\x01\n\x16\x63\x61librated_sensor_data\x18\x0f \x01(\x0b\x32\x61.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSDualShock4State.CalibratedSensorData\x12u\n\x10raw_tracker_data\x18\x10 \x01(\x0b\x32[.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSDualShock4State.RawTrackerData\x12n\n\x0cphysics_data\x18\x11 \x01(\x0b\x32X.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.PSDualShock4State.PhysicsData\x12\x1b\n\x13tracking_color_type\x18\x12 \x01(\x05\x1ao\n\rRawSensorData\x12\x30\n\raccelerometer\x18\x01 \x01(\x0b\x32\x19.PSMoveProtocol.IntVector\x12,\n\tgyroscope\x18\x02 \x01(\x0b\x32\x19.PSMoveProtocol.IntVector\x1az\n\x14\x43\x61libratedSensorData\x12\x32\n\raccelerometer\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12.\n\tgyroscope\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x1a\xbd\x03\n\x0eRawTrackerData\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12.\n\x0fscreen_location\x18\x02 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x36\n\x14relative_position_cm\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x39\n\x14relative_orientation\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x12\x31\n\x10projected_sphere\x18\x05 \x01(\x0b\x32\x17.PSMoveProtocol.Ellipse\x12/\n\x0eprojected_blob\x18\x06 \x01(\x0b\x32\x17.PSMoveProtocol.Polygon\x12\x36\n\x14multicam_position_cm\x18\x07 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x39\n\x14multicam_orientation\x18\x08 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x12\x1d\n\x15valid_tracker_bitmask\x18\t \x01(\r\x1a\x97\x02\n\x0bPhysicsData\x12\x38\n\x13velocity_cm_per_sec\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12@\n\x1b\x61\x63\x63\x65leration_cm_per_sec_sqr\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x41\n\x1c\x61ngular_velocity_rad_per_sec\x18\x03 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12I\n$angular_acceleration_rad_per_sec_sqr\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x1a\x98\x07\n\x16VirtualControllerState\x12\x19\n\x11IsTrackingEnabled\x18\x01 \x01(\x08\x12\x1b\n\x13IsCurrentlyTracking\x18\x02 \x01(\x08\x12\x17\n\x0fIsPositionValid\x18\x03 \x01(\x08\x12-\n\x0bposition_cm\x18\x04 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x10\n\x08vendorID\x18\x05 \x01(\x05\x12\x11\n\tproductID\x18\x06 \x01(\x05\x12\x12\n\nnumButtons\x18\x07 \x01(\x05\x12\x12\n\naxisStates\x18\x08 \x03(\x05\x12z\n\x10raw_tracker_data\x18\t \x01(\x0b\x32`.PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.VirtualControllerState.RawTrackerData\x12s\n\x0cphysics_data\x18\n \x01(\x0b\x32].PSMoveProtocol.DeviceOutputDataFrame.ControllerDataPacket.VirtualControllerState.PhysicsData\x12\x1b\n\x13tracking_color_type\x18\x0b \x01(\x05\x1a\x96\x02\n\x0eRawTrackerData\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12.\n\x0fscreen_location\x18\x02 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x36\n\x14relative_position_cm\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x10projected_sphere\x18\x04 \x01(\x0b\x32\x17.PSMoveProtocol.Ellipse\x12\x36\n\x14multicam_position_cm\x18\x05 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x1d\n\x15valid_tracker_bitmask\x18\x06 \x01(\r\x1a\x89\x01\n\x0bPhysicsData\x12\x38\n\x13velocity_cm_per_sec\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12@\n\x1b\x61\x63\x63\x65leration_cm_per_sec_sqr\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\"\xf0\x01\n\nButtonType\x12\x0c\n\x08TRIANGLE\x10\x00\x12\n\n\x06\x43IRCLE\x10\x01\x12\t\n\x05\x43ROSS\x10\x02\x12\n\n\x06SQUARE\x10\x03\x12\n\n\x06SELECT\x10\x04\x12\t\n\x05START\x10\x05\x12\x06\n\x02PS\x10\x06\x12\x08\n\x04MOVE\x10\x07\x12\x0b\n\x07TRIGGER\x10\x08\x12\x06\n\x02UP\x10\t\x12\x08\n\x04\x44OWN\x10\n\x12\x08\n\x04LEFT\x10\x0b\x12\t\n\x05RIGHT\x10\x0c\x12\x06\n\x02L1\x10\r\x12\x06\n\x02L2\x10\x0e\x12\x06\n\x02L3\x10\x0f\x12\x06\n\x02R1\x10\x10\x12\x06\n\x02R2\x10\x11\x12\x06\n\x02R3\x10\x12\x12\t\n\x05SHARE\x10\x13\x12\x0b\n\x07OPTIONS\x10\x14\x12\x0c\n\x08TRACKPAD\x10\x15\x1a\xcc\x01\n\x11TrackerDataPacket\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12\x31\n\x0ctracker_type\x18\x02 \x01(\x0e\x32\x1b.PSMoveProtocol.TrackerType\x12\x14\n\x0csequence_num\x18\x03 \x01(\x05\x12\x13\n\x0bIsConnected\x18\x04 \x01(\x08\x12\x18\n\x10tracker_exposure\x18\x05 \x01(\x05\x12\x14\n\x0ctracker_gain\x18\x06 \x01(\x05\x12\x15\n\rtracker_width\x18\x07 \x01(\x05\x1a\xc1\x13\n\rHMDDataPacket\x12\x0e\n\x06hmd_id\x18\x01 \x01(\x05\x12)\n\x08hmd_type\x18\x02 \x01(\x0e\x32\x17.PSMoveProtocol.HMDType\x12\x14\n\x0csequence_num\x18\x03 \x01(\x05\x12\x13\n\x0bIsConnected\x18\x04 \x01(\x08\x12Y\n\x0emorpheus_state\x18\x05 \x01(\x0b\x32\x41.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.MorpheusState\x12^\n\x11virtual_hmd_state\x18\x06 \x01(\x0b\x32\x43.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.VirtualHMDState\x1a\xb8\x0b\n\rMorpheusState\x12\x19\n\x11IsTrackingEnabled\x18\x01 \x01(\x08\x12\x1b\n\x13IsCurrentlyTracking\x18\x02 \x01(\x08\x12\x1a\n\x12IsOrientationValid\x18\x03 \x01(\x08\x12\x17\n\x0fIsPositionValid\x18\x04 \x01(\x08\x12-\n\x0bposition_cm\x18\x05 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x30\n\x0borientation\x18\x06 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x12h\n\x0fraw_sensor_data\x18\x07 \x01(\x0b\x32O.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.MorpheusState.RawSensorData\x12v\n\x16\x63\x61librated_sensor_data\x18\x08 \x01(\x0b\x32V.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.MorpheusState.CalibratedSensorData\x12j\n\x10raw_tracker_data\x18\t \x01(\x0b\x32P.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.MorpheusState.RawTrackerData\x12\x63\n\x0cphysics_data\x18\n \x01(\x0b\x32M.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.MorpheusState.PhysicsData\x1ao\n\rRawSensorData\x12\x30\n\raccelerometer\x18\x01 \x01(\x0b\x32\x19.PSMoveProtocol.IntVector\x12,\n\tgyroscope\x18\x02 \x01(\x0b\x32\x19.PSMoveProtocol.IntVector\x1az\n\x14\x43\x61libratedSensorData\x12\x32\n\raccelerometer\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12.\n\tgyroscope\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x1a\x9e\x02\n\x0eRawTrackerData\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12.\n\x0fscreen_location\x18\x02 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x36\n\x14relative_position_cm\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x39\n\x14relative_orientation\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.Orientation\x12\x36\n\x15projected_point_cloud\x18\x05 \x01(\x0b\x32\x17.PSMoveProtocol.Polygon\x12\x1d\n\x15valid_tracker_bitmask\x18\x06 \x01(\r\x1a\x97\x02\n\x0bPhysicsData\x12\x38\n\x13velocity_cm_per_sec\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12@\n\x1b\x61\x63\x63\x65leration_cm_per_sec_sqr\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12\x41\n\x1c\x61ngular_velocity_rad_per_sec\x18\x03 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12I\n$angular_acceleration_rad_per_sec_sqr\x18\x04 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x1a\xd3\x05\n\x0fVirtualHMDState\x12\x19\n\x11IsTrackingEnabled\x18\x01 \x01(\x08\x12\x1b\n\x13IsCurrentlyTracking\x18\x02 \x01(\x08\x12\x17\n\x0fIsPositionValid\x18\x03 \x01(\x08\x12-\n\x0bposition_cm\x18\x04 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12l\n\x10raw_tracker_data\x18\x05 \x01(\x0b\x32R.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.VirtualHMDState.RawTrackerData\x12\x65\n\x0cphysics_data\x18\x06 \x01(\x0b\x32O.PSMoveProtocol.DeviceOutputDataFrame.HMDDataPacket.VirtualHMDState.PhysicsData\x1a\xde\x01\n\x0eRawTrackerData\x12\x12\n\ntracker_id\x18\x01 \x01(\x05\x12.\n\x0fscreen_location\x18\x02 \x01(\x0b\x32\x15.PSMoveProtocol.Pixel\x12\x36\n\x14relative_position_cm\x18\x03 \x01(\x0b\x32\x18.PSMoveProtocol.Position\x12\x31\n\x10projected_sphere\x18\x04 \x01(\x0b\x32\x17.PSMoveProtocol.Ellipse\x12\x1d\n\x15valid_tracker_bitmask\x18\x05 \x01(\r\x1a\x89\x01\n\x0bPhysicsData\x12\x38\n\x13velocity_cm_per_sec\x18\x01 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\x12@\n\x1b\x61\x63\x63\x65leration_cm_per_sec_sqr\x18\x02 \x01(\x0b\x32\x1b.PSMoveProtocol.FloatVector\"6\n\x0e\x44\x65viceCategory\x12\x0e\n\nCONTROLLER\x10\x00\x12\x0b\n\x07TRACKER\x10\x01\x12\x07\n\x03HMD\x10\x02\"\x94\x06\n\x14\x44\x65viceInputDataFrame\x12\x15\n\rconnection_id\x18\x01 \x01(\x05\x12L\n\x0f\x64\x65vice_category\x18\x02 \x01(\x0e\x32\x33.PSMoveProtocol.DeviceInputDataFrame.DeviceCategory\x12Y\n\x16\x63ontroller_data_packet\x18\x03 \x01(\x0b\x32\x39.PSMoveProtocol.DeviceInputDataFrame.ControllerDataPacket\x1a\x8c\x04\n\x14\x43ontrollerDataPacket\x12\x15\n\rcontroller_id\x18\x01 \x01(\x05\x12\x37\n\x0f\x63ontroller_type\x18\x02 \x01(\x0e\x32\x1e.PSMoveProtocol.ControllerType\x12\x14\n\x0csequence_num\x18\x03 \x01(\x05\x12[\n\x0cpsmove_state\x18\x04 \x01(\x0b\x32\x45.PSMoveProtocol.DeviceInputDataFrame.ControllerDataPacket.PSMoveState\x12g\n\x12psdualshock4_state\x18\x05 \x01(\x0b\x32K.PSMoveProtocol.DeviceInputDataFrame.ControllerDataPacket.PSDualShock4State\x1aP\n\x0bPSMoveState\x12\x14\n\x0crumble_value\x18\x01 \x01(\x05\x12\r\n\x05led_r\x18\x02 \x01(\x05\x12\r\n\x05led_g\x18\x03 \x01(\x05\x12\r\n\x05led_b\x18\x04 \x01(\x05\x1av\n\x11PSDualShock4State\x12\x18\n\x10\x62ig_rumble_value\x18\x01 \x01(\x05\x12\x1a\n\x12small_rumble_value\x18\x02 \x01(\x05\x12\r\n\x05led_r\x18\x03 \x01(\x05\x12\r\n\x05led_g\x18\x04 \x01(\x05\x12\r\n\x05led_b\x18\x05 \x01(\x05\"-\n\x0e\x44\x65viceCategory\x12\x0b\n\x07INVALID\x10\x00\x12\x0e\n\nCONTROLLER\x10\x01*Q\n\x0e\x43ontrollerType\x12\n\n\x06PSMOVE\x10\x00\x12\n\n\x06PSNAVI\x10\x01\x12\x10\n\x0cPSDUALSHOCK4\x10\x02\x12\x15\n\x11VIRTUALCONTROLLER\x10\x03*=\n\x0e\x43ontrollerHand\x12\x0c\n\x08HAND_ANY\x10\x00\x12\r\n\tHAND_LEFT\x10\x01\x12\x0e\n\nHAND_RIGHT\x10\x02*\x19\n\x0bTrackerType\x12\n\n\x06PS3EYE\x10\x00*P\n\rTrackerDriver\x12\n\n\x06LIBUSB\x10\x00\x12\n\n\x06\x43L_EYE\x10\x01\x12\x13\n\x0f\x43L_EYE_MULTICAM\x10\x02\x12\x12\n\x0eGENERIC_WEBCAM\x10\x03*\xf4\x01\n\x11TrackingColorType\x12\x0b\n\x07Magenta\x10\x00\x12\x08\n\x04\x43yan\x10\x01\x12\n\n\x06Yellow\x10\x02\x12\x07\n\x03Red\x10\x03\x12\t\n\x05Green\x10\x04\x12\x08\n\x04\x42lue\x10\x05\x12\x0b\n\x07\x43ustom0\x10\x06\x12\x0b\n\x07\x43ustom1\x10\x07\x12\x0b\n\x07\x43ustom2\x10\x08\x12\x0b\n\x07\x43ustom3\x10\t\x12\x0b\n\x07\x43ustom4\x10\n\x12\x0b\n\x07\x43ustom5\x10\x0b\x12\x0b\n\x07\x43ustom6\x10\x0c\x12\x0b\n\x07\x43ustom7\x10\r\x12\x0b\n\x07\x43ustom8\x10\x0e\x12\x0b\n\x07\x43ustom9\x10\x0f\x12\x1c\n\x18MAX_PSMOVE_COLOR_PRESETS\x10\x10*\'\n\x07HMDType\x12\x0c\n\x08Morpheus\x10\x00\x12\x0e\n\nVirtualHMD\x10\x01\x62\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'PSMoveProtocol_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
DESCRIPTOR._loaded_options = None
|
|
34
|
+
_globals['_CONTROLLERTYPE']._serialized_start=35019
|
|
35
|
+
_globals['_CONTROLLERTYPE']._serialized_end=35100
|
|
36
|
+
_globals['_CONTROLLERHAND']._serialized_start=35102
|
|
37
|
+
_globals['_CONTROLLERHAND']._serialized_end=35163
|
|
38
|
+
_globals['_TRACKERTYPE']._serialized_start=35165
|
|
39
|
+
_globals['_TRACKERTYPE']._serialized_end=35190
|
|
40
|
+
_globals['_TRACKERDRIVER']._serialized_start=35192
|
|
41
|
+
_globals['_TRACKERDRIVER']._serialized_end=35272
|
|
42
|
+
_globals['_TRACKINGCOLORTYPE']._serialized_start=35275
|
|
43
|
+
_globals['_TRACKINGCOLORTYPE']._serialized_end=35519
|
|
44
|
+
_globals['_HMDTYPE']._serialized_start=35521
|
|
45
|
+
_globals['_HMDTYPE']._serialized_end=35560
|
|
46
|
+
_globals['_PIXEL']._serialized_start=40
|
|
47
|
+
_globals['_PIXEL']._serialized_end=69
|
|
48
|
+
_globals['_FLOATVECTOR']._serialized_start=71
|
|
49
|
+
_globals['_FLOATVECTOR']._serialized_end=117
|
|
50
|
+
_globals['_INTVECTOR']._serialized_start=119
|
|
51
|
+
_globals['_INTVECTOR']._serialized_end=163
|
|
52
|
+
_globals['_POSITION']._serialized_start=165
|
|
53
|
+
_globals['_POSITION']._serialized_end=208
|
|
54
|
+
_globals['_EULER']._serialized_start=210
|
|
55
|
+
_globals['_EULER']._serialized_end=250
|
|
56
|
+
_globals['_ORIENTATION']._serialized_start=252
|
|
57
|
+
_globals['_ORIENTATION']._serialized_end=309
|
|
58
|
+
_globals['_ELLIPSE']._serialized_start=311
|
|
59
|
+
_globals['_ELLIPSE']._serialized_end=420
|
|
60
|
+
_globals['_POLYGON']._serialized_start=422
|
|
61
|
+
_globals['_POLYGON']._serialized_end=472
|
|
62
|
+
_globals['_OPTIONSET']._serialized_start=474
|
|
63
|
+
_globals['_OPTIONSET']._serialized_end=552
|
|
64
|
+
_globals['_POSE']._serialized_start=554
|
|
65
|
+
_globals['_POSE']._serialized_end=654
|
|
66
|
+
_globals['_PROJECTIONBLACKLISTLIST']._serialized_start=657
|
|
67
|
+
_globals['_PROJECTIONBLACKLISTLIST']._serialized_end=927
|
|
68
|
+
_globals['_PROJECTIONBLACKLIST']._serialized_start=929
|
|
69
|
+
_globals['_PROJECTIONBLACKLIST']._serialized_end=994
|
|
70
|
+
_globals['_TRACKINGCOLORPRESET']._serialized_start=997
|
|
71
|
+
_globals['_TRACKINGCOLORPRESET']._serialized_end=1208
|
|
72
|
+
_globals['_REQUEST']._serialized_start=1212
|
|
73
|
+
_globals['_REQUEST']._serialized_end=17883
|
|
74
|
+
_globals['_REQUEST_REQUESTGETCONTROLLERLIST']._serialized_start=7042
|
|
75
|
+
_globals['_REQUEST_REQUESTGETCONTROLLERLIST']._serialized_end=7101
|
|
76
|
+
_globals['_REQUEST_REQUESTSTARTPSMOVEDATASTREAM']._serialized_start=7104
|
|
77
|
+
_globals['_REQUEST_REQUESTSTARTPSMOVEDATASTREAM']._serialized_end=7346
|
|
78
|
+
_globals['_REQUEST_REQUESTSTOPPSMOVEDATASTREAM']._serialized_start=7348
|
|
79
|
+
_globals['_REQUEST_REQUESTSTOPPSMOVEDATASTREAM']._serialized_end=7400
|
|
80
|
+
_globals['_REQUEST_REQUESTRESETPOSE']._serialized_start=7402
|
|
81
|
+
_globals['_REQUEST_REQUESTRESETPOSE']._serialized_end=7493
|
|
82
|
+
_globals['_REQUEST_REQUESTUNPAIRCONTROLLER']._serialized_start=7495
|
|
83
|
+
_globals['_REQUEST_REQUESTUNPAIRCONTROLLER']._serialized_end=7543
|
|
84
|
+
_globals['_REQUEST_REQUESTPAIRCONTROLLER']._serialized_start=7545
|
|
85
|
+
_globals['_REQUEST_REQUESTPAIRCONTROLLER']._serialized_end=7591
|
|
86
|
+
_globals['_REQUEST_REQUESTCANCELBLUETOOTHREQUEST']._serialized_start=7593
|
|
87
|
+
_globals['_REQUEST_REQUESTCANCELBLUETOOTHREQUEST']._serialized_end=7647
|
|
88
|
+
_globals['_REQUEST_REQUESTSETLEDTRACKINGCOLOR']._serialized_start=7649
|
|
89
|
+
_globals['_REQUEST_REQUESTSETLEDTRACKINGCOLOR']._serialized_end=7755
|
|
90
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERMAGNETOMETERCALIBRATION']._serialized_start=7758
|
|
91
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERMAGNETOMETERCALIBRATION']._serialized_end=8213
|
|
92
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERACCELEROMETERCALIBRATION']._serialized_start=8215
|
|
93
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERACCELEROMETERCALIBRATION']._serialized_end=8324
|
|
94
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERGYROSCOPECALIBRATION']._serialized_start=8327
|
|
95
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERGYROSCOPECALIBRATION']._serialized_end=8499
|
|
96
|
+
_globals['_REQUEST_REQUESTSETOPTICALNOISECALIBRATION']._serialized_start=8502
|
|
97
|
+
_globals['_REQUEST_REQUESTSETOPTICALNOISECALIBRATION']._serialized_end=8714
|
|
98
|
+
_globals['_REQUEST_REQUESTSETORIENTATIONFILTER']._serialized_start=8716
|
|
99
|
+
_globals['_REQUEST_REQUESTSETORIENTATIONFILTER']._serialized_end=8796
|
|
100
|
+
_globals['_REQUEST_REQUESTSETPOSITIONFILTER']._serialized_start=8798
|
|
101
|
+
_globals['_REQUEST_REQUESTSETPOSITIONFILTER']._serialized_end=8872
|
|
102
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERPREDICTIONTIME']._serialized_start=8874
|
|
103
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERPREDICTIONTIME']._serialized_end=8958
|
|
104
|
+
_globals['_REQUEST_REQUESTSETATTACHEDCONTROLLER']._serialized_start=8960
|
|
105
|
+
_globals['_REQUEST_REQUESTSETATTACHEDCONTROLLER']._serialized_end=9049
|
|
106
|
+
_globals['_REQUEST_REQUESTSETGAMEPADINDEX']._serialized_start=9051
|
|
107
|
+
_globals['_REQUEST_REQUESTSETGAMEPADINDEX']._serialized_end=9121
|
|
108
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERDATASTREAMTRACKERINDEX']._serialized_start=9123
|
|
109
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERDATASTREAMTRACKERINDEX']._serialized_end=9210
|
|
110
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERHAND']._serialized_start=9212
|
|
111
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERHAND']._serialized_end=9318
|
|
112
|
+
_globals['_REQUEST_REQUESTSTARTTRACKERDATASTREAM']._serialized_start=9320
|
|
113
|
+
_globals['_REQUEST_REQUESTSTARTTRACKERDATASTREAM']._serialized_end=9371
|
|
114
|
+
_globals['_REQUEST_REQUESTSTOPTRACKERDATASTREAM']._serialized_start=9373
|
|
115
|
+
_globals['_REQUEST_REQUESTSTOPTRACKERDATASTREAM']._serialized_end=9423
|
|
116
|
+
_globals['_REQUEST_REQUESTGETTRACKERSETTINGS']._serialized_start=9426
|
|
117
|
+
_globals['_REQUEST_REQUESTGETTRACKERSETTINGS']._serialized_end=9626
|
|
118
|
+
_globals['_REQUEST_REQUESTGETTRACKERSETTINGS_DEVICECATEGORY']._serialized_start=9585
|
|
119
|
+
_globals['_REQUEST_REQUESTGETTRACKERSETTINGS_DEVICECATEGORY']._serialized_end=9626
|
|
120
|
+
_globals['_REQUEST_REQUESTSETTRACKEREXPOSURE']._serialized_start=9628
|
|
121
|
+
_globals['_REQUEST_REQUESTSETTRACKEREXPOSURE']._serialized_end=9712
|
|
122
|
+
_globals['_REQUEST_REQUESTSETTRACKERGAIN']._serialized_start=9714
|
|
123
|
+
_globals['_REQUEST_REQUESTSETTRACKERGAIN']._serialized_end=9794
|
|
124
|
+
_globals['_REQUEST_REQUESTSETTRACKEROPTION']._serialized_start=9796
|
|
125
|
+
_globals['_REQUEST_REQUESTSETTRACKEROPTION']._serialized_end=9884
|
|
126
|
+
_globals['_REQUEST_REQUESTSETTRACKERCOLORPRESET']._serialized_start=9887
|
|
127
|
+
_globals['_REQUEST_REQUESTSETTRACKERCOLORPRESET']._serialized_end=10152
|
|
128
|
+
_globals['_REQUEST_REQUESTSETTRACKERCOLORPRESET_DEVICECATEGORY']._serialized_start=9585
|
|
129
|
+
_globals['_REQUEST_REQUESTSETTRACKERCOLORPRESET_DEVICECATEGORY']._serialized_end=9626
|
|
130
|
+
_globals['_REQUEST_REQUESTSETTRACKERINTRINSICS']._serialized_start=10155
|
|
131
|
+
_globals['_REQUEST_REQUESTSETTRACKERINTRINSICS']._serialized_end=10414
|
|
132
|
+
_globals['_REQUEST_REQUESTSETTRACKERPOSE']._serialized_start=10416
|
|
133
|
+
_globals['_REQUEST_REQUESTSETTRACKERPOSE']._serialized_end=10495
|
|
134
|
+
_globals['_REQUEST_REQUESTRELOADTRACKERSETTINGS']._serialized_start=10497
|
|
135
|
+
_globals['_REQUEST_REQUESTRELOADTRACKERSETTINGS']._serialized_end=10547
|
|
136
|
+
_globals['_REQUEST_REQUESTSAVETRACKERPROFILE']._serialized_start=10549
|
|
137
|
+
_globals['_REQUEST_REQUESTSAVETRACKERPROFILE']._serialized_end=10619
|
|
138
|
+
_globals['_REQUEST_REQUESTAPPLYTRACKERPROFILE']._serialized_start=10621
|
|
139
|
+
_globals['_REQUEST_REQUESTAPPLYTRACKERPROFILE']._serialized_end=10692
|
|
140
|
+
_globals['_REQUEST_REQUESTSTARTHMDDATASTREAM']._serialized_start=10695
|
|
141
|
+
_globals['_REQUEST_REQUESTSTARTHMDDATASTREAM']._serialized_end=10927
|
|
142
|
+
_globals['_REQUEST_REQUESTSTOPHMDDATASTREAM']._serialized_start=10929
|
|
143
|
+
_globals['_REQUEST_REQUESTSTOPHMDDATASTREAM']._serialized_end=10971
|
|
144
|
+
_globals['_REQUEST_REQUESTSETHMDLEDTRACKINGCOLOR']._serialized_start=10973
|
|
145
|
+
_globals['_REQUEST_REQUESTSETHMDLEDTRACKINGCOLOR']._serialized_end=11075
|
|
146
|
+
_globals['_REQUEST_REQUESTSETHMDACCELEROMETERCALIBRATION']._serialized_start=11078
|
|
147
|
+
_globals['_REQUEST_REQUESTSETHMDACCELEROMETERCALIBRATION']._serialized_end=11213
|
|
148
|
+
_globals['_REQUEST_REQUESTSETHMDGYROSCOPECALIBRATION']._serialized_start=11216
|
|
149
|
+
_globals['_REQUEST_REQUESTSETHMDGYROSCOPECALIBRATION']._serialized_end=11355
|
|
150
|
+
_globals['_REQUEST_REQUESTSETHMDORIENTATIONFILTER']._serialized_start=11357
|
|
151
|
+
_globals['_REQUEST_REQUESTSETHMDORIENTATIONFILTER']._serialized_end=11433
|
|
152
|
+
_globals['_REQUEST_REQUESTSETHMDPOSITIONFILTER']._serialized_start=11435
|
|
153
|
+
_globals['_REQUEST_REQUESTSETHMDPOSITIONFILTER']._serialized_end=11505
|
|
154
|
+
_globals['_REQUEST_REQUESTSETHMDPREDICTIONTIME']._serialized_start=11507
|
|
155
|
+
_globals['_REQUEST_REQUESTSETHMDPREDICTIONTIME']._serialized_end=11577
|
|
156
|
+
_globals['_REQUEST_REQUESTSETHMDDATASTREAMTRACKERINDEX']._serialized_start=11579
|
|
157
|
+
_globals['_REQUEST_REQUESTSETHMDDATASTREAMTRACKERINDEX']._serialized_end=11652
|
|
158
|
+
_globals['_REQUEST_REQUESTSETTRACKERFRAMERATE']._serialized_start=11654
|
|
159
|
+
_globals['_REQUEST_REQUESTSETTRACKERFRAMERATE']._serialized_end=11739
|
|
160
|
+
_globals['_REQUEST_REQUESTSETTRACKERFRAMEWIDTH']._serialized_start=11741
|
|
161
|
+
_globals['_REQUEST_REQUESTSETTRACKERFRAMEWIDTH']._serialized_end=11827
|
|
162
|
+
_globals['_REQUEST_REQUESTSETTRACKERFRAMEHEIGHT']._serialized_start=11829
|
|
163
|
+
_globals['_REQUEST_REQUESTSETTRACKERFRAMEHEIGHT']._serialized_end=11916
|
|
164
|
+
_globals['_REQUEST_REQUESTSETCONTROLLEROPTICALTRACKING']._serialized_start=11918
|
|
165
|
+
_globals['_REQUEST_REQUESTSETCONTROLLEROPTICALTRACKING']._serialized_end=11995
|
|
166
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERPSMOVEEMULATION']._serialized_start=11997
|
|
167
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERPSMOVEEMULATION']._serialized_end=12074
|
|
168
|
+
_globals['_REQUEST_REQUESTSETTRACKERPROJECTIONBLACKLIST']._serialized_start=12077
|
|
169
|
+
_globals['_REQUEST_REQUESTSETTRACKERPROJECTIONBLACKLIST']._serialized_end=12206
|
|
170
|
+
_globals['_REQUEST_REQUESTSETCONTROLLEROFFSETS']._serialized_start=12209
|
|
171
|
+
_globals['_REQUEST_REQUESTSETCONTROLLEROFFSETS']._serialized_end=12497
|
|
172
|
+
_globals['_REQUEST_REQUESTSETHMDOFFSETS']._serialized_start=12500
|
|
173
|
+
_globals['_REQUEST_REQUESTSETHMDOFFSETS']._serialized_end=12745
|
|
174
|
+
_globals['_REQUEST_REQUESTGETPLAYSPACEOFFSETS']._serialized_start=12748
|
|
175
|
+
_globals['_REQUEST_REQUESTGETPLAYSPACEOFFSETS']._serialized_end=12916
|
|
176
|
+
_globals['_REQUEST_REQUESTSETPLAYSPACEOFFSETS']._serialized_start=12919
|
|
177
|
+
_globals['_REQUEST_REQUESTSETPLAYSPACEOFFSETS']._serialized_end=13087
|
|
178
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERFILTERSETTINGS']._serialized_start=13090
|
|
179
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERFILTERSETTINGS']._serialized_end=14208
|
|
180
|
+
_globals['_REQUEST_REQUESTSETHMDFILTERSETTINGS']._serialized_start=14211
|
|
181
|
+
_globals['_REQUEST_REQUESTSETHMDFILTERSETTINGS']._serialized_end=14867
|
|
182
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERMAGNETOMETERCALIBRATIONBASIC']._serialized_start=14870
|
|
183
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERMAGNETOMETERCALIBRATIONBASIC']._serialized_end=15239
|
|
184
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERORIENTATIONPREDICTIONTIME']._serialized_start=15241
|
|
185
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERORIENTATIONPREDICTIONTIME']._serialized_end=15340
|
|
186
|
+
_globals['_REQUEST_REQUESTSETHMDORIENTATIONPREDICTIONTIME']._serialized_start=15342
|
|
187
|
+
_globals['_REQUEST_REQUESTSETHMDORIENTATIONPREDICTIONTIME']._serialized_end=15427
|
|
188
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERACCELEROMETERCALIBRATIONAVG']._serialized_start=15430
|
|
189
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERACCELEROMETERCALIBRATIONAVG']._serialized_end=15582
|
|
190
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERACCELEROMETERCALIBRATIONEX']._serialized_start=15585
|
|
191
|
+
_globals['_REQUEST_REQUESTSETCONTROLLERACCELEROMETERCALIBRATIONEX']._serialized_end=15813
|
|
192
|
+
_globals['_REQUEST_REQUESTSETHMDTRACKINGLEDOVERRIDES']._serialized_start=15815
|
|
193
|
+
_globals['_REQUEST_REQUESTSETHMDTRACKINGLEDOVERRIDES']._serialized_end=15909
|
|
194
|
+
_globals['_REQUEST_REQUESTTYPE']._serialized_start=15912
|
|
195
|
+
_globals['_REQUEST_REQUESTTYPE']._serialized_end=17883
|
|
196
|
+
_globals['_RESPONSE']._serialized_start=17886
|
|
197
|
+
_globals['_RESPONSE']._serialized_end=25676
|
|
198
|
+
_globals['_RESPONSE_RESULTCONNECTIONINFO']._serialized_start=19493
|
|
199
|
+
_globals['_RESPONSE_RESULTCONNECTIONINFO']._serialized_end=19542
|
|
200
|
+
_globals['_RESPONSE_RESULTCONTROLLERSTREAMSTARTED']._serialized_start=19544
|
|
201
|
+
_globals['_RESPONSE_RESULTCONTROLLERSTREAMSTARTED']._serialized_end=19642
|
|
202
|
+
_globals['_RESPONSE_RESULTCONTROLLERLIST']._serialized_start=19645
|
|
203
|
+
_globals['_RESPONSE_RESULTCONTROLLERLIST']._serialized_end=21848
|
|
204
|
+
_globals['_RESPONSE_RESULTCONTROLLERLIST_CONTROLLERINFO']._serialized_start=19797
|
|
205
|
+
_globals['_RESPONSE_RESULTCONTROLLERLIST_CONTROLLERINFO']._serialized_end=21848
|
|
206
|
+
_globals['_RESPONSE_RESULTCONTROLLERLIST_CONTROLLERINFO_CONNECTIONTYPE']._serialized_start=21808
|
|
207
|
+
_globals['_RESPONSE_RESULTCONTROLLERLIST_CONTROLLERINFO_CONNECTIONTYPE']._serialized_end=21848
|
|
208
|
+
_globals['_RESPONSE_RESULTBLUETOOTHREQUESTPROGRESS']._serialized_start=21850
|
|
209
|
+
_globals['_RESPONSE_RESULTBLUETOOTHREQUESTPROGRESS']._serialized_end=21951
|
|
210
|
+
_globals['_RESPONSE_RESULTTRACKERLIST']._serialized_start=21954
|
|
211
|
+
_globals['_RESPONSE_RESULTTRACKERLIST']._serialized_end=22671
|
|
212
|
+
_globals['_RESPONSE_RESULTTRACKERLIST_TRACKERINFO']._serialized_start=22082
|
|
213
|
+
_globals['_RESPONSE_RESULTTRACKERLIST_TRACKERINFO']._serialized_end=22671
|
|
214
|
+
_globals['_RESPONSE_RESULTTRACKERSETTINGS']._serialized_start=22674
|
|
215
|
+
_globals['_RESPONSE_RESULTTRACKERSETTINGS']._serialized_end=22971
|
|
216
|
+
_globals['_RESPONSE_RESULTSETTRACKEREXPOSURE']._serialized_start=22973
|
|
217
|
+
_globals['_RESPONSE_RESULTSETTRACKEREXPOSURE']._serialized_end=23021
|
|
218
|
+
_globals['_RESPONSE_RESULTSETTRACKERGAIN']._serialized_start=23023
|
|
219
|
+
_globals['_RESPONSE_RESULTSETTRACKERGAIN']._serialized_end=23063
|
|
220
|
+
_globals['_RESPONSE_RESULTSETTRACKEROPTION']._serialized_start=23065
|
|
221
|
+
_globals['_RESPONSE_RESULTSETTRACKEROPTION']._serialized_end=23136
|
|
222
|
+
_globals['_RESPONSE_RESULTSETTRACKERCOLORPRESET']._serialized_start=23138
|
|
223
|
+
_globals['_RESPONSE_RESULTSETTRACKERCOLORPRESET']._serialized_end=23250
|
|
224
|
+
_globals['_RESPONSE_RESULTTRACKINGSPACESETTINGS']._serialized_start=23252
|
|
225
|
+
_globals['_RESPONSE_RESULTTRACKINGSPACESETTINGS']._serialized_end=23313
|
|
226
|
+
_globals['_RESPONSE_RESULTHMDLIST']._serialized_start=23316
|
|
227
|
+
_globals['_RESPONSE_RESULTHMDLIST']._serialized_end=24557
|
|
228
|
+
_globals['_RESPONSE_RESULTHMDLIST_HMDINFO']._serialized_start=23403
|
|
229
|
+
_globals['_RESPONSE_RESULTHMDLIST_HMDINFO']._serialized_end=24557
|
|
230
|
+
_globals['_RESPONSE_RESULTSERVICEVERSION']._serialized_start=24559
|
|
231
|
+
_globals['_RESPONSE_RESULTSERVICEVERSION']._serialized_end=24598
|
|
232
|
+
_globals['_RESPONSE_RESULTSETTRACKERFRAMERATE']._serialized_start=24600
|
|
233
|
+
_globals['_RESPONSE_RESULTSETTRACKERFRAMERATE']._serialized_end=24651
|
|
234
|
+
_globals['_RESPONSE_RESULTSETTRACKERFRAMEWIDTH']._serialized_start=24653
|
|
235
|
+
_globals['_RESPONSE_RESULTSETTRACKERFRAMEWIDTH']._serialized_end=24706
|
|
236
|
+
_globals['_RESPONSE_RESULTSETTRACKERFRAMEHEIGHT']._serialized_start=24708
|
|
237
|
+
_globals['_RESPONSE_RESULTSETTRACKERFRAMEHEIGHT']._serialized_end=24763
|
|
238
|
+
_globals['_RESPONSE_RESULTGETPLAYSPACEOFFSETS']._serialized_start=24766
|
|
239
|
+
_globals['_RESPONSE_RESULTGETPLAYSPACEOFFSETS']._serialized_end=24933
|
|
240
|
+
_globals['_RESPONSE_RESPONSETYPE']._serialized_start=24936
|
|
241
|
+
_globals['_RESPONSE_RESPONSETYPE']._serialized_end=25608
|
|
242
|
+
_globals['_RESPONSE_RESULTCODE']._serialized_start=25610
|
|
243
|
+
_globals['_RESPONSE_RESULTCODE']._serialized_end=25676
|
|
244
|
+
_globals['_DEVICEOUTPUTDATAFRAME']._serialized_start=25679
|
|
245
|
+
_globals['_DEVICEOUTPUTDATAFRAME']._serialized_end=34226
|
|
246
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET']._serialized_start=26040
|
|
247
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET']._serialized_end=31463
|
|
248
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE']._serialized_start=26627
|
|
249
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE']._serialized_end=28312
|
|
250
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_RAWSENSORDATA']._serialized_start=27413
|
|
251
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_RAWSENSORDATA']._serialized_end=27573
|
|
252
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_CALIBRATEDSENSORDATA']._serialized_start=27576
|
|
253
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_CALIBRATEDSENSORDATA']._serialized_end=27749
|
|
254
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_RAWTRACKERDATA']._serialized_start=27752
|
|
255
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_RAWTRACKERDATA']._serialized_end=28030
|
|
256
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_PHYSICSDATA']._serialized_start=28033
|
|
257
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE_PHYSICSDATA']._serialized_end=28312
|
|
258
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSNAVISTATE']._serialized_start=28314
|
|
259
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSNAVISTATE']._serialized_end=28392
|
|
260
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE']._serialized_start=28395
|
|
261
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE']._serialized_end=30297
|
|
262
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_RAWSENSORDATA']._serialized_start=29332
|
|
263
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_RAWSENSORDATA']._serialized_end=29443
|
|
264
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_CALIBRATEDSENSORDATA']._serialized_start=29445
|
|
265
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_CALIBRATEDSENSORDATA']._serialized_end=29567
|
|
266
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_RAWTRACKERDATA']._serialized_start=29570
|
|
267
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_RAWTRACKERDATA']._serialized_end=30015
|
|
268
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_PHYSICSDATA']._serialized_start=28033
|
|
269
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE_PHYSICSDATA']._serialized_end=28312
|
|
270
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_VIRTUALCONTROLLERSTATE']._serialized_start=30300
|
|
271
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_VIRTUALCONTROLLERSTATE']._serialized_end=31220
|
|
272
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_VIRTUALCONTROLLERSTATE_RAWTRACKERDATA']._serialized_start=27752
|
|
273
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_VIRTUALCONTROLLERSTATE_RAWTRACKERDATA']._serialized_end=28030
|
|
274
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_VIRTUALCONTROLLERSTATE_PHYSICSDATA']._serialized_start=28033
|
|
275
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_VIRTUALCONTROLLERSTATE_PHYSICSDATA']._serialized_end=28170
|
|
276
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_BUTTONTYPE']._serialized_start=31223
|
|
277
|
+
_globals['_DEVICEOUTPUTDATAFRAME_CONTROLLERDATAPACKET_BUTTONTYPE']._serialized_end=31463
|
|
278
|
+
_globals['_DEVICEOUTPUTDATAFRAME_TRACKERDATAPACKET']._serialized_start=31466
|
|
279
|
+
_globals['_DEVICEOUTPUTDATAFRAME_TRACKERDATAPACKET']._serialized_end=31670
|
|
280
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET']._serialized_start=31673
|
|
281
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET']._serialized_end=34170
|
|
282
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE']._serialized_start=31980
|
|
283
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE']._serialized_end=33444
|
|
284
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_RAWSENSORDATA']._serialized_start=29332
|
|
285
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_RAWSENSORDATA']._serialized_end=29443
|
|
286
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_CALIBRATEDSENSORDATA']._serialized_start=29445
|
|
287
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_CALIBRATEDSENSORDATA']._serialized_end=29567
|
|
288
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_RAWTRACKERDATA']._serialized_start=32876
|
|
289
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_RAWTRACKERDATA']._serialized_end=33162
|
|
290
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_PHYSICSDATA']._serialized_start=28033
|
|
291
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_MORPHEUSSTATE_PHYSICSDATA']._serialized_end=28312
|
|
292
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_VIRTUALHMDSTATE']._serialized_start=33447
|
|
293
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_VIRTUALHMDSTATE']._serialized_end=34170
|
|
294
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_VIRTUALHMDSTATE_RAWTRACKERDATA']._serialized_start=33808
|
|
295
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_VIRTUALHMDSTATE_RAWTRACKERDATA']._serialized_end=34030
|
|
296
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_VIRTUALHMDSTATE_PHYSICSDATA']._serialized_start=28033
|
|
297
|
+
_globals['_DEVICEOUTPUTDATAFRAME_HMDDATAPACKET_VIRTUALHMDSTATE_PHYSICSDATA']._serialized_end=28170
|
|
298
|
+
_globals['_DEVICEOUTPUTDATAFRAME_DEVICECATEGORY']._serialized_start=34172
|
|
299
|
+
_globals['_DEVICEOUTPUTDATAFRAME_DEVICECATEGORY']._serialized_end=34226
|
|
300
|
+
_globals['_DEVICEINPUTDATAFRAME']._serialized_start=34229
|
|
301
|
+
_globals['_DEVICEINPUTDATAFRAME']._serialized_end=35017
|
|
302
|
+
_globals['_DEVICEINPUTDATAFRAME_CONTROLLERDATAPACKET']._serialized_start=34446
|
|
303
|
+
_globals['_DEVICEINPUTDATAFRAME_CONTROLLERDATAPACKET']._serialized_end=34970
|
|
304
|
+
_globals['_DEVICEINPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE']._serialized_start=34770
|
|
305
|
+
_globals['_DEVICEINPUTDATAFRAME_CONTROLLERDATAPACKET_PSMOVESTATE']._serialized_end=34850
|
|
306
|
+
_globals['_DEVICEINPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE']._serialized_start=34852
|
|
307
|
+
_globals['_DEVICEINPUTDATAFRAME_CONTROLLERDATAPACKET_PSDUALSHOCK4STATE']._serialized_end=34970
|
|
308
|
+
_globals['_DEVICEINPUTDATAFRAME_DEVICECATEGORY']._serialized_start=34972
|
|
309
|
+
_globals['_DEVICEINPUTDATAFRAME_DEVICECATEGORY']._serialized_end=35017
|
|
310
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""HMD Data Abstraction Module.
|
|
2
|
+
|
|
3
|
+
Provides data structures and parsing logic for Head-Mounted Display (HMD)
|
|
4
|
+
position and orientation data extracted from PSMoveServiceEx Protobuf
|
|
5
|
+
packets.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class Position:
|
|
13
|
+
"""3D spatial coordinates in centimeters."""
|
|
14
|
+
|
|
15
|
+
x: float = 0.0
|
|
16
|
+
y: float = 0.0
|
|
17
|
+
z: float = 0.0
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class Orientation:
|
|
22
|
+
"""3D angular rotation in degrees (Euler angles)."""
|
|
23
|
+
|
|
24
|
+
yaw: float = 0.0
|
|
25
|
+
pitch: float = 0.0
|
|
26
|
+
roll: float = 0.0
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class HMDData:
|
|
30
|
+
"""Encapsulates tracking state for an HMD device.
|
|
31
|
+
|
|
32
|
+
Parses raw Protobuf HMD packets and updates internal position/orientation
|
|
33
|
+
states with fallback support for standard pose structures.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(self):
|
|
37
|
+
self.position = Position()
|
|
38
|
+
self.orientation = Orientation()
|
|
39
|
+
self.raw_packet = None
|
|
40
|
+
|
|
41
|
+
def update_from_protobuf(self, hmd_packet) -> bool:
|
|
42
|
+
"""Parses an incoming HMD data packet from PSMoveServiceEx.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
hmd_packet: The deserialized `hmd_data_packet` Protobuf message.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
bool: True if positional data was successfully updated, False
|
|
49
|
+
otherwise.
|
|
50
|
+
"""
|
|
51
|
+
self.raw_packet = hmd_packet
|
|
52
|
+
|
|
53
|
+
# Primary extraction path: PSMoveServiceEx virtual HMD state wrapper
|
|
54
|
+
if hasattr(
|
|
55
|
+
hmd_packet, "virtual_hmd_state"
|
|
56
|
+
) and hmd_packet.HasField("virtual_hmd_state"):
|
|
57
|
+
state = hmd_packet.virtual_hmd_state
|
|
58
|
+
if hasattr(state, "position_cm") and state.HasField("position_cm"):
|
|
59
|
+
self.position.x = state.position_cm.x
|
|
60
|
+
self.position.y = state.position_cm.y
|
|
61
|
+
self.position.z = state.position_cm.z
|
|
62
|
+
return True
|
|
63
|
+
|
|
64
|
+
# Fallback path: Standard PSMoveService HMD pose structure
|
|
65
|
+
if hasattr(hmd_packet, "pose") and hmd_packet.HasField("pose"):
|
|
66
|
+
if hasattr(hmd_packet.pose, "position"):
|
|
67
|
+
self.position.x = hmd_packet.pose.position.x
|
|
68
|
+
self.position.y = hmd_packet.pose.position.y
|
|
69
|
+
self.position.z = hmd_packet.pose.position.z
|
|
70
|
+
return True
|
|
71
|
+
|
|
72
|
+
return False
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: psmovebridge
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Asynchronous Python client and OpenTrack UDP bridge for PSMoveServiceEx.
|
|
5
|
+
Author: Yohan KONAN
|
|
6
|
+
Requires-Python: >=3.8
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Dist: protobuf>=3.20.0
|
|
9
|
+
Dynamic: author
|
|
10
|
+
Dynamic: license-file
|
|
11
|
+
Dynamic: requires-dist
|
|
12
|
+
Dynamic: requires-python
|
|
13
|
+
Dynamic: summary
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
setup.py
|
|
4
|
+
psmovebridge/__init__.py
|
|
5
|
+
psmovebridge/client.py
|
|
6
|
+
psmovebridge/protocol_pb2.py
|
|
7
|
+
psmovebridge/tracker.py
|
|
8
|
+
psmovebridge.egg-info/PKG-INFO
|
|
9
|
+
psmovebridge.egg-info/SOURCES.txt
|
|
10
|
+
psmovebridge.egg-info/dependency_links.txt
|
|
11
|
+
psmovebridge.egg-info/requires.txt
|
|
12
|
+
psmovebridge.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
protobuf>=3.20.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
psmovebridge
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from setuptools import find_packages, setup
|
|
2
|
+
|
|
3
|
+
setup(
|
|
4
|
+
name="psmovebridge",
|
|
5
|
+
version="0.1.0",
|
|
6
|
+
description="Asynchronous Python client and OpenTrack UDP bridge for PSMoveServiceEx.",
|
|
7
|
+
author="Yohan KONAN",
|
|
8
|
+
packages=find_packages(),
|
|
9
|
+
install_requires=[
|
|
10
|
+
"protobuf>=3.20.0",
|
|
11
|
+
],
|
|
12
|
+
python_requires=">=3.8"
|
|
13
|
+
)
|