+++ /dev/null
-/** @file\r
-\r
-Copyright (c) 2004, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-**/\r
-\r
-#include <UefiUsbLibInternal.h>\r
-\r
-\r
-/**\r
- Get Hid Descriptor\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL\r
- @param InterfaceNum Hid interface number\r
- @param HidDescriptor Caller allocated buffer to store Usb hid descriptor if\r
- successfully returned.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbGetHidDescriptor (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 InterfaceNum,\r
- OUT EFI_USB_HID_DESCRIPTOR *HidDescriptor\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- Request.RequestType = 0x81;\r
- Request.Request = 0x06;\r
- Request.Value = (UINT16) (0x21 << 8);\r
- Request.Index = InterfaceNum;\r
- Request.Length = sizeof (EFI_USB_HID_DESCRIPTOR);\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbDataIn,\r
- TIMEOUT_VALUE,\r
- HidDescriptor,\r
- sizeof (EFI_USB_HID_DESCRIPTOR),\r
- &Status\r
- );\r
-\r
- return Result;\r
-\r
-}\r
-//\r
-// Function to get Report Class descriptor\r
-//\r
-\r
-/**\r
- get Report Class descriptor\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL.\r
- @param InterfaceNum Report interface number.\r
- @param DescriptorSize Length of DescriptorBuffer.\r
- @param DescriptorBuffer Caller allocated buffer to store Usb report descriptor\r
- if successfully returned.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbGetReportDescriptor (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 InterfaceNum,\r
- IN UINT16 DescriptorSize,\r
- OUT UINT8 *DescriptorBuffer\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- //\r
- // Fill Device request packet\r
- //\r
- Request.RequestType = 0x81;\r
- Request.Request = 0x06;\r
- Request.Value = (UINT16) (0x22 << 8);\r
- Request.Index = InterfaceNum;\r
- Request.Length = DescriptorSize;\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbDataIn,\r
- TIMEOUT_VALUE,\r
- DescriptorBuffer,\r
- DescriptorSize,\r
- &Status\r
- );\r
-\r
- return Result;\r
-\r
-}\r
-//\r
-// Following are HID class request\r
-//\r
-\r
-/**\r
- Get Hid Protocol Request\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL\r
- @param Interface Which interface the caller wants to get protocol\r
- @param Protocol Protocol value returned.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbGetProtocolRequest (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 Interface,\r
- IN UINT8 *Protocol\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- //\r
- // Fill Device request packet\r
- //\r
- Request.RequestType = 0xa1;\r
- //\r
- // 10100001b;\r
- //\r
- Request.Request = EFI_USB_GET_PROTOCOL_REQUEST;\r
- Request.Value = 0;\r
- Request.Index = Interface;\r
- Request.Length = 1;\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbDataIn,\r
- TIMEOUT_VALUE,\r
- Protocol,\r
- sizeof (UINT8),\r
- &Status\r
- );\r
-\r
- return Result;\r
-}\r
-\r
-\r
-\r
-/**\r
- Set Hid Protocol Request\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL\r
- @param Interface Which interface the caller wants to set protocol\r
- @param Protocol Protocol value the caller wants to set.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbSetProtocolRequest (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 Interface,\r
- IN UINT8 Protocol\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- //\r
- // Fill Device request packet\r
- //\r
- Request.RequestType = 0x21;\r
- //\r
- // 00100001b;\r
- //\r
- Request.Request = EFI_USB_SET_PROTOCOL_REQUEST;\r
- Request.Value = Protocol;\r
- Request.Index = Interface;\r
- Request.Length = 0;\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbNoData,\r
- TIMEOUT_VALUE,\r
- NULL,\r
- 0,\r
- &Status\r
- );\r
- return Result;\r
-}\r
-\r
-\r
-\r
-/**\r
- Set Idel request.\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL\r
- @param Interface Which interface the caller wants to set.\r
- @param ReportId Which report the caller wants to set.\r
- @param Duration Idle rate the caller wants to set.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbSetIdleRequest (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 Interface,\r
- IN UINT8 ReportId,\r
- IN UINT8 Duration\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- //\r
- // Fill Device request packet\r
- //\r
- Request.RequestType = 0x21;\r
- //\r
- // 00100001b;\r
- //\r
- Request.Request = EFI_USB_SET_IDLE_REQUEST;\r
- Request.Value = (UINT16) ((Duration << 8) | ReportId);\r
- Request.Index = Interface;\r
- Request.Length = 0;\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbNoData,\r
- TIMEOUT_VALUE,\r
- NULL,\r
- 0,\r
- &Status\r
- );\r
- return Result;\r
-}\r
-\r
-\r
-/**\r
- Get Idel request.\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL\r
- @param Interface Which interface the caller wants to get.\r
- @param ReportId Which report the caller wants to get.\r
- @param Duration Idle rate the caller wants to get.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbGetIdleRequest (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 Interface,\r
- IN UINT8 ReportId,\r
- OUT UINT8 *Duration\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- //\r
- // Fill Device request packet\r
- //\r
- Request.RequestType = 0xa1;\r
- //\r
- // 10100001b;\r
- //\r
- Request.Request = EFI_USB_GET_IDLE_REQUEST;\r
- Request.Value = ReportId;\r
- Request.Index = Interface;\r
- Request.Length = 1;\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbDataIn,\r
- TIMEOUT_VALUE,\r
- Duration,\r
- 1,\r
- &Status\r
- );\r
-\r
- return Result;\r
-}\r
-\r
-\r
-\r
-/**\r
- Hid Set Report request.\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL\r
- @param Interface Which interface the caller wants to set.\r
- @param ReportId Which report the caller wants to set.\r
- @param ReportType Type of report.\r
- @param ReportLen Length of report descriptor.\r
- @param Report Report Descriptor buffer.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbSetReportRequest (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 Interface,\r
- IN UINT8 ReportId,\r
- IN UINT8 ReportType,\r
- IN UINT16 ReportLen,\r
- IN UINT8 *Report\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- //\r
- // Fill Device request packet\r
- //\r
- Request.RequestType = 0x21;\r
- //\r
- // 00100001b;\r
- //\r
- Request.Request = EFI_USB_SET_REPORT_REQUEST;\r
- Request.Value = (UINT16) ((ReportType << 8) | ReportId);\r
- Request.Index = Interface;\r
- Request.Length = ReportLen;\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbDataOut,\r
- TIMEOUT_VALUE,\r
- Report,\r
- ReportLen,\r
- &Status\r
- );\r
-\r
- return Result;\r
-}\r
-\r
-\r
-/**\r
- Hid Set Report request.\r
-\r
- @param UsbIo EFI_USB_IO_PROTOCOL\r
- @param Interface Which interface the caller wants to set.\r
- @param ReportId Which report the caller wants to set.\r
- @param ReportType Type of report.\r
- @param ReportLen Length of report descriptor.\r
- @param Report Caller allocated buffer to store Report Descriptor.\r
-\r
- @return EFI_SUCCESS\r
- @return EFI_DEVICE_ERROR\r
- @return EFI_TIMEOUT\r
-\r
-**/\r
-EFI_STATUS\r
-UsbGetReportRequest (\r
- IN EFI_USB_IO_PROTOCOL *UsbIo,\r
- IN UINT8 Interface,\r
- IN UINT8 ReportId,\r
- IN UINT8 ReportType,\r
- IN UINT16 ReportLen,\r
- IN UINT8 *Report\r
- )\r
-{\r
- UINT32 Status;\r
- EFI_STATUS Result;\r
- EFI_USB_DEVICE_REQUEST Request;\r
-\r
- //\r
- // Fill Device request packet\r
- //\r
- Request.RequestType = 0xa1;\r
- //\r
- // 10100001b;\r
- //\r
- Request.Request = EFI_USB_GET_REPORT_REQUEST;\r
- Request.Value = (UINT16) ((ReportType << 8) | ReportId);\r
- Request.Index = Interface;\r
- Request.Length = ReportLen;\r
-\r
- Result = UsbIo->UsbControlTransfer (\r
- UsbIo,\r
- &Request,\r
- EfiUsbDataIn,\r
- TIMEOUT_VALUE,\r
- Report,\r
- ReportLen,\r
- &Status\r
- );\r
-\r
- return Result;\r
-}\r