From ce821dff82f69711cb6bbacd25c51c540616225a Mon Sep 17 00:00:00 2001 From: vanjeff Date: Wed, 20 Feb 2008 08:33:51 +0000 Subject: rename git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4737 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/UefiUsbLib/Hid.c | 425 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 425 insertions(+) create mode 100644 MdePkg/Library/UefiUsbLib/Hid.c diff --git a/MdePkg/Library/UefiUsbLib/Hid.c b/MdePkg/Library/UefiUsbLib/Hid.c new file mode 100644 index 0000000..7c0ee14 --- /dev/null +++ b/MdePkg/Library/UefiUsbLib/Hid.c @@ -0,0 +1,425 @@ +/** @file + +Copyright (c) 2004, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + +**/ + +#include + + +/** + Get Hid Descriptor + + @param UsbIo EFI_USB_IO_PROTOCOL + @param InterfaceNum Hid interface number + @param HidDescriptor Caller allocated buffer to store Usb hid descriptor if + successfully returned. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbGetHidDescriptor ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 InterfaceNum, + OUT EFI_USB_HID_DESCRIPTOR *HidDescriptor + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + Request.RequestType = 0x81; + Request.Request = 0x06; + Request.Value = (UINT16) (0x21 << 8); + Request.Index = InterfaceNum; + Request.Length = sizeof (EFI_USB_HID_DESCRIPTOR); + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + HidDescriptor, + sizeof (EFI_USB_HID_DESCRIPTOR), + &Status + ); + + return Result; + +} +// +// Function to get Report Class descriptor +// + +/** + get Report Class descriptor + + @param UsbIo EFI_USB_IO_PROTOCOL. + @param InterfaceNum Report interface number. + @param DescriptorSize Length of DescriptorBuffer. + @param DescriptorBuffer Caller allocated buffer to store Usb report descriptor + if successfully returned. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbGetReportDescriptor ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 InterfaceNum, + IN UINT16 DescriptorSize, + OUT UINT8 *DescriptorBuffer + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x81; + Request.Request = 0x06; + Request.Value = (UINT16) (0x22 << 8); + Request.Index = InterfaceNum; + Request.Length = DescriptorSize; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + DescriptorBuffer, + DescriptorSize, + &Status + ); + + return Result; + +} +// +// Following are HID class request +// + +/** + Get Hid Protocol Request + + @param UsbIo EFI_USB_IO_PROTOCOL + @param Interface Which interface the caller wants to get protocol + @param Protocol Protocol value returned. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbGetProtocolRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 *Protocol + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0xa1; + // + // 10100001b; + // + Request.Request = EFI_USB_GET_PROTOCOL_REQUEST; + Request.Value = 0; + Request.Index = Interface; + Request.Length = 1; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + Protocol, + sizeof (UINT8), + &Status + ); + + return Result; +} + + + +/** + Set Hid Protocol Request + + @param UsbIo EFI_USB_IO_PROTOCOL + @param Interface Which interface the caller wants to set protocol + @param Protocol Protocol value the caller wants to set. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbSetProtocolRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 Protocol + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x21; + // + // 00100001b; + // + Request.Request = EFI_USB_SET_PROTOCOL_REQUEST; + Request.Value = Protocol; + Request.Index = Interface; + Request.Length = 0; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + &Status + ); + return Result; +} + + + +/** + Set Idel request. + + @param UsbIo EFI_USB_IO_PROTOCOL + @param Interface Which interface the caller wants to set. + @param ReportId Which report the caller wants to set. + @param Duration Idle rate the caller wants to set. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbSetIdleRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + IN UINT8 Duration + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x21; + // + // 00100001b; + // + Request.Request = EFI_USB_SET_IDLE_REQUEST; + Request.Value = (UINT16) ((Duration << 8) | ReportId); + Request.Index = Interface; + Request.Length = 0; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + &Status + ); + return Result; +} + + +/** + Get Idel request. + + @param UsbIo EFI_USB_IO_PROTOCOL + @param Interface Which interface the caller wants to get. + @param ReportId Which report the caller wants to get. + @param Duration Idle rate the caller wants to get. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbGetIdleRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + OUT UINT8 *Duration + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0xa1; + // + // 10100001b; + // + Request.Request = EFI_USB_GET_IDLE_REQUEST; + Request.Value = ReportId; + Request.Index = Interface; + Request.Length = 1; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + Duration, + 1, + &Status + ); + + return Result; +} + + + +/** + Hid Set Report request. + + @param UsbIo EFI_USB_IO_PROTOCOL + @param Interface Which interface the caller wants to set. + @param ReportId Which report the caller wants to set. + @param ReportType Type of report. + @param ReportLen Length of report descriptor. + @param Report Report Descriptor buffer. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbSetReportRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + IN UINT8 ReportType, + IN UINT16 ReportLen, + IN UINT8 *Report + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x21; + // + // 00100001b; + // + Request.Request = EFI_USB_SET_REPORT_REQUEST; + Request.Value = (UINT16) ((ReportType << 8) | ReportId); + Request.Index = Interface; + Request.Length = ReportLen; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataOut, + TIMEOUT_VALUE, + Report, + ReportLen, + &Status + ); + + return Result; +} + + +/** + Hid Set Report request. + + @param UsbIo EFI_USB_IO_PROTOCOL + @param Interface Which interface the caller wants to set. + @param ReportId Which report the caller wants to set. + @param ReportType Type of report. + @param ReportLen Length of report descriptor. + @param Report Caller allocated buffer to store Report Descriptor. + + @return EFI_SUCCESS + @return EFI_DEVICE_ERROR + @return EFI_TIMEOUT + +**/ +EFI_STATUS +UsbGetReportRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + IN UINT8 ReportType, + IN UINT16 ReportLen, + IN UINT8 *Report + ) +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0xa1; + // + // 10100001b; + // + Request.Request = EFI_USB_GET_REPORT_REQUEST; + Request.Value = (UINT16) ((ReportType << 8) | ReportId); + Request.Index = Interface; + Request.Length = ReportLen; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + Report, + ReportLen, + &Status + ); + + return Result; +} -- cgit v1.1