forked from mfulz_github/qmk_firmware
Added new EVENT_CDC_Device_BreakSent() event and CDC_Host_SendBreak() function to the Device and Host CDC Class drivers.
This commit is contained in:
parent
9c8bd6ed9b
commit
842e219bf3
|
@ -75,6 +75,15 @@
|
||||||
/** CDC Class specific request to set the current virtual serial port handshake line states. */
|
/** CDC Class specific request to set the current virtual serial port handshake line states. */
|
||||||
#define REQ_SetControlLineState 0x22
|
#define REQ_SetControlLineState 0x22
|
||||||
|
|
||||||
|
/** CDC Class specific request to send a break to the receiver via the carrier channel. */
|
||||||
|
#define REQ_SendBreak 0x23
|
||||||
|
|
||||||
|
/** CDC Class specific request to send an encapsulated command to the device. */
|
||||||
|
#define REQ_SendEncapsulatedCommand 0x00
|
||||||
|
|
||||||
|
/** CDC Class specific request to retrieve an encapsulated command response from the device. */
|
||||||
|
#define REQ_GetEncapsulatedResponse 0x01
|
||||||
|
|
||||||
/** Notification type constant for a change in the virtual serial port handshake line states, for
|
/** Notification type constant for a change in the virtual serial port handshake line states, for
|
||||||
* use with a USB_Notification_Header_t notification structure when sent to the host via the CDC
|
* use with a USB_Notification_Header_t notification structure when sent to the host via the CDC
|
||||||
* notification endpoint.
|
* notification endpoint.
|
||||||
|
|
|
@ -83,6 +83,17 @@ void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* CDCInterfaceIn
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearStatusStage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case REQ_SendBreak:
|
||||||
|
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
|
||||||
|
{
|
||||||
|
Endpoint_ClearSETUP();
|
||||||
|
|
||||||
|
EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue);
|
||||||
|
|
||||||
|
Endpoint_ClearStatusStage();
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,6 +190,14 @@
|
||||||
*/
|
*/
|
||||||
void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
|
/** CDC class driver event for a send break request sent to the device from the host. This is generally used to seperate
|
||||||
|
* data or to indicate a special condition to the receiving device.
|
||||||
|
*
|
||||||
|
* \param[in,out] CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state
|
||||||
|
* \param[in] Duration Duration of the break that has been sent by the host, in milliseconds
|
||||||
|
*/
|
||||||
|
void EVENT_CDC_Device_BreakSent(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, uint8_t Duration) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
/** Sends a given string to the attached USB host, if connected. If a host is not connected when the function is called, the
|
/** Sends a given string to the attached USB host, if connected. If a host is not connected when the function is called, the
|
||||||
* string is discarded. Bytes will be queued for transmission to the host until either the endpoint bank becomes full, or the
|
* string is discarded. Bytes will be queued for transmission to the host until either the endpoint bank becomes full, or the
|
||||||
* \ref CDC_Device_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
|
* \ref CDC_Device_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
|
||||||
|
@ -307,6 +315,8 @@
|
||||||
ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
|
ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
|
||||||
void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
|
void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
|
||||||
ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
|
ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
|
||||||
|
void EVENT_CDC_Device_BreakSent(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, uint8_t Duration)
|
||||||
|
ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -261,6 +261,22 @@ uint8_t CDC_Host_SendControlLineStateChange(USB_ClassInfo_CDC_Host_t* const CDCI
|
||||||
return USB_Host_SendControlRequest(NULL);
|
return USB_Host_SendControlRequest(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t CDC_Host_SendBreak(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, const uint8_t Duration)
|
||||||
|
{
|
||||||
|
USB_ControlRequest = (USB_Request_Header_t)
|
||||||
|
{
|
||||||
|
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||||
|
.bRequest = REQ_SendBreak,
|
||||||
|
.wValue = Duration,
|
||||||
|
.wIndex = CDCInterfaceInfo->State.ControlInterfaceNumber,
|
||||||
|
.wLength = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
Pipe_SelectPipe(PIPE_CONTROLPIPE);
|
||||||
|
|
||||||
|
return USB_Host_SendControlRequest(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, char* Data, const uint16_t Length)
|
uint8_t CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, char* Data, const uint16_t Length)
|
||||||
{
|
{
|
||||||
if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
|
if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
|
||||||
|
@ -303,8 +319,6 @@ uint8_t CDC_Host_SendByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, cons
|
||||||
|
|
||||||
uint16_t CDC_Host_BytesReceived(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
|
uint16_t CDC_Host_BytesReceived(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
|
||||||
{
|
{
|
||||||
uint16_t BytesInPipe = 0;
|
|
||||||
|
|
||||||
if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
|
if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -190,6 +190,16 @@
|
||||||
*/
|
*/
|
||||||
uint8_t CDC_Host_SendControlLineStateChange(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
uint8_t CDC_Host_SendControlLineStateChange(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
|
/** Sends a Send Break request to the device. This is generally used to seperate data data or to indicate a special condition
|
||||||
|
* to the receiving device.
|
||||||
|
*
|
||||||
|
* \param[in,out] CDCInterfaceInfo Pointer to a structure containing a CDC Class host configuration and state
|
||||||
|
* \param[in] Duration Duration of the break, in milliseconds
|
||||||
|
*
|
||||||
|
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum
|
||||||
|
*/
|
||||||
|
uint8_t CDC_Host_SendBreak(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, const uint8_t Duration) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
/** Sends a given string to the attached USB device, if connected. If a device is not connected when the function is called, the
|
/** Sends a given string to the attached USB device, if connected. If a device is not connected when the function is called, the
|
||||||
* string is discarded. Bytes will be queued for transmission to the device until either the pipe bank becomes full, or the
|
* string is discarded. Bytes will be queued for transmission to the device until either the pipe bank becomes full, or the
|
||||||
* \ref CDC_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
|
* \ref CDC_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
* - Added new ATTR_NO_INIT variable attribute for global variables that should not be automatically cleared on startup
|
* - Added new ATTR_NO_INIT variable attribute for global variables that should not be automatically cleared on startup
|
||||||
* - Added new ENDPOINT_*_BusSuspended error code to the Endpoint function, so that the stream functions early-abort if the bus
|
* - Added new ENDPOINT_*_BusSuspended error code to the Endpoint function, so that the stream functions early-abort if the bus
|
||||||
* is suspended before or during a transfer
|
* is suspended before or during a transfer
|
||||||
|
* - Added new EVENT_CDC_Device_BreakSent() event and CDC_Host_SendBreak() function to the Device and Host CDC Class drivers
|
||||||
*
|
*
|
||||||
* <b>Changed:</b>
|
* <b>Changed:</b>
|
||||||
* - AVRISP programmer project now has a more robust timeout system
|
* - AVRISP programmer project now has a more robust timeout system
|
||||||
|
|
Loading…
Reference in New Issue