Replace blind interface descriptor search in the incomplete AndroidAccessoryHost...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / HID.c
index 427dbd5..94d09f3 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
+     Copyright (C) Dean Camera, 2011.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -29,7 +29,8 @@
 */
 
 #define  __INCLUDE_FROM_USB_DRIVER
 */
 
 #define  __INCLUDE_FROM_USB_DRIVER
-#include "../../HighLevel/USBMode.h"
+#include "../../Core/USBMode.h"
+
 #if defined(USB_CAN_BE_HOST)
 
 #define  __INCLUDE_FROM_HID_DRIVER
 #if defined(USB_CAN_BE_HOST)
 
 #define  __INCLUDE_FROM_HID_DRIVER
@@ -111,7 +112,7 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
                        DoubleBanked    = HIDInterfaceInfo->Config.DataINPipeDoubleBank;
                        InterruptPeriod = DataINEndpoint->PollingIntervalMS;
 
                        DoubleBanked    = HIDInterfaceInfo->Config.DataINPipeDoubleBank;
                        InterruptPeriod = DataINEndpoint->PollingIntervalMS;
 
-                       HIDInterfaceInfo->State.DataINPipeSize   = DataINEndpoint->EndpointSize;
+                       HIDInterfaceInfo->State.DataINPipeSize = DataINEndpoint->EndpointSize;
                }
                else if (PipeNum == HIDInterfaceInfo->Config.DataOUTPipeNumber)
                {
                }
                else if (PipeNum == HIDInterfaceInfo->Config.DataOUTPipeNumber)
                {
@@ -147,7 +148,7 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
        HIDInterfaceInfo->State.HIDReportSize        = HIDDescriptor->HIDReportLength;
        HIDInterfaceInfo->State.SupportsBootProtocol = (HIDInterface->SubClass != HID_CSCP_NonBootProtocol);
        HIDInterfaceInfo->State.LargestReportSize    = 8;
        HIDInterfaceInfo->State.HIDReportSize        = HIDDescriptor->HIDReportLength;
        HIDInterfaceInfo->State.SupportsBootProtocol = (HIDInterface->SubClass != HID_CSCP_NonBootProtocol);
        HIDInterfaceInfo->State.LargestReportSize    = 8;
-       HIDInterfaceInfo->State.IsActive = true;
+       HIDInterfaceInfo->State.IsActive             = true;
 
        return HID_ENUMERROR_NoError;
 }
 
        return HID_ENUMERROR_NoError;
 }
@@ -239,7 +240,7 @@ uint8_t HID_Host_ReceiveReport(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo,
 
                if (HIDInterfaceInfo->Config.HIDParserData->UsingReportIDs)
                {
 
                if (HIDInterfaceInfo->Config.HIDParserData->UsingReportIDs)
                {
-                       ReportID = Pipe_Read_Byte();
+                       ReportID = Pipe_Read_8();
                        *(BufferPos++) = ReportID;
                }
 
                        *(BufferPos++) = ReportID;
                }
 
@@ -251,7 +252,7 @@ uint8_t HID_Host_ReceiveReport(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo,
                ReportSize = Pipe_BytesInPipe();
        }
 
                ReportSize = Pipe_BytesInPipe();
        }
 
-       if ((ErrorCode = Pipe_Read_Stream_LE(BufferPos, ReportSize, NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
+       if ((ErrorCode = Pipe_Read_Stream_LE(BufferPos, ReportSize, NULL)) != PIPE_RWSTREAM_NoError)
          return ErrorCode;
 
        Pipe_ClearIN();
          return ErrorCode;
 
        Pipe_ClearIN();
@@ -280,9 +281,9 @@ uint8_t HID_Host_SendReportByID(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
                Pipe_Unfreeze();
 
                if (ReportID)
                Pipe_Unfreeze();
 
                if (ReportID)
-                 Pipe_Write_Stream_LE(&ReportID, sizeof(ReportID), NO_STREAM_CALLBACK);
+                 Pipe_Write_Stream_LE(&ReportID, sizeof(ReportID), NULL);
 
 
-               if ((ErrorCode = Pipe_Write_Stream_LE(Buffer, ReportSize, NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
+               if ((ErrorCode = Pipe_Write_Stream_LE(Buffer, ReportSize, NULL)) != PIPE_RWSTREAM_NoError)
                  return ErrorCode;
 
                Pipe_ClearOUT();
                  return ErrorCode;
 
                Pipe_ClearOUT();
@@ -356,6 +357,23 @@ uint8_t HID_Host_SetBootProtocol(USB_ClassInfo_HID_Host_t* const HIDInterfaceInf
        return HOST_SENDCONTROL_Successful;
 }
 
        return HOST_SENDCONTROL_Successful;
 }
 
+uint8_t HID_Host_SetIdlePeriod(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo,
+                               const uint16_t MS)
+{
+       USB_ControlRequest = (USB_Request_Header_t)
+               {
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
+                       .bRequest      = HID_REQ_SetIdle,
+                       .wValue        = ((MS << 6) & 0xFF00),
+                       .wIndex        = HIDInterfaceInfo->State.InterfaceNumber,
+                       .wLength       = 0,
+               };
+
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+       return USB_Host_SendControlRequest(NULL);
+}
+
 #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
 uint8_t HID_Host_SetReportProtocol(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo)
 {
 #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
 uint8_t HID_Host_SetReportProtocol(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo)
 {