Commit 64e93612 authored by Dean Camera's avatar Dean Camera
Browse files

Minor corrections to the XMEGA USB controller implementation.

parent df33278d
...@@ -39,10 +39,10 @@ ...@@ -39,10 +39,10 @@
uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
#endif #endif
Endpoint_FIFOPair_t USB_Endpoint_FIFOs[ENDPOINT_DETAILS_MAXEP]; Endpoint_FIFOPair_t USB_Endpoint_FIFOs[ENDPOINT_TOTAL_ENDPOINTS];
volatile uint8_t USB_Endpoint_SelectedEndpoint; volatile uint8_t USB_Endpoint_SelectedEndpoint;
volatile USB_EP_t* USB_Endpoint_SelectedHandle; volatile USB_EP_t* USB_Endpoint_SelectedHandle;
volatile Endpoint_FIFO_t* USB_Endpoint_SelectedFIFO; volatile Endpoint_FIFO_t* USB_Endpoint_SelectedFIFO;
bool Endpoint_ConfigureEndpoint_PRV(const uint8_t Number, bool Endpoint_ConfigureEndpoint_PRV(const uint8_t Number,
...@@ -66,8 +66,11 @@ bool Endpoint_ConfigureEndpoint_PRV(const uint8_t Number, ...@@ -66,8 +66,11 @@ bool Endpoint_ConfigureEndpoint_PRV(const uint8_t Number,
void Endpoint_ClearEndpoints(void) void Endpoint_ClearEndpoints(void)
{ {
for (uint8_t EPNum = 0; EPNum < (ENDPOINT_TOTAL_ENDPOINTS * 2); EPNum++) for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)
((USB_EP_t*)&USB_EndpointTable)[EPNum].CTRL = 0; {
USB_EndpointTable.Endpoints[EPNum].IN.CTRL = 0;
USB_EndpointTable.Endpoints[EPNum].OUT.CTRL = 0;
}
} }
void Endpoint_ClearStatusStage(void) void Endpoint_ClearStatusStage(void)
......
...@@ -391,7 +391,10 @@ ...@@ -391,7 +391,10 @@
static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
static inline bool Endpoint_IsReadWriteAllowed(void) static inline bool Endpoint_IsReadWriteAllowed(void)
{ {
return (USB_Endpoint_SelectedFIFO->Position < USB_Endpoint_SelectedFIFO->Length); if (USB_Endpoint_SelectedEndpoint & ENDPOINT_DIR_IN)
return (USB_Endpoint_SelectedFIFO->Position < USB_Endpoint_SelectedFIFO->Length);
else
return (USB_Endpoint_SelectedFIFO->Position > 0);
} }
/** Determines if the currently selected endpoint is configured. /** Determines if the currently selected endpoint is configured.
......
...@@ -35,6 +35,8 @@ uint8_t TEMPLATE_FUNC_NAME (void* const Buffer, ...@@ -35,6 +35,8 @@ uint8_t TEMPLATE_FUNC_NAME (void* const Buffer,
{ {
uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
Endpoint_SelectEndpoint(USB_Endpoint_SelectedEndpoint & ~ENDPOINT_DIR_IN);
if (!(Length)) if (!(Length))
Endpoint_ClearOUT(); Endpoint_ClearOUT();
......
...@@ -36,6 +36,8 @@ uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, ...@@ -36,6 +36,8 @@ uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer,
uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
bool LastPacketFull = false; bool LastPacketFull = false;
Endpoint_SelectEndpoint(USB_Endpoint_SelectedEndpoint | ENDPOINT_DIR_IN);
if (Length > USB_ControlRequest.wLength) if (Length > USB_ControlRequest.wLength)
Length = USB_ControlRequest.wLength; Length = USB_ControlRequest.wLength;
else if (!(Length)) else if (!(Length))
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment