diff --git a/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c b/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c
index c009462478..bccfb8ca9a 100644
--- a/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c
+++ b/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c
@@ -251,15 +251,15 @@ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8
* we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would
* have occupied).
*
- * \param[in] CurrentItemAttributes Pointer to the attrbutes of the item the HID report parser is currently working with
+ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with
*
* \return Boolean true if the item should be stored into the HID report structure, false if it should be discarded
*/
-bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes)
+bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem)
{
/* Check the attributes of the current item - see if we are interested in it or not;
* only store KEYBOARD usage page items into the Processed HID Report structure to
* save RAM and ignore the rest
*/
- return (CurrentItemAttributes->Usage.Page == USAGE_PAGE_KEYBOARD);
+ return (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_KEYBOARD);
}
diff --git a/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.h b/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.h
index 3841a4a575..46d73af15d 100644
--- a/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.h
+++ b/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.h
@@ -75,4 +75,6 @@
void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8_t SubErrorCode);
void EVENT_USB_Host_DeviceEnumerationComplete(void);
+ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem);
+
#endif
diff --git a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
index 6218f4cfb1..b9edee1e11 100644
--- a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
+++ b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
@@ -250,16 +250,36 @@ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8
* we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would
* have occupied).
*
- * \param[in] CurrentItemAttributes Pointer to the attrbutes of the item the HID report parser is currently working with
+ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with
*
* \return Boolean true if the item should be stored into the HID report structure, false if it should be discarded
*/
-bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes)
+bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem)
{
+ bool IsMouse = false;
+
+ /* Iterate through the item's collection path, until either the root collection node or a collection with the
+ * Mouse Usage is found - this prevents Joysticks, which use identical descriptors except for the Joystick usage
+ * parent node, from being erronously treated as a mouse
+ */
+ for (HID_CollectionPath_t* CurrPath = CurrentItem->CollectionPath; CurrPath != NULL; CurrPath = CurrPath->Parent)
+ {
+ if ((CurrPath->Usage.Page == USAGE_PAGE_GENERIC_DCTRL) &&
+ (CurrPath->Usage.Usage == USAGE_MOUSE))
+ {
+ IsMouse = true;
+ break;
+ }
+ }
+
+ /* If a collection with the mouse usage was not found, indicate that we are not interested in this item */
+ if (!IsMouse)
+ return false;
+
/* Check the attributes of the current item - see if we are interested in it or not;
* only store BUTTON and GENERIC_DESKTOP_CONTROL items into the Processed HID Report
* structure to save RAM and ignore the rest
*/
- return ((CurrentItemAttributes->Usage.Page == USAGE_PAGE_BUTTON) ||
- (CurrentItemAttributes->Usage.Page == USAGE_PAGE_GENERIC_DCTRL));
+ return ((CurrentItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) ||
+ (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL));
}
diff --git a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.h b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.h
index 038e69182b..85f05d1832 100644
--- a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.h
+++ b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.h
@@ -69,6 +69,9 @@
/** HID Report Descriptor Usage Page value for a Generic Desktop Control */
#define USAGE_PAGE_GENERIC_DCTRL 0x01
+ /** HID Report Descriptor Usage for a Mouse */
+ #define USAGE_MOUSE 0x02
+
/** HID Report Descriptor Usage value for a X axis movement */
#define USAGE_X 0x30
@@ -84,4 +87,6 @@
void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8_t SubErrorCode);
void EVENT_USB_Host_DeviceEnumerationComplete(void);
+ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem);
+
#endif
diff --git a/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.c b/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.c
index 523765b11e..0ad7d4b92b 100644
--- a/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.c
+++ b/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.c
@@ -75,15 +75,15 @@ uint8_t GetHIDReportData(void)
* we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would
* have occupied).
*
- * \param[in] CurrentItemAttributes Pointer to the attrbutes of the item the HID report parser is currently working with
+ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with
*
* \return Boolean true if the item should be stored into the HID report structure, false if it should be discarded
*/
-bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes)
+bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem)
{
/* Check the attributes of the current item - see if we are interested in it or not;
* only store KEYBOARD usage page items into the Processed HID Report structure to
* save RAM and ignore the rest
*/
- return (CurrentItemAttributes->Usage.Page == USAGE_PAGE_KEYBOARD);
+ return (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_KEYBOARD);
}
diff --git a/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.h b/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.h
index 974cf72c77..11f4e595c1 100644
--- a/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.h
+++ b/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.h
@@ -77,6 +77,6 @@
/* Function Prototypes: */
uint8_t GetHIDReportData(void);
- bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes);
+ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItemAttributes);
#endif
diff --git a/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.c b/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.c
index 4d13ce519c..595b586a97 100644
--- a/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.c
+++ b/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.c
@@ -75,16 +75,36 @@ uint8_t GetHIDReportData(void)
* we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would
* have occupied).
*
- * \param[in] CurrentItemAttributes Pointer to the attrbutes of the item the HID report parser is currently working with
+ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with
*
* \return Boolean true if the item should be stored into the HID report structure, false if it should be discarded
*/
-bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes)
+bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem)
{
- /* Check the attributes of the current item - see if we are interested in it or not;
+ bool IsMouse = false;
+
+ /* Iterate through the item's collection path, until either the root collection node or a collection with the
+ * Mouse Usage is found - this prevents Joysticks, which use identical descriptors except for the Joystick usage
+ * parent node, from being erronously treated as a mouse
+ */
+ for (HID_CollectionPath_t* CurrPath = CurrentItem->CollectionPath; CurrPath != NULL; CurrPath = CurrPath->Parent)
+ {
+ if ((CurrPath->Usage.Page == USAGE_PAGE_GENERIC_DCTRL) &&
+ (CurrPath->Usage.Usage == USAGE_MOUSE))
+ {
+ IsMouse = true;
+ break;
+ }
+ }
+
+ /* If a collection with the mouse usage was not found, indicate that we are not interested in this item */
+ if (!IsMouse)
+ return false;
+
+ /* Check the attributes of the current mouse item - see if we are interested in it or not;
* only store BUTTON and GENERIC_DESKTOP_CONTROL items into the Processed HID Report
* structure to save RAM and ignore the rest
*/
- return ((CurrentItemAttributes->Usage.Page == USAGE_PAGE_BUTTON) ||
- (CurrentItemAttributes->Usage.Page == USAGE_PAGE_GENERIC_DCTRL));
+ return ((CurrentItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) ||
+ (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL));
}
diff --git a/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.h b/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.h
index ae6871c578..41966da177 100644
--- a/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.h
+++ b/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.h
@@ -43,6 +43,9 @@
#include "MouseHostWithParser.h"
/* Macros: */
+ /** HID Report Descriptor Usage for a Mouse */
+ #define USAGE_MOUSE 0x02
+
/** HID Report Descriptor Usage Page value for a toggle button */
#define USAGE_PAGE_BUTTON 0x09
@@ -86,6 +89,6 @@
/* Function Prototypes: */
uint8_t GetHIDReportData(void);
- bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes);
+ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem);
#endif
diff --git a/LUFA.pnproj b/LUFA.pnproj
index 0af71682d6..9c7b006d16 100644
--- a/LUFA.pnproj
+++ b/LUFA.pnproj
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/LUFA/Drivers/Peripheral/ADC.h b/LUFA/Drivers/Peripheral/ADC.h
index 2be4c2ab9d..32c8261170 100644
--- a/LUFA/Drivers/Peripheral/ADC.h
+++ b/LUFA/Drivers/Peripheral/ADC.h
@@ -63,7 +63,7 @@
defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
defined(__AVR_ATmega32U6__))
- #include "AT90USBXXX67/ADC.h"
+ #include "AVRU4U6U7/ADC.h"
#else
#error "ADC is not available for the currently selected AVR model."
#endif
diff --git a/LUFA/Drivers/Peripheral/AT90USBXXX67/ADC.h b/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
similarity index 95%
rename from LUFA/Drivers/Peripheral/AT90USBXXX67/ADC.h
rename to LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
index edcbc57817..3824145bf6 100644
--- a/LUFA/Drivers/Peripheral/AT90USBXXX67/ADC.h
+++ b/LUFA/Drivers/Peripheral/AVRU4U6U7/ADC.h
@@ -37,13 +37,13 @@
*/
/** \ingroup Group_ADC
- * @defgroup Group_ADC_AT90USBXXX67 AT90USBXXX6 and AT90USBXXX7 Models
+ * @defgroup Group_ADC_AVRU4U6U7 Series U4, U6 and U7 Model ADC Driver
*
* @{
*/
-#ifndef __ADC_AT90USBXXX67_H__
-#define __ADC_AT90USBXXX67_H__
+#ifndef __ADC_AVRU4U6U7_H__
+#define __ADC_AVRU4U6U7_H__
/* Includes: */
#include "../../../Common/Common.h"
diff --git a/LUFA/Drivers/USB/Class/Host/HIDParser.c b/LUFA/Drivers/USB/Class/Host/HIDParser.c
index 4d433e56e2..f3763081dc 100644
--- a/LUFA/Drivers/USB/Class/Host/HIDParser.c
+++ b/LUFA/Drivers/USB/Class/Host/HIDParser.c
@@ -271,7 +271,7 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
if (ParserData->LargestReportSizeBits < CurrReportIDInfo->ReportSizeBits[ReportSizeIndex])
ParserData->LargestReportSizeBits = CurrReportIDInfo->ReportSizeBits[ReportSizeIndex];
- if (!(ReportItemData & IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&CurrStateTable->Attributes))
+ if (!(ReportItemData & IOF_CONSTANT) && CALLBACK_HIDParser_FilterHIDReportItem(&NewReportItem))
{
if (ParserData->TotalReportItems == HID_MAX_REPORTITEMS)
return HID_PARSE_InsufficientReportItems;
diff --git a/LUFA/Drivers/USB/Class/Host/HIDParser.h b/LUFA/Drivers/USB/Class/Host/HIDParser.h
index e9716f3fc4..de98967a26 100644
--- a/LUFA/Drivers/USB/Class/Host/HIDParser.h
+++ b/LUFA/Drivers/USB/Class/Host/HIDParser.h
@@ -288,11 +288,11 @@
* HID_ReportInfo_t structure. This can be used to filter only those items the application will be using, so that
* no RAM is wasted storing the attributes for report items which will never be referenced by the application.
*
- * \param[in] CurrentItemAttributes Pointer to the current report item attributes for user checking
+ * \param[in] CurrentItem Pointer to the current report item for user checking
*
* \return Boolean true if the item should be stored into the HID_ReportInfo_t structure, false if it should be ignored
*/
- bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_Attributes_t* CurrentItemAttributes);
+ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* CurrentItem);
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 7b50da95e7..6c25c584a3 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -24,6 +24,10 @@
* - Audio class Device mode demos now work at both 16MHz and 8MHz, rather than just at 8MHz
* - The previous USBtoSerial demo has been moved into the projects directory, as it was just a modified CDC demo
* - The Endpoint/Pipe functions now use the const qualifier on the input buffer
+ * - Changed the CALLBACK_HIDParser_FilterHIDReportItem() callback to pass a HID_ReportItem_t rather than just the current
+ * item's attributes, to expose more information on the item (including it's type, collection path, etc.)
+ * - Changed MouseHostWithParser demos to check that the report items have a Mouse usage collection as a parent at some point,
+ * to prevent Joysticks from enumerating with the demo
*
* Fixed:
* - Fixed PrinterHost demo returning invalid Device ID data when the attached device does not have a
diff --git a/LUFA/ManPages/DirectorySummaries.txt b/LUFA/ManPages/DirectorySummaries.txt
index c6691d7d88..13583f5d85 100644
--- a/LUFA/ManPages/DirectorySummaries.txt
+++ b/LUFA/ManPages/DirectorySummaries.txt
@@ -27,9 +27,8 @@
* This folder contains drivers for several of the AVR internal peripherals such as the USART, compatible with
* all USB AVR models.
*
- * \dir LUFA/Drivers/Peripheral/AT90USBXXX67
- * \brief AT90USBXXX6, AT90USBXXX7 and ATMEGAXXU4 AVR model peripheral driver files. Its original name is due to legacy
- * reasons.
+ * \dir LUFA/Drivers/Peripheral/AVRU4U6U7
+ * \brief AT90USBXXX6, AT90USBXXX7 and ATMEGAXXU4 AVR model peripheral driver files.
*
* This folder contains drivers for several of the AVR internal peripherals such as the USART, compatible only with
* the AT90USBXXX6, AT90USBXXX7 and ATMEGAXXU4 USB AVR models, such as the AT90USB1287. Its contents should not be
diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index dc2b47a080..bba01ffa44 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -23,9 +23,10 @@
* - Change makefiles to allow for absolute LUFA location to be used
* - Add RNDIS Host Class driver
* - Add unit testing to APIs
+ * - Add board overviews
* - Make new demos
* -# Keyboard/Mouse Dual Class Host
- * -# Multiple-report HID device
+ * -# Multiple-Report HID device
* -# Mouse/CDC Dual Class Device
* -# Joystick Host
* - Port LUFA to other architectures
diff --git a/LUFA/ManPages/MigrationInformation.txt b/LUFA/ManPages/MigrationInformation.txt
index 4d2df219f0..a429d3d3c0 100644
--- a/LUFA/ManPages/MigrationInformation.txt
+++ b/LUFA/ManPages/MigrationInformation.txt
@@ -11,7 +11,12 @@
* areas relevant to making older projects compatible with the API changes of each new release.
*
* \section Sec_MigrationXXXXXX Migrating from 090924 to XXXXXX
- * No Migration information for this release - all library elements are backwards-compatible with 090924.
+ *
+ * Host Mode
+ * - The \ref CALLBACK_HIDParser_FilterHIDReportItem() HID Parser callback now passes a complete HID_ReportItem_t to the
+ * user application, instead of just its attributes.
+ *
+ No Migration information for this release - all library elements are backwards-compatible with 090924.
*
* \section Sec_Migration090924 Migrating from 090810 to 090924
*