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