mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-06-07 17:02:46 +00:00
Add proper reset handling to the USB Printer Device Class driver.
This commit is contained in:
parent
95ba6527a5
commit
961da384f9
@ -59,7 +59,7 @@ void PRNT_Device_ProcessControlRequest(USB_ClassInfo_PRNT_Device_t* const PRNTIn
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16_t IEEEStringLen = strlen(PRNTInterfaceInfo->Config.IEEE1284String);
|
uint16_t IEEEStringLen = strlen(PRNTInterfaceInfo->Config.IEEE1284String);
|
||||||
Endpoint_Write_16_BE(IEEEStringLen + 1);
|
Endpoint_Write_16_BE(IEEEStringLen);
|
||||||
Endpoint_Write_Control_Stream_LE(PRNTInterfaceInfo->Config.IEEE1284String, IEEEStringLen);
|
Endpoint_Write_Control_Stream_LE(PRNTInterfaceInfo->Config.IEEE1284String, IEEEStringLen);
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearStatusStage();
|
||||||
}
|
}
|
||||||
@ -87,6 +87,8 @@ void PRNT_Device_ProcessControlRequest(USB_ClassInfo_PRNT_Device_t* const PRNTIn
|
|||||||
Endpoint_ClearSETUP();
|
Endpoint_ClearSETUP();
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearStatusStage();
|
||||||
|
|
||||||
|
PRNTInterfaceInfo->State.IsPrinterReset = true;
|
||||||
|
|
||||||
EVENT_PRNT_Device_SoftReset(PRNTInterfaceInfo);
|
EVENT_PRNT_Device_SoftReset(PRNTInterfaceInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,6 +124,21 @@ void PRNT_Device_USBTask(USB_ClassInfo_PRNT_Device_t* const PRNTInterfaceInfo)
|
|||||||
if (Endpoint_IsINReady())
|
if (Endpoint_IsINReady())
|
||||||
PRNT_Device_Flush(PRNTInterfaceInfo);
|
PRNT_Device_Flush(PRNTInterfaceInfo);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (PRNTInterfaceInfo->State.IsPrinterReset)
|
||||||
|
{
|
||||||
|
Endpoint_ResetEndpoint(PRNTInterfaceInfo->Config.DataOUTEndpoint.Address);
|
||||||
|
Endpoint_ResetEndpoint(PRNTInterfaceInfo->Config.DataINEndpoint.Address);
|
||||||
|
|
||||||
|
Endpoint_SelectEndpoint(PRNTInterfaceInfo->Config.DataOUTEndpoint.Address);
|
||||||
|
Endpoint_ClearStall();
|
||||||
|
Endpoint_ResetDataToggle();
|
||||||
|
Endpoint_SelectEndpoint(PRNTInterfaceInfo->Config.DataINEndpoint.Address);
|
||||||
|
Endpoint_ClearStall();
|
||||||
|
Endpoint_ResetDataToggle();
|
||||||
|
|
||||||
|
PRNTInterfaceInfo->State.IsPrinterReset = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t PRNT_Device_SendString(USB_ClassInfo_PRNT_Device_t* const PRNTInterfaceInfo,
|
uint8_t PRNT_Device_SendString(USB_ClassInfo_PRNT_Device_t* const PRNTInterfaceInfo,
|
||||||
|
@ -87,14 +87,20 @@
|
|||||||
USB_Endpoint_Table_t DataOUTEndpoint; /**< Data OUT endpoint configuration table. */
|
USB_Endpoint_Table_t DataOUTEndpoint; /**< Data OUT endpoint configuration table. */
|
||||||
|
|
||||||
char* IEEE1284String; /**< IEEE 1284 identification string, sent to the host during enumeration
|
char* IEEE1284String; /**< IEEE 1284 identification string, sent to the host during enumeration
|
||||||
* to identify the printer model, manufacturer and other characteristics. */
|
* to identify the printer model, manufacturer and other characteristics.
|
||||||
|
*/
|
||||||
} Config; /**< Config data for the USB class interface within the device. All elements in this section
|
} Config; /**< Config data for the USB class interface within the device. All elements in this section
|
||||||
* <b>must</b> be set or the interface will fail to enumerate and operate correctly.
|
* <b>must</b> be set or the interface will fail to enumerate and operate correctly.
|
||||||
*/
|
*/
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint8_t PortStatus; /**< Current status of the Printer virtual port, a collection of \c PRNT_PORTSTATUS_*
|
uint8_t PortStatus; /**< Current status of the Printer virtual port, a collection of \c PRNT_PORTSTATUS_*
|
||||||
* bitmask values. */
|
* bitmask values.
|
||||||
|
*/
|
||||||
|
|
||||||
|
volatile bool IsPrinterReset; /**< Flag indicating that the host has requested that the Printer interface be reset
|
||||||
|
* and that all current Mass Storage operations should immediately abort.
|
||||||
|
*/
|
||||||
} State; /**< State data for the USB class interface within the device. All elements in this section
|
} State; /**< State data for the USB class interface within the device. All elements in this section
|
||||||
* are reset to their defaults when the interface is enumerated.
|
* are reset to their defaults when the interface is enumerated.
|
||||||
*/
|
*/
|
||||||
@ -131,7 +137,7 @@
|
|||||||
*
|
*
|
||||||
* \param[in,out] PRNTInterfaceInfo Pointer to a structure containing a Printer Class configuration and state.
|
* \param[in,out] PRNTInterfaceInfo Pointer to a structure containing a Printer Class configuration and state.
|
||||||
*/
|
*/
|
||||||
void EVENT_PRNT_Device_SoftReset(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
void EVENT_PRNT_Device_SoftReset(USB_ClassInfo_PRNT_Device_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
/** Sends a given data buffer to the attached USB host, if connected. If a host is not connected when the function is
|
/** Sends a given data buffer 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
|
* called, the string is discarded. Bytes will be queued for transmission to the host until either the endpoint bank
|
||||||
|
Loading…
Reference in New Issue
Block a user