Skip to content

Commit 8b2513c

Browse files
mungewellJiri Kosina
authored andcommitted
HID: sony: PS Move fix report descriptor
Fix the report descriptor so that the buttons and trigger are correctly reported. The format of the input report is described here: https://github.com/nitsch/moveonpc/wiki/Input-report The Accelerometers and Gyros (1st frame only) are also reported as axis, but the Magnetometers are NOT as 'fixing' their byte order would break user-space drivers such as PSMoveAPI. It is hoped to resolve this at a future time. Signed-off-by: Simon Wood <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent 41d2d42 commit 8b2513c

File tree

1 file changed

+44
-25
lines changed

1 file changed

+44
-25
lines changed

drivers/hid/hid-sony.c

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -153,52 +153,71 @@ static __u8 motion_rdesc[] = {
153153
0xA1, 0x01, /* Collection (Application), */
154154
0xA1, 0x02, /* Collection (Logical), */
155155
0x85, 0x01, /* Report ID (1), */
156-
0x75, 0x08, /* Report Size (8), */
157-
0x95, 0x01, /* Report Count (1), */
158-
0x15, 0x00, /* Logical Minimum (0), */
159-
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
160-
0x81, 0x03, /* Input (Constant, Variable), */
161156
0x75, 0x01, /* Report Size (1), */
162-
0x95, 0x13, /* Report Count (19), */
157+
0x95, 0x15, /* Report Count (21), */
163158
0x15, 0x00, /* Logical Minimum (0), */
164159
0x25, 0x01, /* Logical Maximum (1), */
165160
0x35, 0x00, /* Physical Minimum (0), */
166161
0x45, 0x01, /* Physical Maximum (1), */
167162
0x05, 0x09, /* Usage Page (Button), */
168163
0x19, 0x01, /* Usage Minimum (01h), */
169-
0x29, 0x13, /* Usage Maximum (13h), */
170-
0x81, 0x02, /* Input (Variable), */
171-
0x75, 0x01, /* Report Size (1), */
172-
0x95, 0x0D, /* Report Count (13), */
164+
0x29, 0x15, /* Usage Maximum (15h), */
165+
0x81, 0x02, /* Input (Variable), * Buttons */
166+
0x95, 0x0B, /* Report Count (11), */
173167
0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
174-
0x81, 0x03, /* Input (Constant, Variable), */
168+
0x81, 0x03, /* Input (Constant, Variable), * Padding */
175169
0x15, 0x00, /* Logical Minimum (0), */
176170
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
177171
0x05, 0x01, /* Usage Page (Desktop), */
178-
0x09, 0x01, /* Usage (Pointer), */
179172
0xA1, 0x00, /* Collection (Physical), */
180173
0x75, 0x08, /* Report Size (8), */
181-
0x95, 0x04, /* Report Count (4), */
174+
0x95, 0x01, /* Report Count (1), */
182175
0x35, 0x00, /* Physical Minimum (0), */
183176
0x46, 0xFF, 0x00, /* Physical Maximum (255), */
184177
0x09, 0x30, /* Usage (X), */
185-
0x09, 0x31, /* Usage (Y), */
186-
0x09, 0x32, /* Usage (Z), */
187-
0x09, 0x35, /* Usage (Rz), */
188-
0x81, 0x02, /* Input (Variable), */
178+
0x81, 0x02, /* Input (Variable), * Trigger */
189179
0xC0, /* End Collection, */
190-
0x05, 0x01, /* Usage Page (Desktop), */
191-
0x95, 0x13, /* Report Count (19), */
192-
0x09, 0x01, /* Usage (Pointer), */
180+
0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
181+
0x75, 0x08, /* Report Size (8), */
182+
0x95, 0x07, /* Report Count (7), * skip 7 bytes */
193183
0x81, 0x02, /* Input (Variable), */
194-
0x95, 0x0C, /* Report Count (12), */
195-
0x81, 0x01, /* Input (Constant), */
184+
0x05, 0x01, /* Usage Page (Desktop), */
196185
0x75, 0x10, /* Report Size (16), */
197-
0x95, 0x04, /* Report Count (4), */
198-
0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
199-
0x46, 0xFF, 0x03, /* Physical Maximum (1023), */
186+
0x46, 0xFF, 0xFF, /* Physical Maximum (65535), */
187+
0x27, 0xFF, 0xFF, 0x00, 0x00, /* Logical Maximum (65535), */
188+
0x95, 0x03, /* Report Count (3), * 3x Accels */
189+
0x09, 0x33, /* Usage (rX), */
190+
0x09, 0x34, /* Usage (rY), */
191+
0x09, 0x35, /* Usage (rZ), */
192+
0x81, 0x02, /* Input (Variable), */
193+
0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
194+
0x95, 0x03, /* Report Count (3), * Skip Accels 2nd frame */
195+
0x81, 0x02, /* Input (Variable), */
196+
0x05, 0x01, /* Usage Page (Desktop), */
200197
0x09, 0x01, /* Usage (Pointer), */
198+
0x95, 0x03, /* Report Count (3), * 3x Gyros */
199+
0x81, 0x02, /* Input (Variable), */
200+
0x06, 0x00, 0xFF, /* Usage Page (FF00h), */
201+
0x95, 0x03, /* Report Count (3), * Skip Gyros 2nd frame */
201202
0x81, 0x02, /* Input (Variable), */
203+
0x75, 0x0C, /* Report Size (12), */
204+
0x46, 0xFF, 0x0F, /* Physical Maximum (4095), */
205+
0x26, 0xFF, 0x0F, /* Logical Maximum (4095), */
206+
0x95, 0x04, /* Report Count (4), * Skip Temp and Magnetometers */
207+
0x81, 0x02, /* Input (Variable), */
208+
0x75, 0x08, /* Report Size (8), */
209+
0x46, 0xFF, 0x00, /* Physical Maximum (255), */
210+
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
211+
0x95, 0x06, /* Report Count (6), * Skip Timestamp and Extension Bytes */
212+
0x81, 0x02, /* Input (Variable), */
213+
0x75, 0x08, /* Report Size (8), */
214+
0x95, 0x30, /* Report Count (48), */
215+
0x09, 0x01, /* Usage (Pointer), */
216+
0x91, 0x02, /* Output (Variable), */
217+
0x75, 0x08, /* Report Size (8), */
218+
0x95, 0x30, /* Report Count (48), */
219+
0x09, 0x01, /* Usage (Pointer), */
220+
0xB1, 0x02, /* Feature (Variable), */
202221
0xC0, /* End Collection, */
203222
0xA1, 0x02, /* Collection (Logical), */
204223
0x85, 0x02, /* Report ID (2), */

0 commit comments

Comments
 (0)