aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/LowLevel
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-07-26 10:22:16 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-07-26 10:22:16 +0000
commitcbbd3d746acef02a4afd562652a2ba71b24dfd6f (patch)
tree2e4e4b7392f478e960a3cc93ad0913943cef8e4a /LUFA/Drivers/USB/LowLevel
parent200821fe827230570e253c1679f00bcdb6c5bd94 (diff)
downloadlufa-cbbd3d746acef02a4afd562652a2ba71b24dfd6f.tar.gz
lufa-cbbd3d746acef02a4afd562652a2ba71b24dfd6f.tar.bz2
lufa-cbbd3d746acef02a4afd562652a2ba71b24dfd6f.zip
Added new Pipe_BoundEndpointNumber() and Pipe_IsEndpointBound() functions.
Diffstat (limited to 'LUFA/Drivers/USB/LowLevel')
-rw-r--r--LUFA/Drivers/USB/LowLevel/Host.c1
-rw-r--r--LUFA/Drivers/USB/LowLevel/Pipe.c16
-rw-r--r--LUFA/Drivers/USB/LowLevel/Pipe.h24
3 files changed, 37 insertions, 4 deletions
diff --git a/LUFA/Drivers/USB/LowLevel/Host.c b/LUFA/Drivers/USB/LowLevel/Host.c
index ae7525bee..3d99b2594 100644
--- a/LUFA/Drivers/USB/LowLevel/Host.c
+++ b/LUFA/Drivers/USB/LowLevel/Host.c
@@ -187,7 +187,6 @@ void USB_Host_ProcessNextHostState(void)
EVENT_USB_DeviceEnumerationComplete();
USB_HostState = HOST_STATE_Addressed;
-
break;
}
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c
index 7d3e87602..0a32f183b 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.c
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.c
@@ -70,6 +70,22 @@ void Pipe_ClearPipes(void)
}
}
+bool Pipe_IsEndpointBound(uint8_t EndpointAddress)
+{
+ uint8_t PrevPipeNumber = Pipe_GetPipeNumber();
+
+ for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
+ {
+ Pipe_SelectPipe(PNum);
+
+ if (Pipe_IsConfigured() && (Pipe_BoundEndpointAddress() == EndpointAddress))
+ return true;
+ }
+
+ Pipe_SelectPipe(PrevPipeNumber);
+ return false;
+}
+
uint8_t Pipe_WaitUntilReady(void)
{
#if (USB_STREAM_TIMEOUT_MS < 0xFF)
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.h b/LUFA/Drivers/USB/LowLevel/Pipe.h
index fae8105ff..b6fad5146 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.h
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.h
@@ -257,6 +257,13 @@
*/
static inline bool Pipe_IsConfigured(void);
+ /** Retrieves the endpoint number of the endpoint within the attached device that the currently selected
+ * pipe is bound to.
+ *
+ * \return Endpoint number the currently selected pipe is bound to
+ */
+ static inline uint8_t Pipe_BoundEndpointNumber(void);
+
/** Sets the period between interrupts for an INTERRUPT type pipe to a specified number of milliseconds.
*
* \param[in] Milliseconds Number of milliseconds between each pipe poll
@@ -427,6 +434,8 @@
#define Pipe_IsConfigured() ((UPSTAX & (1 << CFGOK)) ? true : false)
+ #define Pipe_BoundEndpointNumber() ((UPCFG0X >> PEPNUM0) & PIPE_EPNUM_MASK)
+
#define Pipe_SetInterruptPeriod(ms) MACROS{ UPCFG2X = ms; }MACROE
#define Pipe_GetPipeInterrupts() UPINT
@@ -764,14 +773,23 @@
bool Pipe_ConfigurePipe(const uint8_t Number, const uint8_t Type, const uint8_t Token, const uint8_t EndpointNumber,
const uint16_t Size, const uint8_t Banks);
- /** Spinloops until the currently selected non-control pipe is ready for the next packed of data
- * to be read or written to it.
+ /** Spinloops until the currently selected non-control pipe is ready for the next packed of data to be read
+ * or written to it, aborting in the case of an error condition (such as a timeout or device disconnect).
*
* \ingroup Group_PipeRW
*
* \return A value from the Pipe_WaitUntilReady_ErrorCodes_t enum.
*/
- uint8_t Pipe_WaitUntilReady(void);
+ uint8_t Pipe_WaitUntilReady(void);
+
+ /** Determines if a pipe has been bound to the given device endpoint address. If a pipe which is bound to the given
+ * endpoint is found, it is automatically selected.
+ *
+ * \param EndpointAddress Address of the endpoint within the attached device to check
+ *
+ * \return Boolean true if a pipe bound to the given endpoint address is found, false otherwise
+ */
+ bool Pipe_IsEndpointBound(uint8_t EndpointAddress);
/** Reads and discards the given number of bytes from the pipe, discarding fully read packets from the host
* as needed. The last packet is not automatically discarded once the remaining bytes has been read; the