Fixed incorrect comparison in the descriptor callback routine of the TeensyHID bootlo...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / HID.c
index 1b3e4fb..7ff3249 100644 (file)
@@ -1,13 +1,13 @@
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
 \r
   Permission to use, copy, modify, distribute, and sell this \r
   software and its documentation for any purpose is hereby granted\r
   this software.\r
 */\r
 \r
+#define  __INCLUDE_FROM_USB_DRIVER\r
 #include "../../HighLevel/USBMode.h"\r
 #if defined(USB_CAN_BE_DEVICE)\r
 \r
+#define  __INCLUDE_FROM_HID_DRIVER\r
 #include "HID.h"\r
 \r
 void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)\r
@@ -51,11 +53,15 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter
                                uint16_t ReportINSize = 0;\r
                                uint8_t  ReportID     = (USB_ControlRequest.wValue & 0xFF);\r
                                uint8_t  ReportType   = (USB_ControlRequest.wValue >> 8) - 1;\r
+                               uint8_t  ReportINData[HIDInterfaceInfo->Config.PrevReportINBufferSize];\r
+\r
+                               memset(ReportINData, 0, sizeof(ReportINData));\r
 \r
-                               memset(HIDInterfaceInfo->Config.PrevReportINBuffer, 0, HIDInterfaceInfo->Config.PrevReportINBufferSize);\r
-                               \r
                                CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportType,\r
                                                                    HIDInterfaceInfo->Config.PrevReportINBuffer, &ReportINSize);\r
+                               \r
+                               if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)\r
+                                 memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, HIDInterfaceInfo->Config.PrevReportINBufferSize);\r
 \r
                                Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);\r
                                Endpoint_Write_Control_Stream_LE(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize);\r
@@ -167,7 +173,7 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
                if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)\r
                {\r
                        StatesChanged = (memcmp(ReportINData, HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize) != 0);\r
-                       memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, ReportINSize);\r
+                       memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, HIDInterfaceInfo->Config.PrevReportINBufferSize);\r
                }\r
 \r
                if (ReportINSize && (ForceSend || StatesChanged || IdlePeriodElapsed))\r
@@ -186,10 +192,4 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
        }\r
 }\r
 \r
-void HID_Device_MillisecondElapsed(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)\r
-{\r
-       if (HIDInterfaceInfo->State.IdleMSRemaining)\r
-         HIDInterfaceInfo->State.IdleMSRemaining--;\r
-}\r
-\r
 #endif\r