SameBoy | Accurate GB/GBC emulator |
| download: https://git.y1.nz/archives/sameboy.tar.gz | |
| README | Files | Log | Refs | LICENSE |
JoyKit/ControllerConfiguration.inc
1 #define BUTTON(x) @(JOYButtonUsageGeneric0 + (x))
2 #define AXIS(x) @(JOYAxisUsageGeneric0 + (x))
3 #define AXES2D(x) @(JOYAxes2DUsageGeneric0 + (x))
4
5 hacksByManufacturer = @{
6 @(0x045E): @{ // Microsoft
7
8 JOYAxisGroups: @{
9 @(kHIDUsage_GD_X): @(0),
10 @(kHIDUsage_GD_Y): @(0),
11 @(kHIDUsage_GD_Z): @(2),
12 @(kHIDUsage_GD_Rx): @(1),
13 @(kHIDUsage_GD_Ry): @(1),
14 @(kHIDUsage_GD_Rz): @(2),
15 },
16
17 JOYButtonUsageMapping: @{
18 BUTTON(1): @(JOYButtonUsageA),
19 BUTTON(2): @(JOYButtonUsageB),
20 BUTTON(3): @(JOYButtonUsageX),
21 BUTTON(4): @(JOYButtonUsageY),
22 BUTTON(5): @(JOYButtonUsageL1),
23 BUTTON(6): @(JOYButtonUsageR1),
24 BUTTON(7): @(JOYButtonUsageLStick),
25 BUTTON(8): @(JOYButtonUsageRStick),
26 BUTTON(9): @(JOYButtonUsageStart),
27 BUTTON(10): @(JOYButtonUsageSelect),
28 BUTTON(11): @(JOYButtonUsageHome),
29 },
30
31 JOYAxisUsageMapping: @{
32 AXIS(3): @(JOYAxisUsageL1),
33 AXIS(6): @(JOYAxisUsageR1),
34 },
35
36 JOYAxes2DUsageMapping: @{
37 AXES2D(1): @(JOYAxes2DUsageLeftStick),
38 AXES2D(3): @(JOYAxes2DUsageRightStick),
39 },
40
41 JOYEmulateAxisButtons: @YES,
42 },
43
44 @(0x054C): @{ // Sony
45 /* Generally untested, but should work */
46
47 JOYAxisGroups: @{
48 @(kHIDUsage_GD_X): @(0),
49 @(kHIDUsage_GD_Y): @(0),
50 @(kHIDUsage_GD_Z): @(1),
51 @(kHIDUsage_GD_Rx): @(2),
52 @(kHIDUsage_GD_Ry): @(3),
53 @(kHIDUsage_GD_Rz): @(1),
54 },
55
56 JOYButtonUsageMapping: @{
57 BUTTON(1): @(JOYButtonUsageY),
58 BUTTON(2): @(JOYButtonUsageB),
59 BUTTON(3): @(JOYButtonUsageA),
60 BUTTON(4): @(JOYButtonUsageX),
61 BUTTON(5): @(JOYButtonUsageL1),
62 BUTTON(6): @(JOYButtonUsageR1),
63 BUTTON(7): @(JOYButtonUsageL2),
64 BUTTON(8): @(JOYButtonUsageR2),
65 BUTTON(9): @(JOYButtonUsageSelect),
66 BUTTON(10): @(JOYButtonUsageStart),
67 BUTTON(11): @(JOYButtonUsageLStick),
68 BUTTON(12): @(JOYButtonUsageRStick),
69 BUTTON(13): @(JOYButtonUsageHome),
70 BUTTON(14): @(JOYButtonUsageMisc),
71 },
72
73 JOYAxisUsageMapping: @{
74 AXIS(4): @(JOYAxisUsageL2),
75 AXIS(5): @(JOYAxisUsageR2),
76 },
77
78 JOYAxes2DUsageMapping: @{
79 AXES2D(1): @(JOYAxes2DUsageLeftStick),
80 AXES2D(4): @(JOYAxes2DUsageRightStick),
81 },
82
83 // When DualSense mode is activated on BT, The report ID is 0x31 and there's an extra byte
84 JOYCustomReports: @{
85 @(0x31): @[
86 /* 1D and 2D axes */
87 @{@"reportID": @(0x31), @"size":@8, @"offset":@0x08, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255},
88 @{@"reportID": @(0x31), @"size":@8, @"offset":@0x10, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @0, @"max": @255},
89 @{@"reportID": @(0x31), @"size":@8, @"offset":@0x18, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255},
90 @{@"reportID": @(0x31), @"size":@8, @"offset":@0x20, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255},
91 @{@"reportID": @(0x31), @"size":@8, @"offset":@0x28, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255},
92 @{@"reportID": @(0x31), @"size":@8, @"offset":@0x30, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0, @"max": @255},
93
94 /* Hat Switch*/
95 @{@"reportID": @(0x31), @"size":@4, @"offset":@0x40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Hatswitch), @"min": @0, @"max": @7},
96
97 /* Buttons */
98 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x44, @"usagePage":@(kHIDPage_Button), @"usage":@1},
99 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x45, @"usagePage":@(kHIDPage_Button), @"usage":@2},
100 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x46, @"usagePage":@(kHIDPage_Button), @"usage":@3},
101 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x47, @"usagePage":@(kHIDPage_Button), @"usage":@4},
102 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x48, @"usagePage":@(kHIDPage_Button), @"usage":@5},
103 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x49, @"usagePage":@(kHIDPage_Button), @"usage":@6},
104 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4A, @"usagePage":@(kHIDPage_Button), @"usage":@7},
105 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4B, @"usagePage":@(kHIDPage_Button), @"usage":@8},
106 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4C, @"usagePage":@(kHIDPage_Button), @"usage":@9},
107 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4D, @"usagePage":@(kHIDPage_Button), @"usage":@10},
108 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4E, @"usagePage":@(kHIDPage_Button), @"usage":@11},
109 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x4F, @"usagePage":@(kHIDPage_Button), @"usage":@12},
110 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x50, @"usagePage":@(kHIDPage_Button), @"usage":@13},
111 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x51, @"usagePage":@(kHIDPage_Button), @"usage":@14},
112 @{@"reportID": @(0x31), @"size":@1, @"offset":@0x52, @"usagePage":@(kHIDPage_Button), @"usage":@15},
113
114 @{@"reportID": @(0x31), @"size":@16, @"offset":@0x80, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)},
115 @{@"reportID": @(0x31), @"size":@16, @"offset":@0x90, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)},
116 @{@"reportID": @(0x31), @"size":@16, @"offset":@0xA0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)},
117 @{@"reportID": @(0x31), @"size":@16, @"offset":@0xB0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)},
118 @{@"reportID": @(0x31), @"size":@16, @"offset":@0xC0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)},
119 @{@"reportID": @(0x31), @"size":@16, @"offset":@0xD0, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)},
120 ],
121
122 @(1): @[
123 @{@"reportID": @(1), @"size":@16, @"offset":@0x78, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)},
124 @{@"reportID": @(1), @"size":@16, @"offset":@0x88, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)},
125 @{@"reportID": @(1), @"size":@16, @"offset":@0x98, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)},
126 @{@"reportID": @(1), @"size":@16, @"offset":@0xA8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)},
127 @{@"reportID": @(1), @"size":@16, @"offset":@0xB8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)},
128 @{@"reportID": @(1), @"size":@16, @"offset":@0xC8, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)},
129 ],
130 },
131
132 JOYIsSony: @YES,
133 }
134 };
135
136 hacksByName = @{
137 @"WUP-028": @{ // Nintendo GameCube Controller Adapter
138 JOYReportIDFilters: @[@[@1], @[@2], @[@3], @[@4]],
139 JOYButtonUsageMapping: @{
140 BUTTON(1): @(JOYButtonUsageA),
141 BUTTON(2): @(JOYButtonUsageB),
142 BUTTON(3): @(JOYButtonUsageX),
143 BUTTON(4): @(JOYButtonUsageY),
144 BUTTON(5): @(JOYButtonUsageStart),
145 BUTTON(6): @(JOYButtonUsageZ),
146 BUTTON(7): @(JOYButtonUsageR1),
147 BUTTON(8): @(JOYButtonUsageL1),
148 },
149
150 JOYAxisUsageMapping: @{
151 AXIS(3): @(JOYAxisUsageL1),
152 AXIS(6): @(JOYAxisUsageR1),
153 },
154
155 JOYAxes2DUsageMapping: @{
156 AXES2D(1): @(JOYAxes2DUsageLeftStick),
157 AXES2D(4): @(JOYAxes2DUsageRightStick),
158 },
159
160 JOYAxisGroups: @{
161 @(kHIDUsage_GD_X): @(0),
162 @(kHIDUsage_GD_Y): @(0),
163 @(kHIDUsage_GD_Z): @(2),
164 @(kHIDUsage_GD_Rx): @(1),
165 @(kHIDUsage_GD_Ry): @(1),
166 @(kHIDUsage_GD_Rz): @(3),
167 },
168
169 JOYRumbleUsage: @1,
170 JOYRumbleUsagePage: @0xFF00,
171
172 JOYConnectedUsage: @2,
173 JOYConnectedUsagePage: @0xFF00,
174
175 JOYActivationReport: [NSData dataWithBytes:&inline_const(uint8_t, 0x13) length:1],
176
177 JOYCustomReports: @{
178
179 // Rumble
180 @(-17): @[
181 @{@"reportID": @(1), @"size":@1, @"offset":@0, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1},
182 @{@"reportID": @(2), @"size":@1, @"offset":@8, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1},
183 @{@"reportID": @(3), @"size":@1, @"offset":@16, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1},
184 @{@"reportID": @(4), @"size":@1, @"offset":@24, @"usagePage":@(0xFF00), @"usage":@1, @"min": @0, @"max": @1},
185 ],
186
187 @(33): @[
188
189 // Player 1
190
191 @{@"reportID": @(1), @"size":@1, @"offset":@4, @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1},
192
193 @{@"reportID": @(1), @"size":@1, @"offset":@8, @"usagePage":@(kHIDPage_Button), @"usage":@1},
194 @{@"reportID": @(1), @"size":@1, @"offset":@9, @"usagePage":@(kHIDPage_Button), @"usage":@2},
195 @{@"reportID": @(1), @"size":@1, @"offset":@10,@"usagePage":@(kHIDPage_Button), @"usage":@3},
196 @{@"reportID": @(1), @"size":@1, @"offset":@11,@"usagePage":@(kHIDPage_Button), @"usage":@4},
197
198 @{@"reportID": @(1), @"size":@1, @"offset":@12, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)},
199 @{@"reportID": @(1), @"size":@1, @"offset":@13, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)},
200 @{@"reportID": @(1), @"size":@1, @"offset":@14, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)},
201 @{@"reportID": @(1), @"size":@1, @"offset":@15, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)},
202
203
204 @{@"reportID": @(1), @"size":@1, @"offset":@16, @"usagePage":@(kHIDPage_Button), @"usage":@5},
205 @{@"reportID": @(1), @"size":@1, @"offset":@17, @"usagePage":@(kHIDPage_Button), @"usage":@6},
206 @{@"reportID": @(1), @"size":@1, @"offset":@18, @"usagePage":@(kHIDPage_Button), @"usage":@7},
207 @{@"reportID": @(1), @"size":@1, @"offset":@19, @"usagePage":@(kHIDPage_Button), @"usage":@8},
208
209 @{@"reportID": @(1), @"size":@8, @"offset":@24, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255},
210 @{@"reportID": @(1), @"size":@8, @"offset":@32, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0},
211
212 @{@"reportID": @(1), @"size":@8, @"offset":@40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255},
213 @{@"reportID": @(1), @"size":@8, @"offset":@48, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0},
214
215 @{@"reportID": @(1), @"size":@8, @"offset":@56, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255},
216 @{@"reportID": @(1), @"size":@8, @"offset":@64, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255},
217
218 // Player 2
219
220 @{@"reportID": @(2), @"size":@1, @"offset":@(4 + 72), @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1},
221
222
223 @{@"reportID": @(2), @"size":@1, @"offset":@(8 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@1},
224 @{@"reportID": @(2), @"size":@1, @"offset":@(9 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@2},
225 @{@"reportID": @(2), @"size":@1, @"offset":@(10 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@3},
226 @{@"reportID": @(2), @"size":@1, @"offset":@(11 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@4},
227
228 @{@"reportID": @(2), @"size":@1, @"offset":@(12 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)},
229 @{@"reportID": @(2), @"size":@1, @"offset":@(13 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)},
230 @{@"reportID": @(2), @"size":@1, @"offset":@(14 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)},
231 @{@"reportID": @(2), @"size":@1, @"offset":@(15 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)},
232
233
234 @{@"reportID": @(2), @"size":@1, @"offset":@(16 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@5},
235 @{@"reportID": @(2), @"size":@1, @"offset":@(17 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@6},
236 @{@"reportID": @(2), @"size":@1, @"offset":@(18 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@7},
237 @{@"reportID": @(2), @"size":@1, @"offset":@(19 + 72), @"usagePage":@(kHIDPage_Button), @"usage":@8},
238
239 @{@"reportID": @(2), @"size":@8, @"offset":@(24 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255},
240 @{@"reportID": @(2), @"size":@8, @"offset":@(32 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0},
241
242 @{@"reportID": @(2), @"size":@8, @"offset":@(40 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255},
243 @{@"reportID": @(2), @"size":@8, @"offset":@(48 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0},
244
245 @{@"reportID": @(2), @"size":@8, @"offset":@(56 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255},
246 @{@"reportID": @(2), @"size":@8, @"offset":@(64 + 72), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255},
247
248 // Player 3
249
250 @{@"reportID": @(3), @"size":@1, @"offset":@(4 + 144), @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1},
251
252 @{@"reportID": @(3), @"size":@1, @"offset":@(8 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@1},
253 @{@"reportID": @(3), @"size":@1, @"offset":@(9 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@2},
254 @{@"reportID": @(3), @"size":@1, @"offset":@(10 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@3},
255 @{@"reportID": @(3), @"size":@1, @"offset":@(11 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@4},
256
257 @{@"reportID": @(3), @"size":@1, @"offset":@(12 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)},
258 @{@"reportID": @(3), @"size":@1, @"offset":@(13 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)},
259 @{@"reportID": @(3), @"size":@1, @"offset":@(14 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)},
260 @{@"reportID": @(3), @"size":@1, @"offset":@(15 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)},
261
262
263 @{@"reportID": @(3), @"size":@1, @"offset":@(16 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@5},
264 @{@"reportID": @(3), @"size":@1, @"offset":@(17 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@6},
265 @{@"reportID": @(3), @"size":@1, @"offset":@(18 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@7},
266 @{@"reportID": @(3), @"size":@1, @"offset":@(19 + 144), @"usagePage":@(kHIDPage_Button), @"usage":@8},
267
268 @{@"reportID": @(3), @"size":@8, @"offset":@(24 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255},
269 @{@"reportID": @(3), @"size":@8, @"offset":@(32 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0},
270
271 @{@"reportID": @(3), @"size":@8, @"offset":@(40 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255},
272 @{@"reportID": @(3), @"size":@8, @"offset":@(48 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0},
273
274 @{@"reportID": @(3), @"size":@8, @"offset":@(56 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255},
275 @{@"reportID": @(3), @"size":@8, @"offset":@(64 + 144), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255},
276
277 // Player 4
278
279 @{@"reportID": @(4), @"size":@1, @"offset":@(4 + 216), @"usagePage":@(0xFF00), @"usage":@2, @"min": @0, @"max": @1},
280
281 @{@"reportID": @(4), @"size":@1, @"offset":@(8 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@1},
282 @{@"reportID": @(4), @"size":@1, @"offset":@(9 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@2},
283 @{@"reportID": @(4), @"size":@1, @"offset":@(10 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@3},
284 @{@"reportID": @(4), @"size":@1, @"offset":@(11 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@4},
285
286 @{@"reportID": @(4), @"size":@1, @"offset":@(12 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)},
287 @{@"reportID": @(4), @"size":@1, @"offset":@(13 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)},
288 @{@"reportID": @(4), @"size":@1, @"offset":@(14 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)},
289 @{@"reportID": @(4), @"size":@1, @"offset":@(15 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)},
290
291
292 @{@"reportID": @(4), @"size":@1, @"offset":@(16 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@5},
293 @{@"reportID": @(4), @"size":@1, @"offset":@(17 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@6},
294 @{@"reportID": @(4), @"size":@1, @"offset":@(18 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@7},
295 @{@"reportID": @(4), @"size":@1, @"offset":@(19 + 216), @"usagePage":@(kHIDPage_Button), @"usage":@8},
296
297 @{@"reportID": @(4), @"size":@8, @"offset":@(24 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @255},
298 @{@"reportID": @(4), @"size":@8, @"offset":@(32 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @255, @"max": @0},
299
300 @{@"reportID": @(4), @"size":@8, @"offset":@(40 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255},
301 @{@"reportID": @(4), @"size":@8, @"offset":@(48 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @255, @"max": @0},
302
303 @{@"reportID": @(4), @"size":@8, @"offset":@(56 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Z), @"min": @0, @"max": @255},
304 @{@"reportID": @(4), @"size":@8, @"offset":@(64 + 216), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rz), @"min": @0, @"max": @255},
305
306
307 ]},
308 },
309
310 @"GameCube Controller Adapter": @{ // GameCube Controller PC Adapter
311 JOYAxisGroups: @{
312 @(kHIDUsage_GD_X): @(0),
313 @(kHIDUsage_GD_Y): @(0),
314 @(kHIDUsage_GD_Z): @(1),
315 @(kHIDUsage_GD_Rx): @(2),
316 @(kHIDUsage_GD_Ry): @(3),
317 @(kHIDUsage_GD_Rz): @(1),
318 },
319 JOYReportIDFilters: @[@[@1], @[@2], @[@3], @[@4]],
320 JOYButtonUsageMapping: @{
321 BUTTON(1): @(JOYButtonUsageX),
322 BUTTON(2): @(JOYButtonUsageA),
323 BUTTON(3): @(JOYButtonUsageB),
324 BUTTON(4): @(JOYButtonUsageY),
325 BUTTON(5): @(JOYButtonUsageL1),
326 BUTTON(6): @(JOYButtonUsageR1),
327 BUTTON(8): @(JOYButtonUsageZ),
328 BUTTON(10): @(JOYButtonUsageStart),
329 BUTTON(13): @(JOYButtonUsageDPadUp),
330 BUTTON(14): @(JOYButtonUsageDPadRight),
331 BUTTON(15): @(JOYButtonUsageDPadDown),
332 BUTTON(16): @(JOYButtonUsageDPadLeft),
333 },
334
335 JOYAxisUsageMapping: @{
336 AXIS(4): @(JOYAxisUsageL1),
337 AXIS(5): @(JOYAxisUsageR1),
338 },
339
340 JOYAxes2DUsageMapping: @{
341 AXES2D(1): @(JOYAxes2DUsageLeftStick),
342 AXES2D(3): @(JOYAxes2DUsageRightStick),
343 },
344
345 JOYRumbleUsage: @1,
346 JOYRumbleUsagePage: @0xFF00,
347 JOYRumbleMin: @0,
348 JOYRumbleMax: @255,
349 JOYSwapZRz: @YES,
350 },
351
352 @"Twin USB Joystick": @{ // DualShock PC Adapter
353 JOYAxisGroups: @{
354 @(kHIDUsage_GD_X): @(0),
355 @(kHIDUsage_GD_Y): @(0),
356 @(kHIDUsage_GD_Z): @(1),
357 @(kHIDUsage_GD_Rx): @(2),
358 @(kHIDUsage_GD_Ry): @(2),
359 @(kHIDUsage_GD_Rz): @(1),
360 },
361 JOYReportIDFilters: @[@[@1], @[@2]],
362 JOYButtonUsageMapping: @{
363 BUTTON(1): @(JOYButtonUsageX),
364 BUTTON(2): @(JOYButtonUsageA),
365 BUTTON(3): @(JOYButtonUsageB),
366 BUTTON(4): @(JOYButtonUsageY),
367 BUTTON(5): @(JOYButtonUsageL2),
368 BUTTON(6): @(JOYButtonUsageR2),
369 BUTTON(7): @(JOYButtonUsageL1),
370 BUTTON(8): @(JOYButtonUsageR1),
371 BUTTON(9): @(JOYButtonUsageSelect),
372 BUTTON(10): @(JOYButtonUsageStart),
373 BUTTON(11): @(JOYButtonUsageLStick),
374 BUTTON(12): @(JOYButtonUsageRStick),
375 BUTTON(13): @(JOYButtonUsageDPadUp),
376 BUTTON(14): @(JOYButtonUsageDPadRight),
377 BUTTON(15): @(JOYButtonUsageDPadDown),
378 BUTTON(16): @(JOYButtonUsageDPadLeft),
379 },
380
381 JOYAxes2DUsageMapping: @{
382 AXES2D(1): @(JOYAxes2DUsageLeftStick),
383 AXES2D(6): @(JOYAxes2DUsageRightStick),
384 },
385
386 JOYSwapZRz: @YES,
387 },
388
389 @"Pro Controller": @{ // Switch Pro Controller
390 JOYIsSwitch: @YES,
391 JOYAxisGroups: @{
392 @(kHIDUsage_GD_X): @(0),
393 @(kHIDUsage_GD_Y): @(0),
394 @(kHIDUsage_GD_Z): @(0),
395 @(kHIDUsage_GD_Rx): @(1),
396 @(kHIDUsage_GD_Ry): @(1),
397 @(kHIDUsage_GD_Rz): @(1),
398 },
399
400 JOYButtonUsageMapping: @{
401 BUTTON(1): @(JOYButtonUsageB),
402 BUTTON(2): @(JOYButtonUsageA),
403 BUTTON(3): @(JOYButtonUsageY),
404 BUTTON(4): @(JOYButtonUsageX),
405 BUTTON(5): @(JOYButtonUsageL1),
406 BUTTON(6): @(JOYButtonUsageR1),
407 BUTTON(7): @(JOYButtonUsageL2),
408 BUTTON(8): @(JOYButtonUsageR2),
409 BUTTON(9): @(JOYButtonUsageSelect),
410 BUTTON(10): @(JOYButtonUsageStart),
411 BUTTON(11): @(JOYButtonUsageLStick),
412 BUTTON(12): @(JOYButtonUsageRStick),
413 BUTTON(13): @(JOYButtonUsageHome),
414 BUTTON(14): @(JOYButtonUsageMisc),
415 },
416
417 JOYAxes2DUsageMapping: @{
418 AXES2D(1): @(JOYAxes2DUsageLeftStick),
419 AXES2D(4): @(JOYAxes2DUsageRightStick),
420 },
421
422 JOYCustomReports: @{
423 @(0x30): @[
424
425 @{@"reportID": @(1), @"size":@1, @"offset":@16, @"usagePage":@(kHIDPage_Button), @"usage":@3},
426 @{@"reportID": @(1), @"size":@1, @"offset":@17, @"usagePage":@(kHIDPage_Button), @"usage":@4},
427 @{@"reportID": @(1), @"size":@1, @"offset":@18, @"usagePage":@(kHIDPage_Button), @"usage":@1},
428 @{@"reportID": @(1), @"size":@1, @"offset":@19, @"usagePage":@(kHIDPage_Button), @"usage":@2},
429
430 // SR and SL not used on the Pro Controller
431 @{@"reportID": @(1), @"size":@1, @"offset":@22, @"usagePage":@(kHIDPage_Button), @"usage":@6},
432 @{@"reportID": @(1), @"size":@1, @"offset":@23, @"usagePage":@(kHIDPage_Button), @"usage":@8},
433
434 @{@"reportID": @(1), @"size":@1, @"offset":@24, @"usagePage":@(kHIDPage_Button), @"usage":@9},
435 @{@"reportID": @(1), @"size":@1, @"offset":@25, @"usagePage":@(kHIDPage_Button), @"usage":@10},
436 @{@"reportID": @(1), @"size":@1, @"offset":@26, @"usagePage":@(kHIDPage_Button), @"usage":@12},
437 @{@"reportID": @(1), @"size":@1, @"offset":@27, @"usagePage":@(kHIDPage_Button), @"usage":@11},
438
439 @{@"reportID": @(1), @"size":@1, @"offset":@28, @"usagePage":@(kHIDPage_Button), @"usage":@13},
440 @{@"reportID": @(1), @"size":@1, @"offset":@29, @"usagePage":@(kHIDPage_Button), @"usage":@14},
441
442 @{@"reportID": @(1), @"size":@1, @"offset":@32, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)},
443 @{@"reportID": @(1), @"size":@1, @"offset":@33, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)},
444 @{@"reportID": @(1), @"size":@1, @"offset":@34, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)},
445 @{@"reportID": @(1), @"size":@1, @"offset":@35, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)},
446
447 // SR and SL not used on the Pro Controller
448 @{@"reportID": @(1), @"size":@1, @"offset":@38, @"usagePage":@(kHIDPage_Button), @"usage":@5},
449 @{@"reportID": @(1), @"size":@1, @"offset":@39, @"usagePage":@(kHIDPage_Button), @"usage":@7},
450
451 /* Sticks */
452 @{@"reportID": @(1), @"size":@12, @"offset":@40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @0xFFF},
453 @{@"reportID": @(1), @"size":@12, @"offset":@52, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @0xFFF, @"max": @0},
454
455 @{@"reportID": @(1), @"size":@12, @"offset":@64, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @0xFFF},
456 @{@"reportID": @(1), @"size":@12, @"offset":@76, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0xFFF, @"max": @0},
457
458 @{@"reportID": @(1), @"size":@16, @"offset":@96, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)},
459 @{@"reportID": @(1), @"size":@16, @"offset":@112, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)},
460 @{@"reportID": @(1), @"size":@16, @"offset":@128, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)},
461 @{@"reportID": @(1), @"size":@16, @"offset":@144, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)},
462 @{@"reportID": @(1), @"size":@16, @"offset":@160, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)},
463 @{@"reportID": @(1), @"size":@16, @"offset":@176, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)},
464 ],
465 },
466
467 JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken
468 },
469
470 @"Joy-Con (L)": @{ // Switch Pro Controller
471 JOYIsSwitch: @YES,
472 JOYJoyCon: @(JOYJoyConTypeLeft),
473 JOYAxisGroups: @{
474 @(kHIDUsage_GD_X): @(0),
475 @(kHIDUsage_GD_Y): @(0),
476 @(kHIDUsage_GD_Z): @(0),
477 },
478
479 JOYButtonUsageMapping: @{
480 BUTTON(5): @(JOYButtonUsageL1),
481 BUTTON(7): @(JOYButtonUsageL2),
482 BUTTON(9): @(JOYButtonUsageSelect),
483 BUTTON(11): @(JOYButtonUsageLStick),
484 BUTTON(14): @(JOYButtonUsageMisc),
485 BUTTON(15): @(JOYButtonUsageL3),
486 BUTTON(16): @(JOYButtonUsageR3),
487 },
488
489 JOYAxes2DUsageMapping: @{
490 AXES2D(1): @(JOYAxes2DUsageLeftStick),
491 },
492
493 JOYCustomReports: @{
494 @(0x30): @[
495 @{@"reportID": @(1), @"size":@1, @"offset":@24, @"usagePage":@(kHIDPage_Button), @"usage":@9},
496 @{@"reportID": @(1), @"size":@1, @"offset":@27, @"usagePage":@(kHIDPage_Button), @"usage":@11},
497
498 @{@"reportID": @(1), @"size":@1, @"offset":@29, @"usagePage":@(kHIDPage_Button), @"usage":@14},
499
500 @{@"reportID": @(1), @"size":@1, @"offset":@32, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadDown)},
501 @{@"reportID": @(1), @"size":@1, @"offset":@33, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadUp)},
502 @{@"reportID": @(1), @"size":@1, @"offset":@34, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadRight)},
503 @{@"reportID": @(1), @"size":@1, @"offset":@35, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_DPadLeft)},
504
505 @{@"reportID": @(1), @"size":@1, @"offset":@36, @"usagePage":@(kHIDPage_Button), @"usage":@16},
506 @{@"reportID": @(1), @"size":@1, @"offset":@37, @"usagePage":@(kHIDPage_Button), @"usage":@15},
507 @{@"reportID": @(1), @"size":@1, @"offset":@38, @"usagePage":@(kHIDPage_Button), @"usage":@5},
508 @{@"reportID": @(1), @"size":@1, @"offset":@39, @"usagePage":@(kHIDPage_Button), @"usage":@7},
509
510 /* Sticks */
511 @{@"reportID": @(1), @"size":@12, @"offset":@40, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_X), @"min": @0, @"max": @0xFFF},
512 @{@"reportID": @(1), @"size":@12, @"offset":@52, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Y), @"min": @0xFFF, @"max": @0},
513
514 @{@"reportID": @(1), @"size":@16, @"offset":@96, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)},
515 @{@"reportID": @(1), @"size":@16, @"offset":@112, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)},
516 @{@"reportID": @(1), @"size":@16, @"offset":@128, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)},
517 @{@"reportID": @(1), @"size":@16, @"offset":@144, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)},
518 @{@"reportID": @(1), @"size":@16, @"offset":@160, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)},
519 @{@"reportID": @(1), @"size":@16, @"offset":@176, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)},
520 ],
521 },
522
523 JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken
524 },
525
526 @"Joy-Con (R)": @{ // Switch Pro Controller
527 JOYIsSwitch: @YES,
528 JOYJoyCon: @(JOYJoyConTypeRight),
529 JOYAxisGroups: @{
530 @(kHIDUsage_GD_Rx): @(1),
531 @(kHIDUsage_GD_Ry): @(1),
532 @(kHIDUsage_GD_Rz): @(1),
533 },
534
535 JOYButtonUsageMapping: @{
536 BUTTON(1): @(JOYButtonUsageB),
537 BUTTON(2): @(JOYButtonUsageA),
538 BUTTON(3): @(JOYButtonUsageY),
539 BUTTON(4): @(JOYButtonUsageX),
540 BUTTON(6): @(JOYButtonUsageR1),
541 BUTTON(8): @(JOYButtonUsageR2),
542 BUTTON(10): @(JOYButtonUsageStart),
543 BUTTON(12): @(JOYButtonUsageRStick),
544 BUTTON(13): @(JOYButtonUsageHome),
545 BUTTON(15): @(JOYButtonUsageL3),
546 BUTTON(16): @(JOYButtonUsageR3),
547 },
548
549 JOYAxes2DUsageMapping: @{
550 AXES2D(4): @(JOYAxes2DUsageRightStick),
551 },
552
553 JOYCustomReports: @{
554 @(0x30): @[
555
556 @{@"reportID": @(1), @"size":@1, @"offset":@16, @"usagePage":@(kHIDPage_Button), @"usage":@3},
557 @{@"reportID": @(1), @"size":@1, @"offset":@17, @"usagePage":@(kHIDPage_Button), @"usage":@4},
558 @{@"reportID": @(1), @"size":@1, @"offset":@18, @"usagePage":@(kHIDPage_Button), @"usage":@1},
559 @{@"reportID": @(1), @"size":@1, @"offset":@19, @"usagePage":@(kHIDPage_Button), @"usage":@2},
560 @{@"reportID": @(1), @"size":@1, @"offset":@20, @"usagePage":@(kHIDPage_Button), @"usage":@16},
561 @{@"reportID": @(1), @"size":@1, @"offset":@21, @"usagePage":@(kHIDPage_Button), @"usage":@15},
562 @{@"reportID": @(1), @"size":@1, @"offset":@22, @"usagePage":@(kHIDPage_Button), @"usage":@6},
563 @{@"reportID": @(1), @"size":@1, @"offset":@23, @"usagePage":@(kHIDPage_Button), @"usage":@8},
564
565 @{@"reportID": @(1), @"size":@1, @"offset":@25, @"usagePage":@(kHIDPage_Button), @"usage":@10},
566 @{@"reportID": @(1), @"size":@1, @"offset":@26, @"usagePage":@(kHIDPage_Button), @"usage":@12},
567 @{@"reportID": @(1), @"size":@1, @"offset":@28, @"usagePage":@(kHIDPage_Button), @"usage":@13},
568
569 /* Sticks */
570 @{@"reportID": @(1), @"size":@12, @"offset":@64, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @0xFFF},
571 @{@"reportID": @(1), @"size":@12, @"offset":@76, @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0xFFF, @"max": @0},
572
573 // The X axis is inverted on the right Joy-Con
574 @{@"reportID": @(1), @"size":@16, @"offset":@96, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisZ)},
575 @{@"reportID": @(1), @"size":@16, @"offset":@112, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisX)},
576 @{@"reportID": @(1), @"size":@16, @"offset":@128, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AccelerationAxisY)},
577 @{@"reportID": @(1), @"size":@16, @"offset":@144, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityZAxis)},
578 @{@"reportID": @(1), @"size":@16, @"offset":@160, @"usagePage":@(kHIDPage_Sensor), @"min": @0x7FFF, @"max": @-0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityXAxis)},
579 @{@"reportID": @(1), @"size":@16, @"offset":@176, @"usagePage":@(kHIDPage_Sensor), @"min": @-0x7FFF, @"max": @0x7FFF, @"usage":@(kHIDUsage_Snsr_Data_Motion_AngularVelocityYAxis)},
580 ],
581 },
582
583 JOYIgnoredReports: @[@(0x30)], // Ignore the real 0x30 report as it's broken
584 },
585
586
587 @"NSW wired controller": @{ // Wired Switch controllers
588 JOYButtonUsageMapping: @{
589 BUTTON(1): @(JOYButtonUsageY),
590 BUTTON(2): @(JOYButtonUsageB),
591 BUTTON(3): @(JOYButtonUsageA),
592 BUTTON(4): @(JOYButtonUsageX),
593 BUTTON(5): @(JOYButtonUsageL1),
594 BUTTON(6): @(JOYButtonUsageR1),
595 BUTTON(7): @(JOYButtonUsageL2),
596 BUTTON(8): @(JOYButtonUsageR2),
597 BUTTON(9): @(JOYButtonUsageSelect),
598 BUTTON(10): @(JOYButtonUsageStart),
599 BUTTON(11): @(JOYButtonUsageLStick),
600 BUTTON(12): @(JOYButtonUsageRStick),
601 BUTTON(13): @(JOYButtonUsageHome),
602 BUTTON(14): @(JOYButtonUsageMisc),
603 },
604 },
605
606 @"PLAYSTATION(R)3 Controller": @{ // DualShock 3
607 JOYAxisGroups: @{
608 @(kHIDUsage_GD_X): @(0),
609 @(kHIDUsage_GD_Y): @(0),
610 @(kHIDUsage_GD_Z): @(1),
611 @(kHIDUsage_GD_Rx): @(2),
612 @(kHIDUsage_GD_Ry): @(3),
613 @(kHIDUsage_GD_Rz): @(1),
614 },
615
616 JOYButtonUsageMapping: @{
617 BUTTON(1): @(JOYButtonUsageSelect),
618 BUTTON(2): @(JOYButtonUsageL3),
619 BUTTON(3): @(JOYButtonUsageR3),
620 BUTTON(4): @(JOYButtonUsageStart),
621 BUTTON(5): @(JOYButtonUsageDPadUp),
622 BUTTON(6): @(JOYButtonUsageDPadRight),
623 BUTTON(7): @(JOYButtonUsageDPadDown),
624 BUTTON(8): @(JOYButtonUsageDPadLeft),
625 BUTTON(9): @(JOYButtonUsageL2),
626 BUTTON(10): @(JOYButtonUsageR2),
627 BUTTON(11): @(JOYButtonUsageL1),
628 BUTTON(12): @(JOYButtonUsageR1),
629 BUTTON(13): @(JOYButtonUsageX),
630 BUTTON(14): @(JOYButtonUsageA),
631 BUTTON(15): @(JOYButtonUsageB),
632 BUTTON(16): @(JOYButtonUsageY),
633 BUTTON(17): @(JOYButtonUsageHome),
634 },
635
636 JOYAxisUsageMapping: @{
637 AXIS(4): @(JOYAxisUsageL1),
638 AXIS(5): @(JOYAxisUsageR1),
639 AXIS(8): @(JOYAxisUsageL2),
640 AXIS(9): @(JOYAxisUsageR2),
641 },
642
643 JOYAxes2DUsageMapping: @{
644 AXES2D(1): @(JOYAxes2DUsageLeftStick),
645 AXES2D(3): @(JOYAxes2DUsageRightStick),
646 },
647
648 JOYCustomReports: @{
649 @(0x01): @[
650 /* Pressure sensitive inputs */
651 @{@"reportID": @(1), @"size":@8, @"offset":@(13 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
652 @{@"reportID": @(1), @"size":@8, @"offset":@(14 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
653 @{@"reportID": @(1), @"size":@8, @"offset":@(15 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
654 @{@"reportID": @(1), @"size":@8, @"offset":@(16 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
655 @{@"reportID": @(1), @"size":@8, @"offset":@(17 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Dial), @"min": @0, @"max": @255},
656 @{@"reportID": @(1), @"size":@8, @"offset":@(18 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Wheel), @"min": @0, @"max": @255},
657 @{@"reportID": @(1), @"size":@8, @"offset":@(19 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Rx), @"min": @0, @"max": @255},
658 @{@"reportID": @(1), @"size":@8, @"offset":@(20 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Ry), @"min": @0, @"max": @255},
659 @{@"reportID": @(1), @"size":@8, @"offset":@(21 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
660 @{@"reportID": @(1), @"size":@8, @"offset":@(22 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
661 @{@"reportID": @(1), @"size":@8, @"offset":@(23 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
662 @{@"reportID": @(1), @"size":@8, @"offset":@(24 * 8), @"usagePage":@(kHIDPage_GenericDesktop), @"usage":@(kHIDUsage_GD_Slider), @"min": @0, @"max": @255},
663 ]
664 },
665
666 JOYIsDualShock3: @YES,
667 },
668
669 };
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.