diff --git a/Demos/Host/ClassDriver/MouseHost/MouseHost.c b/Demos/Host/ClassDriver/MouseHost/MouseHost.c index 5b9b4431e2..b80a91c26b 100644 --- a/Demos/Host/ClassDriver/MouseHost/MouseHost.c +++ b/Demos/Host/ClassDriver/MouseHost/MouseHost.c @@ -110,12 +110,7 @@ int main(void) printf("Mouse Enumerated.\r\n"); USB_HostState = HOST_STATE_Configured; break; - case HOST_STATE_Configured: - if (HID_Host_IsReportReceived(&Mouse_HID_Interface)) - { - - } - + case HOST_STATE_Configured: break; } diff --git a/LUFA.pnproj b/LUFA.pnproj index b3242ba5d6..f1af4003aa 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/Common/BoardTypes.h b/LUFA/Common/BoardTypes.h index a4daa18773..9b3a9cc785 100644 --- a/LUFA/Common/BoardTypes.h +++ b/LUFA/Common/BoardTypes.h @@ -78,6 +78,9 @@ */ #define BOARD_USER 5 + /** Selects the BUMBLEB specific board drivers, using the officially recommended peripheral layout. */ + #define BOARD_BUMBLEB 6 + #endif /** @} */ diff --git a/LUFA/Drivers/Board/ATAVRUSBRF01/Buttons.h b/LUFA/Drivers/Board/ATAVRUSBRF01/Buttons.h index 29cc4e3625..2f8e4a6dd9 100644 --- a/LUFA/Drivers/Board/ATAVRUSBRF01/Buttons.h +++ b/LUFA/Drivers/Board/ATAVRUSBRF01/Buttons.h @@ -35,6 +35,12 @@ * \note This file should not be included directly. It is automatically included as needed by the Buttons driver * dispatch header located in LUFA/Drivers/Board/Buttons.h. */ + +/** \ingroup Group_Buttons + * @defgroup Group_Buttons_ATAVRUSBRF01 ATAVRUSBRF01 + * + * @{ + */ #ifndef __BUTTONS_ATAVRUSBRF01_H__ #define __BUTTONS_ATAVRUSBRF01_H__ @@ -82,3 +88,4 @@ #endif +/** @} */ diff --git a/LUFA/Drivers/Board/BUMBLEB/Buttons.h b/LUFA/Drivers/Board/BUMBLEB/Buttons.h new file mode 100644 index 0000000000..2b02259339 --- /dev/null +++ b/LUFA/Drivers/Board/BUMBLEB/Buttons.h @@ -0,0 +1,92 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2009. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Board specific Buttons driver header for the BUMBLEB. The BUMBLEB third-party board does not include any on-board + * peripherals, but does have an officially recommended external peripheral layout for buttons, LEDs and a Joystick. + * + * \note This file should not be included directly. It is automatically included as needed by the Buttons driver + * dispatch header located in LUFA/Drivers/Board/Buttons.h. + */ + +/** \ingroup Group_Buttons + * @defgroup Group_Buttons_BUMBLEB BUMBLEB + * + * @{ + */ + +#ifndef __BUTTONS_BUMBLEB_H__ +#define __BUTTONS_BUMBLEB_H__ + + /* Includes: */ + #include + #include + + #include "../../../Common/Common.h" + + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + + /* Preprocessor Checks: */ + #if !defined(INCLUDE_FROM_BUTTONS_H) + #error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead. + #endif + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** Button mask for the first button on the board. */ + #define BUTTONS_BUTTON1 (1 << 7) + + /* Inline Functions: */ + #if !defined(__DOXYGEN__) + static inline void Buttons_Init(void) + { + DDRD &= ~BUTTONS_BUTTON1; + PORTD |= BUTTONS_BUTTON1; + } + + static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT; + static inline uint8_t Buttons_GetStatus(void) + { + return ((PIND & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1); + } + #endif + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + +#endif + +/** @} */ diff --git a/LUFA/Drivers/Board/BUMBLEB/Joystick.h b/LUFA/Drivers/Board/BUMBLEB/Joystick.h new file mode 100644 index 0000000000..edcf5320f8 --- /dev/null +++ b/LUFA/Drivers/Board/BUMBLEB/Joystick.h @@ -0,0 +1,109 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2009. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Board specific joystick driver header for the USBKEY. The BUMBLEB third-party board does not include any on-board + * peripherals, but does have an officially recommended external peripheral layout for buttons, LEDs and a Joystick. + * + * \note This file should not be included directly. It is automatically included as needed by the joystick driver + * dispatch header located in LUFA/Drivers/Board/Joystick.h. + */ + +/** \ingroup Group_Joystick + * @defgroup Group_Joystick_BUMBLEB BUMBLEB + * + * @{ + */ + +#ifndef __JOYSTICK_BUMBLEB_H__ +#define __JOYSTICK_BUMBLEB_H__ + + /* Includes: */ + #include + + #include "../../../Common/Common.h" + + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + + /* Preprocessor Checks: */ + #if !defined(INCLUDE_FROM_JOYSTICK_H) + #error Do not include this file directly. Include LUFA/Drivers/Board/Joystick.h instead. + #endif + + /* Private Interface - For use in library only: */ + #if !defined(__DOXYGEN__) + /* Macros: */ + #define JOY_MASK ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4)) + #endif + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** Mask for the joystick being pushed in the left direction. */ + #define JOY_LEFT (1 << 2) + + /** Mask for the joystick being pushed in the upward direction. */ + #define JOY_UP (1 << 3) + + /** Mask for the joystick being pushed in the right direction. */ + #define JOY_RIGHT (1 << 0) + + /** Mask for the joystick being pushed in the downward direction. */ + #define JOY_DOWN (1 << 1) + + /** Mask for the joystick being pushed inward. */ + #define JOY_PRESS (1 << 4) + + /* Inline Functions: */ + #if !defined(__DOXYGEN__) + static inline void Joystick_Init(void) + { + DDRD &= ~JOY_MASK; + PORTD |= JOY_MASK; + }; + + static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT; + static inline uint8_t Joystick_GetStatus(void) + { + return (uint8_t)(~PIND & JOY_MASK); + } + #endif + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + +#endif + +/** @} */ diff --git a/LUFA/Drivers/Board/BUMBLEB/LEDs.h b/LUFA/Drivers/Board/BUMBLEB/LEDs.h new file mode 100644 index 0000000000..4c310606cb --- /dev/null +++ b/LUFA/Drivers/Board/BUMBLEB/LEDs.h @@ -0,0 +1,126 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2009. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, and distribute this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Board specific LED driver header for the BUMBLEB. The BUMBLEB third-party board does not include any on-board + * peripherals, but does have an officially recommended external peripheral layout for buttons, LEDs and a Joystick. + * + * \note This file should not be included directly. It is automatically included as needed by the LEDs driver + * dispatch header located in LUFA/Drivers/Board/LEDs.h. + */ + +/** \ingroup Group_LEDs + * @defgroup Group_LEDs_BUMBLEB BUMBLEB + * + * @{ + */ + +#ifndef __LEDS_BUMBLEB_H__ +#define __LEDS_BUMBLEB_H__ + + /* Includes: */ + #include + + #include "../../../Common/Common.h" + + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + + /* Preprocessor Checks: */ + #if !defined(INCLUDE_FROM_LEDS_H) + #error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead. + #endif + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** LED mask for the first LED on the board. */ + #define LEDS_LED1 (1 << 4) + + /** LED mask for the second LED on the board. */ + #define LEDS_LED2 (1 << 5) + + /** LED mask for the third LED on the board. */ + #define LEDS_LED3 (1 << 6) + + /** LED mask for the fourth LED on the board. */ + #define LEDS_LED4 (1 << 7) + + /** LED mask for all the LEDs on the board. */ + #define LEDS_ALL_LEDS (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4) + + /** LED mask for the none of the board LEDs */ + #define LEDS_NO_LEDS 0 + + /* Inline Functions: */ + #if !defined(__DOXYGEN__) + static inline void LEDs_Init(void) + { + DDRB |= LEDS_ALL_LEDS; + PORTB &= ~LEDS_ALL_LEDS; + } + + static inline void LEDs_TurnOnLEDs(const uint8_t LedMask) + { + PORTB |= LedMask; + } + + static inline void LEDs_TurnOffLEDs(const uint8_t LedMask) + { + PORTB &= ~LedMask; + } + + static inline void LEDs_SetAllLEDs(const uint8_t LedMask) + { + PORTB = ((PORTB & ~LEDS_ALL_LEDS) | LedMask); + } + + static inline void LEDs_ChangeLEDs(const uint8_t LedMask, const uint8_t ActiveMask) + { + PORTB = ((PORTB & ~LedMask) | ActiveMask); + } + + static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; + static inline uint8_t LEDs_GetLEDs(void) + { + return (PORTB & LEDS_ALL_LEDS); + } + #endif + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + +#endif + +/** @} */ diff --git a/LUFA/Drivers/Board/Buttons.h b/LUFA/Drivers/Board/Buttons.h index 4216d07cc0..b8c748b578 100644 --- a/LUFA/Drivers/Board/Buttons.h +++ b/LUFA/Drivers/Board/Buttons.h @@ -81,6 +81,8 @@ #include "ATAVRUSBRF01/Buttons.h" #elif (BOARD == BOARD_USER) #include "Board/Buttons.h" + #elif (BOARD == BOARD_BUMBLEB) + #include "BUMBLEB/Buttons.h" #else #error The selected board does not contain any GPIO buttons. #endif diff --git a/LUFA/Drivers/Board/Joystick.h b/LUFA/Drivers/Board/Joystick.h index 141a58ea32..d67f22f539 100644 --- a/LUFA/Drivers/Board/Joystick.h +++ b/LUFA/Drivers/Board/Joystick.h @@ -78,6 +78,8 @@ #include "STK526/Joystick.h" #elif (BOARD == BOARD_USER) #include "Board/Joystick.h" + #elif (BOARD == BOARD_BUMBLEB) + #include "BUMBLEB/Joystick.h" #else #error The selected board does not contain a joystick. #endif diff --git a/LUFA/Drivers/Board/LEDs.h b/LUFA/Drivers/Board/LEDs.h index 50d38fd642..62424777af 100644 --- a/LUFA/Drivers/Board/LEDs.h +++ b/LUFA/Drivers/Board/LEDs.h @@ -90,6 +90,8 @@ #include "ATAVRUSBRF01/LEDs.h" #elif (BOARD == BOARD_USER) #include "Board/LEDs.h" + #elif (BOARD == BOARD_BUMBLEB) + #include "BUMBLEB/LEDs.h" #endif #if !defined(LEDS_LED1) diff --git a/LUFA/Drivers/Board/STK525/Buttons.h b/LUFA/Drivers/Board/STK525/Buttons.h index dc7aca7335..cc24897df1 100644 --- a/LUFA/Drivers/Board/STK525/Buttons.h +++ b/LUFA/Drivers/Board/STK525/Buttons.h @@ -36,6 +36,12 @@ * dispatch header located in LUFA/Drivers/Board/Buttons.h. */ +/** \ingroup Group_Buttons + * @defgroup Group_Buttons_STK525 STK525 + * + * @{ + */ + #ifndef __BUTTONS_STK525_H__ #define __BUTTONS_STK525_H__ @@ -87,3 +93,5 @@ #endif #endif + +/** @} */ diff --git a/LUFA/Drivers/Board/STK526/Buttons.h b/LUFA/Drivers/Board/STK526/Buttons.h index 9d392f2dee..4b84a1ecd4 100644 --- a/LUFA/Drivers/Board/STK526/Buttons.h +++ b/LUFA/Drivers/Board/STK526/Buttons.h @@ -36,6 +36,12 @@ * dispatch header located in LUFA/Drivers/Board/Buttons.h. */ +/** \ingroup Group_Buttons + * @defgroup Group_Buttons_STK526 STK526 + * + * @{ + */ + #ifndef __BUTTONS_STK526_H__ #define __BUTTONS_STK526_H__ @@ -87,3 +93,5 @@ #endif #endif + +/** @} */ diff --git a/LUFA/Drivers/Board/USBKEY/Buttons.h b/LUFA/Drivers/Board/USBKEY/Buttons.h index 78c5b56627..9920eb15ec 100644 --- a/LUFA/Drivers/Board/USBKEY/Buttons.h +++ b/LUFA/Drivers/Board/USBKEY/Buttons.h @@ -35,6 +35,12 @@ * \note This file should not be included directly. It is automatically included as needed by the Buttons driver * dispatch header located in LUFA/Drivers/Board/Buttons.h. */ + +/** \ingroup Group_Buttons + * @defgroup Group_Buttons_USBKEY USBKEY + * + * @{ + */ #ifndef __BUTTONS_USBKEY_H__ #define __BUTTONS_USBKEY_H__ @@ -82,3 +88,4 @@ #endif +/** @} */ diff --git a/LUFA/Drivers/USB/Class/Host/HID.c b/LUFA/Drivers/USB/Class/Host/HID.c index 5a5ec484df..9b1ec161d7 100644 --- a/LUFA/Drivers/USB/Class/Host/HID.c +++ b/LUFA/Drivers/USB/Class/Host/HID.c @@ -185,10 +185,15 @@ uint8_t USB_HID_Host_SetBootProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo) Pipe_SelectPipe(PIPE_CONTROLPIPE); - if (!(HIDInterfaceInfo->State.SupportsBootSubClass)) + if (!(HIDInterfaceInfo->State.SupportsBootProtocol)) return HID_ERROR_LOGICAL; + + if ((ErrorCode = USB_Host_SendControlRequest(HIDReportData)) != HOST_SENDCONTROL_Successful) + return ErrorCode; + + HIDInterfaceInfo->State.UsingBootProtocol = true; - return USB_Host_SendControlRequest(NULL); + return HOST_SENDCONTROL_Successful; } uint8_t USB_HID_Host_SetReportProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo) @@ -226,6 +231,8 @@ uint8_t USB_HID_Host_SetReportProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInf if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful) return ErrorCode; + HIDInterfaceInfo->State.UsingBootProtocol = false; + if (HIDInterfaceInfo->Config.HIDParserData == NULL) return HID_ERROR_LOGICAL; @@ -234,7 +241,7 @@ uint8_t USB_HID_Host_SetReportProtocol(USB_ClassInfo_HID_Host_t* HIDInterfaceInf { return HID_ERROR_LOGICAL | ErrorCode; } - + return 0; } diff --git a/LUFA/Drivers/USB/Class/Host/HID.h b/LUFA/Drivers/USB/Class/Host/HID.h index c0f67e7525..95c1334192 100644 --- a/LUFA/Drivers/USB/Class/Host/HID.h +++ b/LUFA/Drivers/USB/Class/Host/HID.h @@ -92,9 +92,10 @@ uint16_t DataINPipeSize; /**< Size in bytes of the HID interface's IN data pipe */ uint16_t DataOUTPipeSize; /**< Size in bytes of the HID interface's OUT data pipe */ - bool SupportsBootSubClass; /**< Indicates if the current interface instance supports the HID Boot + bool SupportsBootProtocol; /**< Indicates if the current interface instance supports the HID Boot * Protocol when enabled via \ref USB_HID_Host_SetBootProtocol() */ + bool UsingBootProtocol; /**< Indicates that the interface is currently initialised in Boot Protocol mode */ uint16_t HIDReportSize; /**< Size in bytes of the HID report descriptor in the device */ } State; /**< State data for the USB class interface within the device. All elements in this section * may be set to initial values, but may also be ignored to default to sane values when diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index b2e80da7af..4c36afc30d 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -20,6 +20,7 @@ * - Added extra masks to the SPI driver, changed SPI_Init() so that the clock polarity and sample modes can be set * - Added new callback to the HID report parser, so that the user application can filter only the items it is interested * in to be stored into the HIDReportInfo structure to save RAM + * - Added support for the officially recommended layout of the external peripherals connected to the BUMBLEB board * * Changed: * - SetIdle requests to the HID device driver with a 0 idle period (send changes only) now only affect the requested diff --git a/LUFA/ManPages/DeviceSupport.txt b/LUFA/ManPages/DeviceSupport.txt index 140055da30..2eb963e496 100644 --- a/LUFA/ManPages/DeviceSupport.txt +++ b/LUFA/ManPages/DeviceSupport.txt @@ -27,6 +27,9 @@ * - STK526 * - RZUSBSTICK * - ATAVRUSBRF01 - * - Custom User Boards + * + * Currently supported third-party boards: + * - BUMBLEB (using recommended peripheral layout) + * - Any Other Custom User Boards (with Board Drivers, \see Page_WritingBoardDrivers) */ \ No newline at end of file diff --git a/LUFA/ManPages/LibraryApps.txt b/LUFA/ManPages/LibraryApps.txt index 0b49a32e17..59aaea5d17 100644 --- a/LUFA/ManPages/LibraryApps.txt +++ b/LUFA/ManPages/LibraryApps.txt @@ -12,7 +12,7 @@ * further at the expense of a loss of flexibility). * * With one or two exceptions (e.g. proprietary classes such as RNDIS) all the included demos will work across all OSes without - * the need for special drivers. One Windows, some demos require the supplied .INF file to be used as the device driver, which + * the need for special drivers. On Windows, some demos require the supplied .INF file to be used as the device driver, which * directs the OS to use its inbuilt class drivers for the device. * * Also included with the library are three fully functional bootloaders, located in the /Bootloaders/ subdirectory.