Fixed error in Endpoint.c using HSOFI rather than SOFI for counting elapsed milliseconds.
#include <avr/pgmspace.h>\r
\r
/* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Endpoint number of the Audio isochronous streaming data endpoint. */\r
#define AUDIO_STREAM_EPNUM 1\r
#else\r
#include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
\r
/* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
#define TCCRxA TCCR3A\r
#define TCCRxB TCCR3B\r
#define OCRxA OCR3A\r
#include <avr/pgmspace.h>\r
\r
/* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Endpoint number of the Audio isochronous streaming data endpoint. */\r
#define AUDIO_STREAM_EPNUM 1\r
#else\r
*/\r
#define EP_ACCEPTS_SMALL_PACKETS (0 << 7)\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Endpoint number of the Audio isochronous streaming data endpoint. */\r
#define AUDIO_STREAM_EPNUM 1\r
#else\r
#include <LUFA/Drivers/Board/LEDs.h>
\r
/* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
#define TCCRxA TCCR3A\r
#define TCCRxB TCCR3B\r
#define OCRxA OCR3A\r
*/\r
#define EP_ACCEPTS_SMALL_PACKETS (0 << 7)\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Endpoint number of the Audio isochronous streaming data endpoint. */\r
#define AUDIO_STREAM_EPNUM 1\r
#else\r
\r
/* Setup Mass Storage In and Out Endpoints */\r
if (!(Endpoint_ConfigureEndpoint(MASS_STORAGE_IN_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_IN, MASS_STORAGE_IO_EPSIZE,\r
- ENDPOINT_BANK_DOUBLE)))\r
+ ENDPOINT_DIR_IN, MASS_STORAGE_IO_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE)))\r
{\r
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
}\r
\r
if (!(Endpoint_ConfigureEndpoint(MASS_STORAGE_OUT_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_OUT, MASS_STORAGE_IO_EPSIZE,\r
- ENDPOINT_BANK_DOUBLE)))\r
+ ENDPOINT_DIR_OUT, MASS_STORAGE_IO_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE)))\r
{\r
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
} \r
void Bluetooth_ProcessACLPackets(void)\r
{\r
Bluetooth_ACL_Header_t ACLPacketHeader;\r
+ Bluetooth_DataPacket_Header_t DataHeader;\r
\r
Pipe_SelectPipe(BLUETOOTH_DATA_IN_PIPE);\r
Pipe_SetToken(PIPE_TOKEN_IN);\r
}\r
\r
Pipe_Read_Stream_LE(&ACLPacketHeader, sizeof(ACLPacketHeader));\r
- \r
- Bluetooth_DataPacket_Header_t DataHeader;\r
Pipe_Read_Stream_LE(&DataHeader, sizeof(DataHeader));\r
\r
BT_DEBUG("(ACL) Packet Received", NULL);\r
break;\r
case BLUETOOTH_SIGNAL_CONFIGURATION_REQUEST:\r
Bluetooth_ProcessSignalPacket_ConfigurationRequest(&ACLPacketHeader, &DataHeader, &SignalCommandHeader);\r
- break; \r
+ break;\r
+ case BLUETOOTH_SIGNAL_INFORMATION_REQUEST:\r
+ BT_DEBUG("(ACL) -- Information Request, Discarded");\r
+\r
+ Pipe_Discard_Stream(ACLPacketHeader.DataLength);\r
+ Pipe_ClearIN(); \r
+ Pipe_Freeze();\r
+ break;\r
default:\r
BT_DEBUG("(ACL) >> Unknown Signalling Command 0x%02X", SignalCommandHeader.Code);\r
\r
#define BLUETOOTH_SIGNAL_CONNECTION_RESPONSE 0x03\r
#define BLUETOOTH_SIGNAL_CONFIGURATION_REQUEST 0x04\r
#define BLUETOOTH_SIGNAL_CONFIGURATION_RESPONSE 0x05\r
+ #define BLUETOOTH_SIGNAL_INFORMATION_REQUEST 0x0A\r
\r
#define BLUETOOTH_CONNECTION_SUCCESSFUL 0x0000\r
#define BLUETOOTH_CONNECTION_REFUSED_RESOURCES 0x0004\r
\r
\r
# MCU name\r
-MCU = at90usb1287\r
+MCU = at90usb647\r
\r
\r
# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
* - MIDI device demo no longer blocks if a note change event is sent while the endpoint is not ready\r
* - Fixes to MassStorageHost for better device compatibility (increase command timeout, change MassStore_WaitForDataReceived()\r
* to only unfreeze and check one data pipe at a time)\r
+ * - Internal per-device preprocessing conditions changed to per-device series rather than per controller group for finer-grain\r
+ * internal control\r
*\r
*\r
* \section Sec_ChangeLog090605 Version 090605\r
#if defined(INCLUDE_FROM_EVENTS_C)\r
void USB_Event_Stub(void) ATTR_CONST;\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
void EVENT_USB_VBUSChange(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
void EVENT_USB_VBUSConnect(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
void EVENT_USB_VBUSDisconnect(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
\r
void USB_INT_DisableAllInterrupts(void)\r
{\r
- #if defined(USB_FULL_CONTROLLER)\r
+ #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
USBCON &= ~((1 << VBUSTE) | (1 << IDTE)); \r
- #elif defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #elif defined(USB_SERIES_4_AVR)\r
USBCON &= ~(1 << VBUSTE); \r
#endif\r
\r
\r
void USB_INT_ClearAllInterrupts(void)\r
{\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
USBINT = 0;\r
#endif\r
\r
ISR(USB_GEN_vect, ISR_BLOCK)\r
{\r
#if defined(USB_CAN_BE_DEVICE)\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
if (USB_INT_HasOccurred(USB_INT_VBUS) && USB_INT_IsEnabled(USB_INT_VBUS))\r
{\r
USB_INT_Clear(USB_INT_VBUS);\r
\r
EVENT_USB_Suspend();\r
\r
- #if defined(USB_LIMITED_CONTROLLER) && !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
+ #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
if (USB_IsConnected)\r
{\r
USB_IsConnected = false;\r
USB_INT_Disable(USB_INT_WAKEUP);\r
USB_INT_Enable(USB_INT_SUSPEND);\r
\r
- #if defined(USB_LIMITED_CONTROLLER) && !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
+ #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
if (!(USB_IsConnected))\r
{\r
USB_IsConnected = true;\r
#endif\r
\r
#if (defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__))\r
- #define USB_LIMITED_CONTROLLER\r
+ #define USB_SERIES_2_AVR\r
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
- #define USB_MODIFIED_FULL_CONTROLLER\r
- #else\r
- #define USB_FULL_CONTROLLER\r
+ #define USB_SERIES_4_AVR\r
+ #elif (defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))\r
+ #define USB_SERIES_6_AVR\r
+ #elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))\r
+ #define USB_SERIES_7_AVR\r
#endif \r
\r
#if (!defined(USB_DEVICE_ONLY) && !defined(USB_HOST_ONLY))\r
#define USB_CurrentMode USB_MODE_DEVICE\r
#endif\r
\r
- #if (defined(USB_HOST_ONLY) && defined(USB_DEVICE_ONLY))\r
+ #if (!(defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__)) && defined(USB_HOST_ONLY))\r
+ #error USB_HOST_ONLY is not available for the currently selected USB AVR model.\r
+ #elif (defined(USB_HOST_ONLY) && defined(USB_DEVICE_ONLY))\r
#error USB_HOST_ONLY and USB_DEVICE_ONLY are mutually exclusive.\r
#endif\r
\r
- #if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS))\r
- #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.\r
- #endif\r
-\r
#if defined(USE_STATIC_OPTIONS)\r
#define USB_Options USE_STATIC_OPTIONS\r
#endif\r
void* DescriptorPointer;\r
uint16_t DescriptorSize;\r
\r
- if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue,\r
- USB_ControlRequest.wIndex, &DescriptorPointer)) == NO_DESCRIPTOR)\r
+ if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex,\r
+ &DescriptorPointer)) == NO_DESCRIPTOR)\r
{\r
return;\r
}\r
while (USB_ControlRequest.wLength && (Endpoint_BytesInEndpoint() < USB_ControlEndpointSize))\r
{\r
#if defined (USE_EEPROM_DESCRIPTORS)\r
- Endpoint_Write_Byte(eeprom_read_byte(DescriptorPointer++)); \r
+ Endpoint_Write_Byte(eeprom_read_byte(DescriptorPointer++)); \r
#else\r
Endpoint_Write_Byte(pgm_read_byte(DescriptorPointer++));\r
#endif\r
#include "../HighLevel/StdDescriptors.h"\r
#include "Endpoint.h"\r
\r
+ /* Preprocessor Checks: */\r
+ #if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS))\r
+ #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.\r
+ #endif\r
+ \r
/* Public Interface - May be used in end-application: */\r
/* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the\r
* USB interface should be initialized in low speed (1.5Mb/s) mode.\r
*\r
else if (Endpoint_IsStalled())\r
return ENDPOINT_READYWAIT_EndpointStalled;\r
\r
- if (USB_INT_HasOccurred(USB_INT_HSOFI))\r
+ if (USB_INT_HasOccurred(USB_INT_SOFI))\r
{\r
- USB_INT_Clear(USB_INT_HSOFI);\r
+ USB_INT_Clear(USB_INT_SOFI);\r
\r
if (!(TimeoutMSRem--))\r
return ENDPOINT_READYWAIT_Timeout;\r
#define ENDPOINT_DOUBLEBANK_SUPPORTED(n) _ENDPOINT_GET_DOUBLEBANK(n)\r
\r
#if !defined(CONTROL_ONLY_DEVICE)\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Total number of endpoints (including the default control endpoint at address 0) which may\r
* be used in the device. Different USB AVR models support different amounts of endpoints,\r
* this value reflects the maximum number of endpoints for the currently selected AVR model.\r
*/\r
static inline uint8_t Endpoint_GetEndpointDirection(void);\r
#else\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
#define Endpoint_BytesInEndpoint() UEBCX\r
#else\r
#define Endpoint_BytesInEndpoint() UEBCLX\r
#define _ENDPOINT_GET_DOUBLEBANK2(details) _ENDPOINT_GET_DOUBLEBANK3(details)\r
#define _ENDPOINT_GET_DOUBLEBANK3(maxsize, db) db\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
#define ENDPOINT_DETAILS_EP0 64, true\r
#define ENDPOINT_DETAILS_EP1 256, true\r
#define ENDPOINT_DETAILS_EP2 64, true\r
USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;\r
#endif\r
\r
- #if defined(USB_DEVICE_ONLY) && defined(USB_FULL_CONTROLLER)\r
+ #if defined(USB_DEVICE_ONLY) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
UHWCON |= (1 << UIMOD);\r
#elif defined(USB_HOST_ONLY)\r
UHWCON &= ~(1 << UIMOD);\r
\r
USB_ResetInterface();\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
USB_OTGPAD_On();\r
#endif\r
\r
USB_Interface_Disable();\r
USB_PLL_Off();\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
USB_OTGPAD_Off();\r
#endif\r
\r
\r
if (!(USB_Options & USB_OPT_MANUAL_PLL))\r
{\r
- #if defined(USB_MODIFIED_FULL_CONTROLLER)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
PLLFRQ = ((1 << PLLUSB) | (1 << PDIV3) | (1 << PDIV1));\r
#endif\r
\r
\r
USB_CLK_Unfreeze();\r
\r
- #if (defined(USB_CAN_BE_DEVICE) && (defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)))\r
+ #if (defined(USB_CAN_BE_DEVICE) && (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)))\r
if (USB_CurrentMode == USB_MODE_DEVICE)\r
{\r
if (USB_Options & USB_DEVICE_OPT_LOWSPEED)\r
#if (F_CLOCK == 8000000)\r
#if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))\r
#define USB_PLL_PSC 0\r
- #elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || \\r
- defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || \\r
- defined(__AVR_ATmega32U6__))\r
- #define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))\r
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
#define USB_PLL_PSC 0\r
+ #elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || defined(__AVR_ATmega32U6__))\r
+ #define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))\r
+ #elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))\r
+ #define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))\r
#endif\r
#elif (F_CLOCK == 16000000)\r
- #if (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__))\r
- #define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP1))\r
- #elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))\r
- #define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP0))\r
- #elif (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))\r
+ #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))\r
#define USB_PLL_PSC (1 << PLLP0)\r
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
#define USB_PLL_PSC (1 << PINDIV)\r
+ #elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__))\r
+ #define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP1))\r
+ #elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))\r
+ #define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP0))\r
#endif\r
#endif\r
\r
*/\r
#define USB_MODE_NONE 0\r
\r
- /** Mode mask for the \ref USB_CurrentMode global and the \ref USB_Init() function. This indicates that the\r
- * USB interface is or should be initialized in the USB device mode.\r
- */\r
- #define USB_MODE_DEVICE 1\r
-\r
+ #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)\r
+ /** Mode mask for the \ref USB_CurrentMode global and the \ref USB_Init() function. This indicates that the\r
+ * USB interface is or should be initialized in the USB device mode.\r
+ */\r
+ #define USB_MODE_DEVICE 1\r
+ #endif\r
+ \r
#if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)\r
/** Mode mask for the \ref USB_CurrentMode global and the \ref USB_Init() function. This indicates that the\r
* USB interface is or should be initialized in the USB host mode.\r
*/\r
#define EP_TYPE_INTERRUPT 0x03\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Returns boolean true if the VBUS line is currently high (i.e. the USB host is supplying power),\r
* otherwise returns false.\r
*\r
#define USB_PLL_Off() MACROS{ PLLCSR = 0; }MACROE\r
#define USB_PLL_IsReady() ((PLLCSR & (1 << PLOCK)) ? true : false)\r
\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) \r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
#define USB_REG_On() MACROS{ UHWCON |= (1 << UVREGE); }MACROE\r
#define USB_REG_Off() MACROS{ UHWCON &= ~(1 << UVREGE); }MACROE\r
#else\r
#ifndef __USB_H__\r
#define __USB_H__\r
\r
- /* Preprocessor Checks: */\r
- #if (!(defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__)) && defined(USB_HOST_ONLY))\r
- #error USB_HOST_ONLY is not available for the currently selected USB AVR model.\r
- #endif\r
- \r
+ /* Preprocessor Checks: */ \r
#if (!(defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \\r
defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \\r
defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__) || \\r