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 *