summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libirecovery.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/libirecovery.c b/src/libirecovery.c
index 62c675a..33711c2 100644
--- a/src/libirecovery.c
+++ b/src/libirecovery.c
@@ -1693,11 +1693,26 @@ IRECV_API irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char*
1693 if (recovery_mode) { 1693 if (recovery_mode) {
1694 error = irecv_usb_control_transfer(client, 0x41, 0, 0, 0, NULL, 0, USB_TIMEOUT); 1694 error = irecv_usb_control_transfer(client, 0x41, 0, 0, 0, NULL, 0, USB_TIMEOUT);
1695 } else { 1695 } else {
1696 unsigned char dump[4]; 1696 uint8_t state = 0;
1697 if (irecv_usb_control_transfer(client, 0xa1, 5, 0, 0, dump, 1, USB_TIMEOUT) == 1) { 1697 if (irecv_usb_control_transfer(client, 0xa1, 5, 0, 0, (unsigned char*)&state, 1, USB_TIMEOUT) == 1) {
1698 error = IRECV_E_SUCCESS; 1698 error = IRECV_E_SUCCESS;
1699 } else { 1699 } else {
1700 return IRECV_E_USB_UPLOAD;
1701 }
1702 switch (state) {
1703 case 2:
1704 /* DFU IDLE */
1705 break;
1706 case 10:
1707 debug("DFU ERROR, issuing CLRSTATUS\n");
1708 irecv_usb_control_transfer(client, 0x21, 4, 0, 0, NULL, 0, USB_TIMEOUT);
1700 error = IRECV_E_USB_UPLOAD; 1709 error = IRECV_E_USB_UPLOAD;
1710 break;
1711 default:
1712 debug("Unexpected state %d, issuing ABORT\n", state);
1713 irecv_usb_control_transfer(client, 0x21, 6, 0, 0, NULL, 0, USB_TIMEOUT);
1714 error = IRECV_E_USB_UPLOAD;
1715 break;
1701 } 1716 }
1702 } 1717 }
1703 1718