Add new ReportType parameter to the HID class driver device callback and host report...
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 9 May 2010 06:01:01 +0000 (06:01 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 9 May 2010 06:01:01 +0000 (06:01 +0000)
Renamed internal Host mode Class driver descriptor comparator callback routines so that they all start with a uniform DCOMP_{Class Abbreviation}_ prefix.

40 files changed:
Demos/Device/ClassDriver/GenericHID/GenericHID.c
Demos/Device/ClassDriver/GenericHID/GenericHID.h
Demos/Device/ClassDriver/Joystick/Joystick.c
Demos/Device/ClassDriver/Joystick/Joystick.h
Demos/Device/ClassDriver/Keyboard/Keyboard.c
Demos/Device/ClassDriver/Keyboard/Keyboard.h
Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h
Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c
Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h
Demos/Device/ClassDriver/Mouse/Mouse.c
Demos/Device/ClassDriver/Mouse/Mouse.h
Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c
Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.h
Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c
Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.h
LUFA/Drivers/USB/Class/Device/HID.c
LUFA/Drivers/USB/Class/Device/HID.h
LUFA/Drivers/USB/Class/Host/CDC.c
LUFA/Drivers/USB/Class/Host/CDC.h
LUFA/Drivers/USB/Class/Host/HID.c
LUFA/Drivers/USB/Class/Host/HID.h
LUFA/Drivers/USB/Class/Host/MIDI.c
LUFA/Drivers/USB/Class/Host/MIDI.h
LUFA/Drivers/USB/Class/Host/MassStorage.c
LUFA/Drivers/USB/Class/Host/MassStorage.h
LUFA/Drivers/USB/Class/Host/Printer.c
LUFA/Drivers/USB/Class/Host/Printer.h
LUFA/Drivers/USB/Class/Host/RNDIS.c
LUFA/Drivers/USB/Class/Host/RNDIS.h
LUFA/Drivers/USB/Class/Host/StillImage.c
LUFA/Drivers/USB/Class/Host/StillImage.h
LUFA/ManPages/ChangeLog.txt
LUFA/ManPages/MigrationInformation.txt
Projects/Magstripe/Magstripe.c
Projects/Magstripe/Magstripe.h
Projects/RelayBoard/RelayBoard.c
Projects/TemperatureDataLogger/TempDataLogger.c
Projects/TemperatureDataLogger/TempDataLogger.h
README.txt

index 0efcd56..e5de187 100644 (file)
@@ -158,12 +158,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        HIDReportEcho.ReportID   = ReportID;
        HIDReportEcho.ReportSize = ReportSize;
index 052ba0d..3724b31 100644 (file)
@@ -75,6 +75,6 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
                
 #endif
index bbd577d..af529e0 100644 (file)
@@ -168,12 +168,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 }
index 20428b2..285febb 100644 (file)
@@ -88,6 +88,6 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
 
 #endif
index 0937e1c..975c4d3 100644 (file)
@@ -173,12 +173,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        uint8_t  LEDMask   = LEDS_NO_LEDS;
        uint8_t* LEDReport = (uint8_t*)ReportData;
index 76c6621..a415d51 100644 (file)
@@ -79,6 +79,6 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
 
 #endif
index 9e0da93..1a7d9cf 100644 (file)
@@ -227,12 +227,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        if (HIDInterfaceInfo == &Keyboard_HID_Interface)
        {
index bb7e1ee..fff7c40 100644 (file)
@@ -74,6 +74,6 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
                
 #endif
index 780b2b2..717bfd5 100644 (file)
@@ -218,12 +218,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        uint8_t  LEDMask   = LEDS_NO_LEDS;
        uint8_t* LEDReport = (uint8_t*)ReportData;
index 4c1ce96..02ae98e 100644 (file)
@@ -95,7 +95,7 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
 
 
 #endif
index 2335c11..a9c168e 100644 (file)
@@ -168,12 +168,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 }
index 3ce9d04..74eef97 100644 (file)
@@ -79,6 +79,6 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
 
 #endif
index b8884fe..3be6f4c 100644 (file)
@@ -230,12 +230,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 }
index a137113..fae00f9 100644 (file)
@@ -79,5 +79,5 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
 #endif
index e1a158d..e566cf8 100644 (file)
@@ -135,12 +135,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 /** HID class driver callback function for the processing of HID reports from the host.
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
- *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportID    Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 }
\ No newline at end of file
index b673f8a..db9cd76 100644 (file)
@@ -46,7 +46,7 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
 
                void EVENT_USB_Device_Connect(void);
                void EVENT_USB_Device_Disconnect(void);
index 88bb609..bc79646 100644 (file)
@@ -50,21 +50,20 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter
                        {
                                Endpoint_ClearSETUP();  
 
-                               uint16_t ReportINSize = 0;
-                               uint8_t  ReportID     = (USB_ControlRequest.wValue & 0xFF);
-                               uint8_t  ReportType   = (USB_ControlRequest.wValue >> 8) - 1;
-                               uint8_t  ReportINData[HIDInterfaceInfo->Config.PrevReportINBufferSize];
+                               uint16_t ReportSize = 0;
+                               uint8_t  ReportID   = (USB_ControlRequest.wValue & 0xFF);
+                               uint8_t  ReportType = (USB_ControlRequest.wValue >> 8) - 1;
+                               uint8_t  ReportData[HIDInterfaceInfo->Config.PrevReportINBufferSize];
 
-                               memset(ReportINData, 0, sizeof(ReportINData));
+                               memset(ReportData, 0, sizeof(ReportData));
 
-                               CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportType,
-                                                                   HIDInterfaceInfo->Config.PrevReportINBuffer, &ReportINSize);
+                               CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportType, ReportData, &ReportSize);
                                
                                if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)
-                                 memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, HIDInterfaceInfo->Config.PrevReportINBufferSize);
+                                 memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportData, HIDInterfaceInfo->Config.PrevReportINBufferSize);
 
                                Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-                               Endpoint_Write_Control_Stream_LE(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize);
+                               Endpoint_Write_Control_Stream_LE(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportSize);
                                Endpoint_ClearOUT();
                        }
                
@@ -74,12 +73,13 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter
                        {
                                Endpoint_ClearSETUP();
                                
-                               uint16_t ReportOUTSize = USB_ControlRequest.wLength;
-                               uint8_t  ReportOUTData[ReportOUTSize];
-                               uint8_t  ReportID = (USB_ControlRequest.wValue & 0xFF);
+                               uint16_t ReportSize = USB_ControlRequest.wLength;
+                               uint8_t  ReportID   = (USB_ControlRequest.wValue & 0xFF);
+                               uint8_t  ReportType = (USB_ControlRequest.wValue >> 8) - 1;
+                               uint8_t  ReportData[ReportSize];
 
-                               Endpoint_Read_Control_Stream_LE(ReportOUTData, ReportOUTSize);
-                               CALLBACK_HID_Device_ProcessHIDReport(HIDInterfaceInfo, ReportID, ReportOUTData, ReportOUTSize);
+                               Endpoint_Read_Control_Stream_LE(ReportData, ReportSize);
+                               CALLBACK_HID_Device_ProcessHIDReport(HIDInterfaceInfo, ReportID, ReportType, ReportData, ReportSize);
                                Endpoint_ClearIN();                             
                        }
                        
index ac6ee4c..9e42843 100644 (file)
                         *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class configuration and state
                         *  \param[in] ReportID  Report ID of the received output report. If multiple reports are not received via the given HID
                         *                   interface, this parameter should be ignored.
+                        *  \param[in] ReportType  Type of received HID report, either \ref REPORT_ITEM_TYPE_Out or \ref REPORT_ITEM_TYPE_Feature
                         *  \param[in] ReportData  Pointer to a buffer where the received HID report is stored.
                         *  \param[in] ReportSize  Size in bytes of the received report from the host.
                         */
                        void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                                                 const void* ReportData, const uint16_t ReportSize) ATTR_NON_NULL_PTR_ARG(1)
-                                                                 ATTR_NON_NULL_PTR_ARG(3);
+                                                                 const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize) ATTR_NON_NULL_PTR_ARG(1)
+                                                                 ATTR_NON_NULL_PTR_ARG(4);
 
                /* Inline Functions: */
                        /** Indicates that a millisecond of idle time has elapsed on the given HID interface, and the interface's idle count should be
index 3d158fb..5679a7c 100644 (file)
@@ -47,7 +47,7 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
          return CDC_ENUMERROR_InvalidConfigDescriptor;
        
        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                     DComp_CDC_Host_NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                     DCOMP_CDC_Host_NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
        {
                return CDC_ENUMERROR_NoCDCInterfaceFound;
        }
@@ -57,12 +57,12 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
        while (FoundEndpoints != (CDC_FOUND_NOTIFICATION_IN | CDC_FOUND_DATAPIPE_IN | CDC_FOUND_DATAPIPE_OUT))
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                             DComp_CDC_Host_NextCDCInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                             DCOMP_CDC_Host_NextCDCInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        if (FoundEndpoints & CDC_FOUND_NOTIFICATION_IN)
                        {
                                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, 
-                                                             DComp_CDC_Host_NextCDCDataInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                                             DCOMP_CDC_Host_NextCDCDataInterface) != DESCRIPTOR_SEARCH_COMP_Found)
                                {
                                        return CDC_ENUMERROR_NoCDCInterfaceFound;
                                }
@@ -79,14 +79,14 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
                                Pipe_DisablePipe();
                        
                                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                                             DComp_CDC_Host_NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                                             DCOMP_CDC_Host_NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
                                {
                                        return CDC_ENUMERROR_NoCDCInterfaceFound;
                                }
                        }
 
                        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                                     DComp_CDC_Host_NextCDCInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                                     DCOMP_CDC_Host_NextCDCInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                        {
                                return CDC_ENUMERROR_EndpointsNotFound;
                        }
@@ -139,7 +139,7 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
        return CDC_ENUMERROR_NoError;
 }
 
-static uint8_t DComp_CDC_Host_NextCDCControlInterface(void* const CurrentDescriptor)
+static uint8_t DCOMP_CDC_Host_NextCDCControlInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -157,7 +157,7 @@ static uint8_t DComp_CDC_Host_NextCDCControlInterface(void* const CurrentDescrip
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_CDC_Host_NextCDCDataInterface(void* const CurrentDescriptor)
+static uint8_t DCOMP_CDC_Host_NextCDCDataInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -175,7 +175,7 @@ static uint8_t DComp_CDC_Host_NextCDCDataInterface(void* const CurrentDescriptor
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_CDC_Host_NextCDCInterfaceEndpoint(void* const CurrentDescriptor)
+static uint8_t DCOMP_CDC_Host_NextCDCInterfaceEndpoint(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index 9c59ad3..2ccc880 100644 (file)
                                void CDC_Host_Event_Stub(void);
                                void EVENT_CDC_Host_ControLineStateChanged(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
                                                                           ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Host_Event_Stub);
-                               static uint8_t DComp_CDC_Host_NextCDCControlInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_CDC_Host_NextCDCDataInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_CDC_Host_NextCDCInterfaceEndpoint(void* const CurrentDescriptor);
+                               static uint8_t DCOMP_CDC_Host_NextCDCControlInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_CDC_Host_NextCDCDataInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_CDC_Host_NextCDCInterfaceEndpoint(void* const CurrentDescriptor);
                        #endif  
        #endif
                                
index f7292d7..9415c86 100644 (file)
@@ -51,7 +51,7 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
        do
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                                                         DComp_HID_Host_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                                                         DCOMP_HID_Host_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        return HID_ENUMERROR_NoHIDInterfaceFound;
                }
@@ -63,7 +63,7 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
        HIDInterfaceInfo->State.InterfaceNumber      = CurrentHIDInterface->InterfaceNumber;
        HIDInterfaceInfo->State.SupportsBootProtocol = (CurrentHIDInterface->SubClass != HID_NON_BOOT_PROTOCOL);
 
-       if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, DComp_NextHID) != DESCRIPTOR_SEARCH_COMP_Found)
+       if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, DCOMP_HID_NextHID) != DESCRIPTOR_SEARCH_COMP_Found)
        {
                return HID_ENUMERROR_NoHIDDescriptorFound;
        }
@@ -73,7 +73,7 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
        while (FoundEndpoints != (HID_FOUND_DATAPIPE_IN | HID_FOUND_DATAPIPE_OUT))
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                             DComp_HID_Host_NextHIDInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                             DCOMP_HID_Host_NextHIDInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        if (FoundEndpoints & HID_FOUND_DATAPIPE_IN)
                          break;
@@ -110,7 +110,7 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
        return HID_ENUMERROR_NoError;
 }
 
-static uint8_t DComp_HID_Host_NextHIDInterface(void* const CurrentDescriptor)
+static uint8_t DCOMP_HID_Host_NextHIDInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -124,7 +124,7 @@ static uint8_t DComp_HID_Host_NextHIDInterface(void* const CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_NextHID(void* const CurrentDescriptor)
+static uint8_t DCOMP_HID_NextHID(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_HID)
          return DESCRIPTOR_SEARCH_Found;
@@ -134,7 +134,7 @@ static uint8_t DComp_NextHID(void* const CurrentDescriptor)
          return DESCRIPTOR_SEARCH_NotFound;      
 }
 
-static uint8_t DComp_HID_Host_NextHIDInterfaceEndpoint(void* const CurrentDescriptor)
+static uint8_t DCOMP_HID_Host_NextHIDInterfaceEndpoint(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
@@ -215,13 +215,13 @@ uint8_t HID_Host_SendReportByID(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
 #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
                                 const uint8_t ReportID,
 #endif
-                                void* Buffer, const uint16_t ReportSize)
+                                const uint8_t ReportType, void* Buffer, const uint16_t ReportSize)
 {
 #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
        if ((USB_HostState != HOST_STATE_Configured) || !(HIDInterfaceInfo->State.IsActive))
          return false;
 
-       if (HIDInterfaceInfo->State.DeviceUsesOUTPipe)
+       if (HIDInterfaceInfo->State.DeviceUsesOUTPipe && (ReportType == REPORT_ITEM_TYPE_Out))
        {
                uint8_t ErrorCode;
        
@@ -247,9 +247,9 @@ uint8_t HID_Host_SendReportByID(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo
                        .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
                        .bRequest      = REQ_SetReport,
 #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
-                       .wValue        = ((REPORT_ITEM_TYPE_Out + 1) << 8) | ReportID,
+                       .wValue        = ((ReportType + 1) << 8) | ReportID,
 #else
-                       .wValue        = ((REPORT_ITEM_TYPE_Out + 1) << 8),
+                       .wValue        = ((ReportType + 1) << 8),
 #endif
                        .wIndex        = HIDInterfaceInfo->State.InterfaceNumber,
                        .wLength       = ReportSize,
index 1291bd2..7aabd7c 100644 (file)
                                                           void* Buffer) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
                        #endif
                        
-                       /** Sends an OUT report to the currently attached HID device, using the device's OUT pipe if available or the device's
-                        *  Control pipe if not.
+                       /** Sends an OUT or FEATURE report to the currently attached HID device, using the device's OUT pipe if available,
+                        *  or the device's Control pipe if not.
                         *
                         *  \note This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
                         *        call will fail.
                         *
                         *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class host configuration and state
                         *  \param[in] ReportID  Report ID of the report to send to the device, or 0 if the device does not use report IDs
+                        *  \param[in] ReportType  Type of report to issue to the device, either \ref REPORT_ITEM_TYPE_Out or \ref REPORT_ITEM_TYPE_Feature
                         *  \param[in] Buffer  Buffer containing the report to send to the attached device
                         *  \param[in] ReportSize  Report size in bytes to send to the attached device
                         *
                        #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
                                                        const uint8_t ReportID,
                        #endif
-                                                       void* Buffer, const uint16_t ReportSize) ATTR_NON_NULL_PTR_ARG(1)
+                                                       const uint8_t ReportType, void* Buffer, const uint16_t ReportSize) ATTR_NON_NULL_PTR_ARG(1)
                        #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
-                                                       ATTR_NON_NULL_PTR_ARG(3);
+                                                       ATTR_NON_NULL_PTR_ARG(4);
                        #else
-                                                       ATTR_NON_NULL_PTR_ARG(2);
+                                                       ATTR_NON_NULL_PTR_ARG(3);
                        #endif
 
                        /** Determines if a HID IN report has been received from the attached device on the data IN pipe.
 
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_HID_CLASS_HOST_C)
-                               static uint8_t DComp_HID_Host_NextHIDInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_NextHID(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_HID_Host_NextHIDInterfaceEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_HID_Host_NextHIDInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_HID_NextHID(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_HID_Host_NextHIDInterfaceEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
                        #endif  
        #endif  
        
index f550595..50b7b3e 100644 (file)
@@ -47,7 +47,7 @@ uint8_t MIDI_Host_ConfigurePipes(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceI
          return MIDI_ENUMERROR_InvalidConfigDescriptor;
        
        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                     DComp_MIDI_Host_NextMIDIStreamingInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                     DCOMP_MIDI_Host_NextMIDIStreamingInterface) != DESCRIPTOR_SEARCH_COMP_Found)
        {
                return MIDI_ENUMERROR_NoStreamingInterfaceFound;
        }
@@ -55,7 +55,7 @@ uint8_t MIDI_Host_ConfigurePipes(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceI
        while (FoundEndpoints != (MIDI_FOUND_DATAPIPE_IN | MIDI_FOUND_DATAPIPE_OUT))
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                             DComp_MIDI_Host_NextMIDIStreamingDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                             DCOMP_MIDI_Host_NextMIDIStreamingDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        return MIDI_ENUMERROR_EndpointsNotFound;
                }
@@ -86,7 +86,7 @@ uint8_t MIDI_Host_ConfigurePipes(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceI
        return MIDI_ENUMERROR_NoError;
 }
 
-static uint8_t DComp_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDescriptor)
+static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -104,7 +104,7 @@ static uint8_t DComp_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDes
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_MIDI_Host_NextMIDIStreamingDataEndpoint(void* const CurrentDescriptor)
+static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingDataEndpoint(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index dd064af..2ff6c9b 100644 (file)
 
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_MIDI_CLASS_HOST_C)
-                               static uint8_t DComp_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_MIDI_Host_NextMIDIStreamingDataEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_MIDI_Host_NextMIDIStreamingDataEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
                        #endif  
        #endif
                                
index 6e84d07..a96d47d 100644 (file)
@@ -47,7 +47,7 @@ uint8_t MS_Host_ConfigurePipes(USB_ClassInfo_MS_Host_t* const MSInterfaceInfo, u
          return MS_ENUMERROR_InvalidConfigDescriptor;
        
        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &DeviceConfigDescriptor,
-                                     DComp_NextMSInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                     DCOMP_MS_NextMSInterface) != DESCRIPTOR_SEARCH_COMP_Found)
        {
                return MS_ENUMERROR_NoMSInterfaceFound;
        }
@@ -57,7 +57,7 @@ uint8_t MS_Host_ConfigurePipes(USB_ClassInfo_MS_Host_t* const MSInterfaceInfo, u
        while (FoundEndpoints != (MS_FOUND_DATAPIPE_IN | MS_FOUND_DATAPIPE_OUT))
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &DeviceConfigDescriptor,
-                                             DComp_NextMSInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                             DCOMP_MS_NextMSInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        return MS_ENUMERROR_EndpointsNotFound;
                }
@@ -88,7 +88,7 @@ uint8_t MS_Host_ConfigurePipes(USB_ClassInfo_MS_Host_t* const MSInterfaceInfo, u
        return MS_ENUMERROR_NoError;
 }
 
-static uint8_t DComp_NextMSInterface(void* const CurrentDescriptor)
+static uint8_t DCOMP_MS_NextMSInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -106,7 +106,7 @@ static uint8_t DComp_NextMSInterface(void* const CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_NextMSInterfaceEndpoint(void* const CurrentDescriptor)
+static uint8_t DCOMP_MS_NextMSInterfaceEndpoint(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index 992c5a0..e4f7415 100644 (file)
                        
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_MS_CLASS_HOST_C)             
-                               static uint8_t DComp_NextMSInterface(void* const CurrentDescriptor);
-                               static uint8_t DComp_NextMSInterfaceEndpoint(void* const CurrentDescriptor);
+                               static uint8_t DCOMP_MS_NextMSInterface(void* const CurrentDescriptor);
+                               static uint8_t DCOMP_MS_NextMSInterfaceEndpoint(void* const CurrentDescriptor);
                                
                                static uint8_t MS_Host_SendCommand(USB_ClassInfo_MS_Host_t* const MSInterfaceInfo,
                                                                   MS_CommandBlockWrapper_t* const SCSICommandBlock,
index e291ae3..e535b46 100644 (file)
@@ -47,7 +47,7 @@ uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceI
          return PRNT_ENUMERROR_InvalidConfigDescriptor;
        
        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &DeviceConfigDescriptor,
-                                     DComp_NextPRNTInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                     DCOMP_PRNT_NextPRNTInterface) != DESCRIPTOR_SEARCH_COMP_Found)
        {
                return PRNT_ENUMERROR_NoPrinterInterfaceFound;
        }
@@ -60,7 +60,7 @@ uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceI
        while (FoundEndpoints != (PRNT_FOUND_DATAPIPE_IN | PRNT_FOUND_DATAPIPE_OUT))
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &DeviceConfigDescriptor,
-                                             DComp_NextPRNTInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                             DCOMP_PRNT_NextPRNTInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        return PRNT_ENUMERROR_EndpointsNotFound;
                }
@@ -91,7 +91,7 @@ uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceI
        return PRNT_ENUMERROR_NoError;
 }
 
-static uint8_t DComp_NextPRNTInterface(void* CurrentDescriptor)
+static uint8_t DCOMP_PRNT_NextPRNTInterface(void* CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -106,7 +106,7 @@ static uint8_t DComp_NextPRNTInterface(void* CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_NextPRNTInterfaceEndpoint(void* CurrentDescriptor)
+static uint8_t DCOMP_PRNT_NextPRNTInterfaceEndpoint(void* CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index 92f1f22..aa650ba 100644 (file)
                        
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_PRINTER_CLASS_HOST_C)                
-                               static uint8_t DComp_NextPRNTInterface(void* const CurrentDescriptor);
-                               static uint8_t DComp_NextPRNTInterfaceEndpoint(void* const CurrentDescriptor);
+                               static uint8_t DCOMP_PRNT_NextPRNTInterface(void* const CurrentDescriptor);
+                               static uint8_t DCOMP_PRNT_NextPRNTInterfaceEndpoint(void* const CurrentDescriptor);
                        #endif
        #endif
        
index 06175d2..5fde1c6 100644 (file)
@@ -47,7 +47,7 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
          return RNDIS_ENUMERROR_InvalidConfigDescriptor;
        
        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                     DComp_RNDIS_Host_NextRNDISControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                     DCOMP_RNDIS_Host_NextRNDISControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
        {
                return RNDIS_ENUMERROR_NoRNDISInterfaceFound;
        }
@@ -57,12 +57,12 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
        while (FoundEndpoints != (RNDIS_FOUND_NOTIFICATION_IN | RNDIS_FOUND_DATAPIPE_IN | RNDIS_FOUND_DATAPIPE_OUT))
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                             DComp_RNDIS_Host_NextRNDISInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                             DCOMP_RNDIS_Host_NextRNDISInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        if (FoundEndpoints & RNDIS_FOUND_NOTIFICATION_IN)
                        {
                                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, 
-                                                             DComp_RNDIS_Host_NextRNDISDataInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                                             DCOMP_RNDIS_Host_NextRNDISDataInterface) != DESCRIPTOR_SEARCH_COMP_Found)
                                {
                                        return RNDIS_ENUMERROR_NoRNDISInterfaceFound;
                                }
@@ -79,14 +79,14 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
                                Pipe_DisablePipe();
                        
                                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                                             DComp_RNDIS_Host_NextRNDISControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                                             DCOMP_RNDIS_Host_NextRNDISControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
                                {
                                        return RNDIS_ENUMERROR_NoRNDISInterfaceFound;
                                }
                        }
 
                        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-                                                     DComp_RNDIS_Host_NextRNDISInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                                     DCOMP_RNDIS_Host_NextRNDISInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                        {
                                return RNDIS_ENUMERROR_EndpointsNotFound;
                        }
@@ -135,7 +135,7 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
        return RNDIS_ENUMERROR_NoError;
 }
 
-static uint8_t DComp_RNDIS_Host_NextRNDISControlInterface(void* const CurrentDescriptor)
+static uint8_t DCOMP_RNDIS_Host_NextRNDISControlInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -153,7 +153,7 @@ static uint8_t DComp_RNDIS_Host_NextRNDISControlInterface(void* const CurrentDes
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_RNDIS_Host_NextRNDISDataInterface(void* const CurrentDescriptor)
+static uint8_t DCOMP_RNDIS_Host_NextRNDISDataInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -171,7 +171,7 @@ static uint8_t DComp_RNDIS_Host_NextRNDISDataInterface(void* const CurrentDescri
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-static uint8_t DComp_RNDIS_Host_NextRNDISInterfaceEndpoint(void* const CurrentDescriptor)
+static uint8_t DCOMP_RNDIS_Host_NextRNDISInterfaceEndpoint(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index 7daaca8..feddc72 100644 (file)
                                static uint8_t RNDIS_GetEncapsulatedResponse(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceInfo,
                                                                             void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
 
-                               static uint8_t DComp_RNDIS_Host_NextRNDISControlInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_RNDIS_Host_NextRNDISDataInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_RNDIS_Host_NextRNDISInterfaceEndpoint(void* const CurrentDescriptor);
+                               static uint8_t DCOMP_RNDIS_Host_NextRNDISControlInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_RNDIS_Host_NextRNDISDataInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_RNDIS_Host_NextRNDISInterfaceEndpoint(void* const CurrentDescriptor);
                        #endif  
        #endif
                                
index 4b2c6ea..9229803 100644 (file)
@@ -47,7 +47,7 @@ uint8_t SImage_Host_ConfigurePipes(USB_ClassInfo_SI_Host_t* const SIInterfaceInf
          return SI_ENUMERROR_InvalidConfigDescriptor;
        
        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &DeviceConfigDescriptor,
-                                     DComp_SI_Host_NextSIInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+                                     DCOMP_SI_Host_NextSIInterface) != DESCRIPTOR_SEARCH_COMP_Found)
        {
                return SI_ENUMERROR_NoSIInterfaceFound;
        }
@@ -55,7 +55,7 @@ uint8_t SImage_Host_ConfigurePipes(USB_ClassInfo_SI_Host_t* const SIInterfaceInf
        while (FoundEndpoints != (SI_FOUND_EVENTS_IN | SI_FOUND_DATAPIPE_IN | SI_FOUND_DATAPIPE_OUT))
        {
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &DeviceConfigDescriptor,
-                                             DComp_SI_Host_NextSIInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+                                             DCOMP_SI_Host_NextSIInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
                {
                        return SI_ENUMERROR_EndpointsNotFound;
                }
@@ -103,7 +103,7 @@ uint8_t SImage_Host_ConfigurePipes(USB_ClassInfo_SI_Host_t* const SIInterfaceInf
        return SI_ENUMERROR_NoError;
 }
 
-uint8_t DComp_SI_Host_NextSIInterface(void* const CurrentDescriptor)
+uint8_t DCOMP_SI_Host_NextSIInterface(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -121,7 +121,7 @@ uint8_t DComp_SI_Host_NextSIInterface(void* const CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
-uint8_t DComp_SI_Host_NextSIInterfaceEndpoint(void* const CurrentDescriptor)
+uint8_t DCOMP_SI_Host_NextSIInterfaceEndpoint(void* const CurrentDescriptor)
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index be33579..02a3f3a 100644 (file)
                
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_SI_CLASS_HOST_C)
-                               static uint8_t DComp_SI_Host_NextSIInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DComp_SI_Host_NextSIInterfaceEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_SI_Host_NextSIInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_SI_Host_NextSIInterfaceEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
                        #endif
        #endif
        
index 02b6296..42f9cea 100644 (file)
   *  - Added new ENDPOINT_*_BusSuspended error code to the Endpoint function, so that the stream functions early-abort if the bus
   *    is suspended before or during a transfer
   *  - Added new EVENT_CDC_Device_BreakSent() event and CDC_Host_SendBreak() function to the Device and Host CDC Class drivers
+  *  - Added ReportType parameter to the HID device class driver CALLBACK_HID_Device_ProcessHIDReport() function so that FEATURE
+  *    reports from the host to the device can be correctly processed
+  *  - Added ReportType parameter to the HID host class driver HID_Host_SendReportByID() function so that FEATURE reports can be
+  *    issued to the attached device
   *
   *  <b>Changed:</b>
   *  - AVRISP programmer project now has a more robust timeout system
index 8db33b4..0f3ddad 100644 (file)
@@ -23,6 +23,9 @@
  *      functions correctly.
  *    - The USBInterrupt.c USB driver source file has been relocated from LUFA/Drivers/USB/HighLevel/ to LUFA/Drivers/USB/LowLevel.
  *      Projects must update their makefile SRC values accordingly.
+ *    - The HID Device Class driver's function signature for the CALLBACK_HID_Device_ProcessHIDReport() function has been changed, to
+ *      allow for a new ReportType parameter. This new parameter must be added in all user applications using the Device mode HID Class
+ *      Driver, but may be ingnored unless Host-to-Device FEATURE HID reports are used.
  *
  *  <b>Host Mode</b>
  *    - The \ref USB_Init() function no longer calls sei() to enable global interrupts, as the user application may need
@@ -31,6 +34,8 @@
  *      functions correctly.
  *    - The USBInterrupt.c USB driver source file has been relocated from LUFA/Drivers/USB/HighLevel/ to LUFA/Drivers/USB/LowLevel.
  *      Projects must update their makefile SRC values accordingly.
+ *    - The HID Host Class driver's function signature for the HID_Host_SendReportByID() function has been changed, to allow for a new
+ *      ReportType parameter. Existing calls to this function should substitute REPORT_ITEM_TYPE_Out as this parameter's value.
  *
  * \section Sec_Migration100219 Migrating from 091223 to 100219
  *
index 6dbceb6..b16e9cd 100644 (file)
@@ -206,11 +206,12 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID interface structure for the HID interface being referenced
  *  \param[in] ReportID          Report ID of the received report from the host
+ *  \param[in] ReportType        The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData        Pointer to the report buffer where the received report is stored
  *  \param[in] ReportSize        Size in bytes of the report received from the host
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 }
index 08b867e..18d1273 100644 (file)
@@ -78,6 +78,6 @@
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
                                                                                                                  
 #endif
index 2f084f3..7bba1ba 100644 (file)
@@ -69,13 +69,6 @@ void SetupHardware(void)
        PORTC &= ~ALL_RELAYS;
 }
 
-
-/** Event handler for the library USB Configuration Changed event. */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-       USB_Device_EnableSOFEvents();
-}
-
 /** Event handler for the library USB Unhandled Control Packet event. */
 void EVENT_USB_Device_UnhandledControlRequest(void)
 {
index b5b913f..a50903f 100644 (file)
@@ -292,11 +292,12 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
  *
  *  \param[in] HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced
  *  \param[in] ReportID  Report ID of the received report from the host
+ *  \param[in] ReportType  The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
  *  \param[in] ReportData  Pointer to a buffer where the created report has been stored
  *  \param[in] ReportSize  Size in bytes of the received HID report
  */
 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID,
-                                          const void* ReportData, const uint16_t ReportSize)
+                                          const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize)
 {
        Device_Report_t* ReportParams = (Device_Report_t*)ReportData;
        
index b6a3389..119ce76 100644 (file)
                bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
                                                  const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);
                void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, 
-                                                         const void* ReportData, const uint16_t ReportSize);
+                                                         const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize);
 
 #endif
index cf1f1f6..1254232 100644 (file)
@@ -28,5 +28,5 @@ the generated documentation for the library core in your chosen web browser for
 further Getting Started information.
 
 The documentation for the library itself (but not the documentation for the
-individual demos, projects or bootloaders) is also available as a seperate
+individual demos, projects or bootloaders) is also available as a separate
 package from the project webpage for convenience if Doxygen cannot be installed.
\ No newline at end of file