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
 /** 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,
  *  \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;
 {
        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, 
                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
                
 #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
 /** 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,
  *  \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
 }
 {
        // 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, 
                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
 
 #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
 /** 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,
  *  \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;
 {
        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, 
                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
 
 #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
 /** 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,
  *  \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)
        {
 {
        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, 
                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
                
 #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
 /** 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,
  *  \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;
 {
        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, 
                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
 
 
 #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
 /** 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,
  *  \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
 }
 {
        // 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, 
                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
 
 #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
 /** 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,
  *  \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
 }
 {
        // 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, 
                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
 #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
 /** 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,
  *  \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
 {
        // 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, 
                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);
 
                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();  
 
                        {
                                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)
                                
                                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_SelectEndpoint(ENDPOINT_CONTROLEP);
-                               Endpoint_Write_Control_Stream_LE(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize);
+                               Endpoint_Write_Control_Stream_LE(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportSize);
                                Endpoint_ClearOUT();
                        }
                
                                Endpoint_ClearOUT();
                        }
                
@@ -74,12 +73,13 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter
                        {
                                Endpoint_ClearSETUP();
                                
                        {
                                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();                             
                        }
                        
                                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,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,
                         *  \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
 
                /* 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,
          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;
        }
        {
                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,
        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, 
                {
                        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;
                                }
                                {
                                        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,
                                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,
                                {
                                        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;
                        }
                        {
                                return CDC_ENUMERROR_EndpointsNotFound;
                        }
@@ -139,7 +139,7 @@ uint8_t CDC_Host_ConfigurePipes(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
        return CDC_ENUMERROR_NoError;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -157,7 +157,7 @@ static uint8_t DComp_CDC_Host_NextCDCControlInterface(void* const CurrentDescrip
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -175,7 +175,7 @@ static uint8_t DComp_CDC_Host_NextCDCDataInterface(void* const CurrentDescriptor
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        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);
                                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
                                
                        #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,
        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;
                }
                {
                        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);
 
        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;
        }
        {
                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,
        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;
                {
                        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;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -124,7 +124,7 @@ static uint8_t DComp_HID_Host_NextHIDInterface(void* const CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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;
 {
        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;      
 }
 
          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)
        {
 {
        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
 #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 !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;
        
        {
                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)
                        .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
 #else
-                       .wValue        = ((REPORT_ITEM_TYPE_Out + 1) << 8),
+                       .wValue        = ((ReportType + 1) << 8),
 #endif
                        .wIndex        = HIDInterfaceInfo->State.InterfaceNumber,
                        .wLength       = ReportSize,
 #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
                        
                                                           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.
                         *
                         *  \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,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
                         *
                         *  \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
                        #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)
                        #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)
-                                                       ATTR_NON_NULL_PTR_ARG(3);
+                                                       ATTR_NON_NULL_PTR_ARG(4);
                        #else
                        #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.
                        #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)
 
                /* 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  
        
                        #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,
          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;
        }
        {
                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,
        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;
                }
                {
                        return MIDI_ENUMERROR_EndpointsNotFound;
                }
@@ -86,7 +86,7 @@ uint8_t MIDI_Host_ConfigurePipes(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceI
        return MIDI_ENUMERROR_NoError;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -104,7 +104,7 @@ static uint8_t DComp_MIDI_Host_NextMIDIStreamingInterface(void* const CurrentDes
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index dd064af..2ff6c9b 100644 (file)
 
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_MIDI_CLASS_HOST_C)
 
                /* 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
                                
                        #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,
          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;
        }
        {
                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,
        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;
                }
                {
                        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;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -106,7 +106,7 @@ static uint8_t DComp_NextMSInterface(void* const CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index 992c5a0..e4f7415 100644 (file)
                        
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_MS_CLASS_HOST_C)             
                        
                /* 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,
                                
                                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,
          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;
        }
        {
                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,
        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;
                }
                {
                        return PRNT_ENUMERROR_EndpointsNotFound;
                }
@@ -91,7 +91,7 @@ uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceI
        return PRNT_ENUMERROR_NoError;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -106,7 +106,7 @@ static uint8_t DComp_NextPRNTInterface(void* CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index 92f1f22..aa650ba 100644 (file)
                        
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_PRINTER_CLASS_HOST_C)                
                        
                /* 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
        
                        #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,
          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;
        }
        {
                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,
        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, 
                {
                        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;
                                }
                                {
                                        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,
                                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,
                                {
                                        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;
                        }
                        {
                                return RNDIS_ENUMERROR_EndpointsNotFound;
                        }
@@ -135,7 +135,7 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
        return RNDIS_ENUMERROR_NoError;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -153,7 +153,7 @@ static uint8_t DComp_RNDIS_Host_NextRNDISControlInterface(void* const CurrentDes
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -171,7 +171,7 @@ static uint8_t DComp_RNDIS_Host_NextRNDISDataInterface(void* const CurrentDescri
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        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 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
                                
                        #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,
          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;
        }
        {
                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,
        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;
                }
                {
                        return SI_ENUMERROR_EndpointsNotFound;
                }
@@ -103,7 +103,7 @@ uint8_t SImage_Host_ConfigurePipes(USB_ClassInfo_SI_Host_t* const SIInterfaceInf
        return SI_ENUMERROR_NoError;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
        {
@@ -121,7 +121,7 @@ uint8_t DComp_SI_Host_NextSIInterface(void* const CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;
 }
 
        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)
        {
 {
        if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
        {
index be33579..02a3f3a 100644 (file)
                
                /* Function Prototypes: */
                        #if defined(__INCLUDE_FROM_SI_CLASS_HOST_C)
                
                /* 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
        
                        #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 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
   *
   *  <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.
  *      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
  *
  *  <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.
  *      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
  *
  *
  * \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] 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,
  *  \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
 }
 {
        // 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, 
                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
                                                                                                                  
 #endif
index 2f084f3..7bba1ba 100644 (file)
@@ -69,13 +69,6 @@ void SetupHardware(void)
        PORTC &= ~ALL_RELAYS;
 }
 
        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)
 {
 /** 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] 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,
  *  \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;
        
 {
        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, 
                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
 
 #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
 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
 package from the project webpage for convenience if Doxygen cannot be installed.
\ No newline at end of file