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.
@@ -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
+ protobuf>=3.20.0
@@ -0,0 +1 @@
1
+ psmovebridge
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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
+ )