]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/UefiUsbLib/Hid.c
update comments and add assert for these files.
[mirror_edk2.git] / MdePkg / Library / UefiUsbLib / Hid.c
CommitLineData
ce821dff 1/** @file\r
2\r
3Copyright (c) 2004, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12\r
13**/\r
14\r
15#include <UefiUsbLibInternal.h>\r
16\r
17\r
18/**\r
19 Get Hid Descriptor\r
20\r
21 @param UsbIo EFI_USB_IO_PROTOCOL\r
22 @param InterfaceNum Hid interface number\r
23 @param HidDescriptor Caller allocated buffer to store Usb hid descriptor if\r
24 successfully returned.\r
25\r
26 @return EFI_SUCCESS\r
27 @return EFI_DEVICE_ERROR\r
28 @return EFI_TIMEOUT\r
29\r
30**/\r
31EFI_STATUS\r
32UsbGetHidDescriptor (\r
33 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
34 IN UINT8 InterfaceNum,\r
35 OUT EFI_USB_HID_DESCRIPTOR *HidDescriptor\r
36 )\r
37{\r
38 UINT32 Status;\r
39 EFI_STATUS Result;\r
40 EFI_USB_DEVICE_REQUEST Request;\r
8069d49e
LG
41 \r
42 if (UsbIo == NULL) {\r
43 return EFI_INVALID_PARAMETER;\r
44 }\r
ce821dff 45\r
46 Request.RequestType = 0x81;\r
47 Request.Request = 0x06;\r
48 Request.Value = (UINT16) (0x21 << 8);\r
49 Request.Index = InterfaceNum;\r
50 Request.Length = sizeof (EFI_USB_HID_DESCRIPTOR);\r
51\r
52 Result = UsbIo->UsbControlTransfer (\r
53 UsbIo,\r
54 &Request,\r
55 EfiUsbDataIn,\r
56 TIMEOUT_VALUE,\r
57 HidDescriptor,\r
58 sizeof (EFI_USB_HID_DESCRIPTOR),\r
59 &Status\r
60 );\r
61\r
62 return Result;\r
63\r
64}\r
65//\r
66// Function to get Report Class descriptor\r
67//\r
68\r
69/**\r
70 get Report Class descriptor\r
71\r
72 @param UsbIo EFI_USB_IO_PROTOCOL.\r
73 @param InterfaceNum Report interface number.\r
74 @param DescriptorSize Length of DescriptorBuffer.\r
75 @param DescriptorBuffer Caller allocated buffer to store Usb report descriptor\r
76 if successfully returned.\r
77\r
78 @return EFI_SUCCESS\r
79 @return EFI_DEVICE_ERROR\r
80 @return EFI_TIMEOUT\r
81\r
82**/\r
83EFI_STATUS\r
84UsbGetReportDescriptor (\r
85 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
86 IN UINT8 InterfaceNum,\r
87 IN UINT16 DescriptorSize,\r
88 OUT UINT8 *DescriptorBuffer\r
89 )\r
90{\r
91 UINT32 Status;\r
92 EFI_STATUS Result;\r
93 EFI_USB_DEVICE_REQUEST Request;\r
94\r
8069d49e
LG
95 if (UsbIo == NULL) {\r
96 return EFI_INVALID_PARAMETER;\r
97 }\r
ce821dff 98 //\r
99 // Fill Device request packet\r
100 //\r
101 Request.RequestType = 0x81;\r
102 Request.Request = 0x06;\r
103 Request.Value = (UINT16) (0x22 << 8);\r
104 Request.Index = InterfaceNum;\r
105 Request.Length = DescriptorSize;\r
106\r
107 Result = UsbIo->UsbControlTransfer (\r
108 UsbIo,\r
109 &Request,\r
110 EfiUsbDataIn,\r
111 TIMEOUT_VALUE,\r
112 DescriptorBuffer,\r
113 DescriptorSize,\r
114 &Status\r
115 );\r
116\r
117 return Result;\r
118\r
119}\r
120//\r
121// Following are HID class request\r
122//\r
123\r
124/**\r
125 Get Hid Protocol Request\r
126\r
127 @param UsbIo EFI_USB_IO_PROTOCOL\r
128 @param Interface Which interface the caller wants to get protocol\r
129 @param Protocol Protocol value returned.\r
130\r
131 @return EFI_SUCCESS\r
132 @return EFI_DEVICE_ERROR\r
133 @return EFI_TIMEOUT\r
134\r
135**/\r
136EFI_STATUS\r
137UsbGetProtocolRequest (\r
138 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
139 IN UINT8 Interface,\r
140 IN UINT8 *Protocol\r
141 )\r
142{\r
143 UINT32 Status;\r
144 EFI_STATUS Result;\r
145 EFI_USB_DEVICE_REQUEST Request;\r
146\r
8069d49e
LG
147 if (UsbIo == NULL) {\r
148 return EFI_INVALID_PARAMETER;\r
149 }\r
ce821dff 150 //\r
151 // Fill Device request packet\r
152 //\r
153 Request.RequestType = 0xa1;\r
154 //\r
155 // 10100001b;\r
156 //\r
157 Request.Request = EFI_USB_GET_PROTOCOL_REQUEST;\r
158 Request.Value = 0;\r
159 Request.Index = Interface;\r
160 Request.Length = 1;\r
161\r
162 Result = UsbIo->UsbControlTransfer (\r
163 UsbIo,\r
164 &Request,\r
165 EfiUsbDataIn,\r
166 TIMEOUT_VALUE,\r
167 Protocol,\r
168 sizeof (UINT8),\r
169 &Status\r
170 );\r
171\r
172 return Result;\r
173}\r
174\r
175\r
176\r
177/**\r
178 Set Hid Protocol Request\r
179\r
180 @param UsbIo EFI_USB_IO_PROTOCOL\r
181 @param Interface Which interface the caller wants to set protocol\r
182 @param Protocol Protocol value the caller wants to set.\r
183\r
184 @return EFI_SUCCESS\r
185 @return EFI_DEVICE_ERROR\r
186 @return EFI_TIMEOUT\r
187\r
188**/\r
189EFI_STATUS\r
190UsbSetProtocolRequest (\r
191 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
192 IN UINT8 Interface,\r
193 IN UINT8 Protocol\r
194 )\r
195{\r
196 UINT32 Status;\r
197 EFI_STATUS Result;\r
198 EFI_USB_DEVICE_REQUEST Request;\r
199\r
8069d49e
LG
200 if (UsbIo == NULL) {\r
201 return EFI_INVALID_PARAMETER;\r
202 }\r
ce821dff 203 //\r
204 // Fill Device request packet\r
205 //\r
206 Request.RequestType = 0x21;\r
207 //\r
208 // 00100001b;\r
209 //\r
210 Request.Request = EFI_USB_SET_PROTOCOL_REQUEST;\r
211 Request.Value = Protocol;\r
212 Request.Index = Interface;\r
213 Request.Length = 0;\r
214\r
215 Result = UsbIo->UsbControlTransfer (\r
216 UsbIo,\r
217 &Request,\r
218 EfiUsbNoData,\r
219 TIMEOUT_VALUE,\r
220 NULL,\r
221 0,\r
222 &Status\r
223 );\r
224 return Result;\r
225}\r
226\r
227\r
228\r
229/**\r
230 Set Idel request.\r
231\r
232 @param UsbIo EFI_USB_IO_PROTOCOL\r
233 @param Interface Which interface the caller wants to set.\r
234 @param ReportId Which report the caller wants to set.\r
235 @param Duration Idle rate the caller wants to set.\r
236\r
237 @return EFI_SUCCESS\r
238 @return EFI_DEVICE_ERROR\r
239 @return EFI_TIMEOUT\r
240\r
241**/\r
242EFI_STATUS\r
243UsbSetIdleRequest (\r
244 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
245 IN UINT8 Interface,\r
246 IN UINT8 ReportId,\r
247 IN UINT8 Duration\r
248 )\r
249{\r
250 UINT32 Status;\r
251 EFI_STATUS Result;\r
252 EFI_USB_DEVICE_REQUEST Request;\r
253\r
8069d49e
LG
254 if (UsbIo == NULL) {\r
255 return EFI_INVALID_PARAMETER;\r
256 }\r
ce821dff 257 //\r
258 // Fill Device request packet\r
259 //\r
260 Request.RequestType = 0x21;\r
261 //\r
262 // 00100001b;\r
263 //\r
264 Request.Request = EFI_USB_SET_IDLE_REQUEST;\r
265 Request.Value = (UINT16) ((Duration << 8) | ReportId);\r
266 Request.Index = Interface;\r
267 Request.Length = 0;\r
268\r
269 Result = UsbIo->UsbControlTransfer (\r
270 UsbIo,\r
271 &Request,\r
272 EfiUsbNoData,\r
273 TIMEOUT_VALUE,\r
274 NULL,\r
275 0,\r
276 &Status\r
277 );\r
278 return Result;\r
279}\r
280\r
281\r
282/**\r
283 Get Idel request.\r
284\r
285 @param UsbIo EFI_USB_IO_PROTOCOL\r
286 @param Interface Which interface the caller wants to get.\r
287 @param ReportId Which report the caller wants to get.\r
288 @param Duration Idle rate the caller wants to get.\r
289\r
290 @return EFI_SUCCESS\r
291 @return EFI_DEVICE_ERROR\r
292 @return EFI_TIMEOUT\r
293\r
294**/\r
295EFI_STATUS\r
296UsbGetIdleRequest (\r
297 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
298 IN UINT8 Interface,\r
299 IN UINT8 ReportId,\r
300 OUT UINT8 *Duration\r
301 )\r
302{\r
303 UINT32 Status;\r
304 EFI_STATUS Result;\r
305 EFI_USB_DEVICE_REQUEST Request;\r
8069d49e
LG
306 \r
307 if (UsbIo == NULL) {\r
308 return EFI_INVALID_PARAMETER;\r
309 }\r
ce821dff 310 //\r
311 // Fill Device request packet\r
312 //\r
313 Request.RequestType = 0xa1;\r
314 //\r
315 // 10100001b;\r
316 //\r
317 Request.Request = EFI_USB_GET_IDLE_REQUEST;\r
318 Request.Value = ReportId;\r
319 Request.Index = Interface;\r
320 Request.Length = 1;\r
321\r
322 Result = UsbIo->UsbControlTransfer (\r
323 UsbIo,\r
324 &Request,\r
325 EfiUsbDataIn,\r
326 TIMEOUT_VALUE,\r
327 Duration,\r
328 1,\r
329 &Status\r
330 );\r
331\r
332 return Result;\r
333}\r
334\r
335\r
336\r
337/**\r
338 Hid Set Report request.\r
339\r
340 @param UsbIo EFI_USB_IO_PROTOCOL\r
341 @param Interface Which interface the caller wants to set.\r
342 @param ReportId Which report the caller wants to set.\r
343 @param ReportType Type of report.\r
344 @param ReportLen Length of report descriptor.\r
345 @param Report Report Descriptor buffer.\r
346\r
347 @return EFI_SUCCESS\r
348 @return EFI_DEVICE_ERROR\r
349 @return EFI_TIMEOUT\r
350\r
351**/\r
352EFI_STATUS\r
353UsbSetReportRequest (\r
354 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
355 IN UINT8 Interface,\r
356 IN UINT8 ReportId,\r
357 IN UINT8 ReportType,\r
358 IN UINT16 ReportLen,\r
359 IN UINT8 *Report\r
360 )\r
361{\r
362 UINT32 Status;\r
363 EFI_STATUS Result;\r
364 EFI_USB_DEVICE_REQUEST Request;\r
365\r
8069d49e
LG
366 if (UsbIo == NULL) {\r
367 return EFI_INVALID_PARAMETER;\r
368 }\r
ce821dff 369 //\r
370 // Fill Device request packet\r
371 //\r
372 Request.RequestType = 0x21;\r
373 //\r
374 // 00100001b;\r
375 //\r
376 Request.Request = EFI_USB_SET_REPORT_REQUEST;\r
377 Request.Value = (UINT16) ((ReportType << 8) | ReportId);\r
378 Request.Index = Interface;\r
379 Request.Length = ReportLen;\r
380\r
381 Result = UsbIo->UsbControlTransfer (\r
382 UsbIo,\r
383 &Request,\r
384 EfiUsbDataOut,\r
385 TIMEOUT_VALUE,\r
386 Report,\r
387 ReportLen,\r
388 &Status\r
389 );\r
390\r
391 return Result;\r
392}\r
393\r
394\r
395/**\r
396 Hid Set Report request.\r
397\r
398 @param UsbIo EFI_USB_IO_PROTOCOL\r
399 @param Interface Which interface the caller wants to set.\r
400 @param ReportId Which report the caller wants to set.\r
401 @param ReportType Type of report.\r
402 @param ReportLen Length of report descriptor.\r
403 @param Report Caller allocated buffer to store Report Descriptor.\r
404\r
405 @return EFI_SUCCESS\r
406 @return EFI_DEVICE_ERROR\r
407 @return EFI_TIMEOUT\r
408\r
409**/\r
410EFI_STATUS\r
411UsbGetReportRequest (\r
412 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
413 IN UINT8 Interface,\r
414 IN UINT8 ReportId,\r
415 IN UINT8 ReportType,\r
416 IN UINT16 ReportLen,\r
417 IN UINT8 *Report\r
418 )\r
419{\r
420 UINT32 Status;\r
421 EFI_STATUS Result;\r
422 EFI_USB_DEVICE_REQUEST Request;\r
423\r
8069d49e
LG
424 if (UsbIo == NULL) {\r
425 return EFI_INVALID_PARAMETER;\r
426 }\r
ce821dff 427 //\r
428 // Fill Device request packet\r
429 //\r
430 Request.RequestType = 0xa1;\r
431 //\r
432 // 10100001b;\r
433 //\r
434 Request.Request = EFI_USB_GET_REPORT_REQUEST;\r
435 Request.Value = (UINT16) ((ReportType << 8) | ReportId);\r
436 Request.Index = Interface;\r
437 Request.Length = ReportLen;\r
438\r
439 Result = UsbIo->UsbControlTransfer (\r
440 UsbIo,\r
441 &Request,\r
442 EfiUsbDataIn,\r
443 TIMEOUT_VALUE,\r
444 Report,\r
445 ReportLen,\r
446 &Status\r
447 );\r
448\r
449 return Result;\r
450}\r