diff options
author | Dean Camera <[email protected]> | 2013-05-05 19:32:07 +0000 |
---|---|---|
committer | Dean Camera <[email protected]> | 2013-05-05 19:32:07 +0000 |
commit | 961da384f985f81e7e0127d4f271ad8bf4817917 (patch) | |
tree | b210c6a2cbe4ab504b28c9b9ff7c6a9b7ad8ce23 /LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c | |
parent | 95ba6527a5e764a430c3917b4e24e48699976fa9 (diff) | |
download | qmk_firmware-961da384f985f81e7e0127d4f271ad8bf4817917.tar.gz qmk_firmware-961da384f985f81e7e0127d4f271ad8bf4817917.zip |
Add proper reset handling to the USB Printer Device Class driver.
Diffstat (limited to 'LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c')
-rw-r--r-- | LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c b/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c index 5a87f20736..3d34047eb3 100644 --- a/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c +++ b/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c @@ -59,7 +59,7 @@ void PRNT_Device_ProcessControlRequest(USB_ClassInfo_PRNT_Device_t* const PRNTIn } 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_ClearStatusStage(); } @@ -87,6 +87,8 @@ void PRNT_Device_ProcessControlRequest(USB_ClassInfo_PRNT_Device_t* const PRNTIn Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); + PRNTInterfaceInfo->State.IsPrinterReset = true; + EVENT_PRNT_Device_SoftReset(PRNTInterfaceInfo); } @@ -122,6 +124,21 @@ void PRNT_Device_USBTask(USB_ClassInfo_PRNT_Device_t* const PRNTInterfaceInfo) if (Endpoint_IsINReady()) PRNT_Device_Flush(PRNTInterfaceInfo); #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, |