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