diff options
author | bbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-04-21 22:54:32 +0000 |
---|---|---|
committer | bbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-04-21 22:54:32 +0000 |
commit | 878ddf1fc3540a715f63594ed22b6929e881afb4 (patch) | |
tree | c56c44dac138137b510e1fba7c3efe5e4d84bea2 /EdkModulePkg/Library/EdkUsbLib/hid.c | |
download | edk2-platforms-878ddf1fc3540a715f63594ed22b6929e881afb4.tar.xz |
Initial import.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkModulePkg/Library/EdkUsbLib/hid.c')
-rw-r--r-- | EdkModulePkg/Library/EdkUsbLib/hid.c | 459 |
1 files changed, 459 insertions, 0 deletions
diff --git a/EdkModulePkg/Library/EdkUsbLib/hid.c b/EdkModulePkg/Library/EdkUsbLib/hid.c new file mode 100644 index 0000000000..edf9a94efc --- /dev/null +++ b/EdkModulePkg/Library/EdkUsbLib/hid.c @@ -0,0 +1,459 @@ +/*++
+
+Copyright (c) 2006, 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.
+
+ Module Name:
+
+ hid.c
+
+ Abstract:
+
+ HID class request
+
+ Revision History
+
+--*/
+
+//
+// Function to get HID descriptor
+//
+EFI_STATUS
+UsbGetHidDescriptor (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 InterfaceNum,
+ OUT EFI_USB_HID_DESCRIPTOR *HidDescriptor
+ )
+/*++
+
+ Routine Description:
+ Get Hid Descriptor
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL
+ InterfaceNum - Hid interface number
+ HidDescriptor - Caller allocated buffer to store Usb hid descriptor
+ if successfully returned.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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
+//
+EFI_STATUS
+UsbGetReportDescriptor (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 InterfaceNum,
+ IN UINT16 DescriptorSize,
+ OUT UINT8 *DescriptorBuffer
+ )
+/*++
+
+ Routine Description:
+ get Report Class descriptor
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL.
+ InterfaceNum - Report interface number.
+ DescriptorSize - Length of DescriptorBuffer.
+ DescriptorBuffer - Caller allocated buffer to store Usb report descriptor
+ if successfully returned.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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
+//
+EFI_STATUS
+UsbGetProtocolRequest (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 Interface,
+ IN UINT8 *Protocol
+ )
+/*++
+
+ Routine Description:
+ Get Hid Protocol Request
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL
+ Interface - Which interface the caller wants to get protocol
+ Protocol - Protocol value returned.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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;
+}
+
+
+EFI_STATUS
+UsbSetProtocolRequest (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 Interface,
+ IN UINT8 Protocol
+ )
+/*++
+
+ Routine Description:
+ Set Hid Protocol Request
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL
+ Interface - Which interface the caller wants to set protocol
+ Protocol - Protocol value the caller wants to set.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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;
+}
+
+
+EFI_STATUS
+UsbSetIdleRequest (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 Interface,
+ IN UINT8 ReportId,
+ IN UINT8 Duration
+ )
+/*++
+
+ Routine Description:
+ Set Idel request.
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL
+ Interface - Which interface the caller wants to set.
+ ReportId - Which report the caller wants to set.
+ Duration - Idle rate the caller wants to set.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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;
+}
+
+EFI_STATUS
+UsbGetIdleRequest (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 Interface,
+ IN UINT8 ReportId,
+ OUT UINT8 *Duration
+ )
+/*++
+
+ Routine Description:
+ Get Idel request.
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL
+ Interface - Which interface the caller wants to get.
+ ReportId - Which report the caller wants to get.
+ Duration - Idle rate the caller wants to get.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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;
+}
+
+
+EFI_STATUS
+UsbSetReportRequest (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 Interface,
+ IN UINT8 ReportId,
+ IN UINT8 ReportType,
+ IN UINT16 ReportLen,
+ IN UINT8 *Report
+ )
+/*++
+
+ Routine Description:
+ Hid Set Report request.
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL
+ Interface - Which interface the caller wants to set.
+ ReportId - Which report the caller wants to set.
+ ReportType - Type of report.
+ ReportLen - Length of report descriptor.
+ Report - Report Descriptor buffer.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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;
+}
+
+EFI_STATUS
+UsbGetReportRequest (
+ IN EFI_USB_IO_PROTOCOL *UsbIo,
+ IN UINT8 Interface,
+ IN UINT8 ReportId,
+ IN UINT8 ReportType,
+ IN UINT16 ReportLen,
+ IN UINT8 *Report
+ )
+/*++
+
+ Routine Description:
+ Hid Set Report request.
+
+ Arguments:
+ UsbIo - EFI_USB_IO_PROTOCOL
+ Interface - Which interface the caller wants to set.
+ ReportId - Which report the caller wants to set.
+ ReportType - Type of report.
+ ReportLen - Length of report descriptor.
+ Report - Caller allocated buffer to store Report Descriptor.
+
+ Returns:
+ EFI_SUCCESS
+ EFI_DEVICE_ERROR
+ EFI_TIMEOUT
+
+--*/
+{
+ 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;
+}
|