diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2011-10-30 07:09:20 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2011-10-30 07:09:20 +0000 |
commit | 028a3c4ab3f73af3c63d05379002150c8ccd4982 (patch) | |
tree | 1f816bc9f792eae7affff8f12fb36ea6f5767362 /LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c | |
parent | 6519aaa571463ba0933b3d8a98251f113c51c7e0 (diff) | |
download | lufa-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.c | 27 |
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) { |