aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-10-30 07:09:20 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-10-30 07:09:20 +0000
commit028a3c4ab3f73af3c63d05379002150c8ccd4982 (patch)
tree1f816bc9f792eae7affff8f12fb36ea6f5767362 /LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c
parent6519aaa571463ba0933b3d8a98251f113c51c7e0 (diff)
downloadlufa-028a3c4ab3f73af3c63d05379002150c8ccd4982.tar.gz
lufa-028a3c4ab3f73af3c63d05379002150c8ccd4982.tar.bz2
lufa-028a3c4ab3f73af3c63d05379002150c8ccd4982.zip
XMEGA port improvements; connection and disconnection are now detected correctly. Fixed incorrect interrupt priority levels being set for XMEGA devices.
Diffstat (limited to 'LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c')
-rw-r--r--LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c b/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c
index 6e198d3a4..65422177b 100644
--- a/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c
+++ b/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c
@@ -39,8 +39,31 @@
uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
#endif
-volatile uint8_t Endpoint_SelectedEndpoint;
-volatile USB_EP_t* Endpoint_SelectedEndpointHandle;
+Endpoint_AuxData_t Endpoint_AuxData[ENDPOINT_DETAILS_MAXEP * 2];
+
+volatile uint8_t Endpoint_SelectedEndpoint;
+volatile USB_EP_t* Endpoint_SelectedEndpointHandle;
+volatile Endpoint_AuxData_t* Endpoint_SelectedEndpointAux;
+
+bool Endpoint_ConfigureEndpoint_PRV(const uint8_t Number,
+ const uint8_t Direction,
+ const uint8_t Config,
+ const uint8_t Size)
+{
+ Endpoint_SelectEndpoint(Number | Direction);
+
+ Endpoint_SelectedEndpointHandle->CTRL = 0;
+ Endpoint_SelectedEndpointHandle->STATUS = (Direction == ENDPOINT_DIR_IN) ? USB_EP_BUSNACK0_bm : 0;
+ Endpoint_SelectedEndpointHandle->CTRL = Config;
+ Endpoint_SelectedEndpointHandle->CNT = 0;
+ Endpoint_SelectedEndpointHandle->DATAPTR = (intptr_t)&Endpoint_SelectedEndpointAux->Data;
+
+ Endpoint_SelectedEndpointAux->BankSize = Size;
+ Endpoint_SelectedEndpointAux->FIFOLength = (Direction == ENDPOINT_DIR_IN) ? Size : 0;
+ Endpoint_SelectedEndpointAux->FIFOPosition = 0;
+
+ return true;
+}
void Endpoint_ClearEndpoints(void)
{