forked from mfulz_github/qmk_firmware
Added new Pipe_BoundEndpointNumber() and Pipe_IsEndpointBound() functions.
This commit is contained in:
parent
200821fe82
commit
cbbd3d746a
|
@ -187,7 +187,6 @@ void USB_Host_ProcessNextHostState(void)
|
||||||
|
|
||||||
EVENT_USB_DeviceEnumerationComplete();
|
EVENT_USB_DeviceEnumerationComplete();
|
||||||
USB_HostState = HOST_STATE_Addressed;
|
USB_HostState = HOST_STATE_Addressed;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
uint8_t Pipe_WaitUntilReady(void)
|
||||||
{
|
{
|
||||||
#if (USB_STREAM_TIMEOUT_MS < 0xFF)
|
#if (USB_STREAM_TIMEOUT_MS < 0xFF)
|
||||||
|
|
|
@ -257,6 +257,13 @@
|
||||||
*/
|
*/
|
||||||
static inline bool Pipe_IsConfigured(void);
|
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.
|
/** 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
|
* \param[in] Milliseconds Number of milliseconds between each pipe poll
|
||||||
|
@ -427,6 +434,8 @@
|
||||||
|
|
||||||
#define Pipe_IsConfigured() ((UPSTAX & (1 << CFGOK)) ? true : false)
|
#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_SetInterruptPeriod(ms) MACROS{ UPCFG2X = ms; }MACROE
|
||||||
|
|
||||||
#define Pipe_GetPipeInterrupts() UPINT
|
#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,
|
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);
|
const uint16_t Size, const uint8_t Banks);
|
||||||
|
|
||||||
/** Spinloops until the currently selected non-control pipe is ready for the next packed of data
|
/** Spinloops until the currently selected non-control pipe is ready for the next packed of data to be read
|
||||||
* to be read or written to it.
|
* or written to it, aborting in the case of an error condition (such as a timeout or device disconnect).
|
||||||
*
|
*
|
||||||
* \ingroup Group_PipeRW
|
* \ingroup Group_PipeRW
|
||||||
*
|
*
|
||||||
* \return A value from the Pipe_WaitUntilReady_ErrorCodes_t enum.
|
* \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
|
/** 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
|
* as needed. The last packet is not automatically discarded once the remaining bytes has been read; the
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
* - Added new Endpoint_ClearStatusStage() convenience function to assist with the status stages of control transfers
|
* - Added new Endpoint_ClearStatusStage() convenience function to assist with the status stages of control transfers
|
||||||
* - Added new Benito Arduino Programmer project
|
* - Added new Benito Arduino Programmer project
|
||||||
* - Added new LEDs_ToggleLEDs() function to the LEDs driver
|
* - Added new LEDs_ToggleLEDs() function to the LEDs driver
|
||||||
|
* - Added new Pipe_BoundEndpointNumber() and Pipe_IsEndpointBound() functions
|
||||||
*
|
*
|
||||||
* <b>Changed:</b>
|
* <b>Changed:</b>
|
||||||
* - Deprecated psuedo-scheduler and removed dynamic memory allocator from the library (first no longer needed and second unused)
|
* - Deprecated psuedo-scheduler and removed dynamic memory allocator from the library (first no longer needed and second unused)
|
||||||
|
|
Loading…
Reference in New Issue