diff options
Diffstat (limited to 'heimdall')
-rw-r--r-- | heimdall/source/BridgeManager.cpp | 16 | ||||
-rw-r--r-- | heimdall/source/BridgeManager.h | 5 |
2 files changed, 13 insertions, 8 deletions
diff --git a/heimdall/source/BridgeManager.cpp b/heimdall/source/BridgeManager.cpp index a2cba80..96c22fb 100644 --- a/heimdall/source/BridgeManager.cpp +++ b/heimdall/source/BridgeManager.cpp @@ -624,12 +624,12 @@ bool BridgeManager::EndSession(bool reboot) const return (true); } -bool BridgeManager::SendBulkTransfer(unsigned char *data, int length, int timeout) const +bool BridgeManager::SendBulkTransfer(unsigned char *data, int length, int timeout, bool retry) const { int dataTransferred; int result = libusb_bulk_transfer(deviceHandle, outEndpoint, data, length, &dataTransferred, timeout); - if (result != LIBUSB_SUCCESS) + if (result != LIBUSB_SUCCESS && retry) { static const int retryDelay = 250; @@ -667,8 +667,10 @@ bool BridgeManager::SendPacket(OutboundPacket *packet, int timeout, int sendEmpt if (sendEmptyTransferFlags & kSendEmptyTransferBefore) { - if (!SendBulkTransfer(nullptr, 0, timeout)) - return (false); + if (!SendBulkTransfer(nullptr, 0, kDefaultTimeoutSendEmptyTransfer, false) && verbose) + { + Interface::PrintWarning("Empty bulk transfer before sending packet failed. Continuing anyway...\n"); + } } if (!SendBulkTransfer(packet->GetData(), packet->GetSize(), timeout)) @@ -676,8 +678,10 @@ bool BridgeManager::SendPacket(OutboundPacket *packet, int timeout, int sendEmpt if (sendEmptyTransferFlags & kSendEmptyTransferAfter) { - if (!SendBulkTransfer(nullptr, 0, timeout)) - return (false); + if (!SendBulkTransfer(nullptr, 0, kDefaultTimeoutSendEmptyTransfer, false) && verbose) + { + Interface::PrintWarning("Empty bulk transfer after sending packet failed. Continuing anyway...\n"); + } } return (true); diff --git a/heimdall/source/BridgeManager.h b/heimdall/source/BridgeManager.h index 7028003..e85dc87 100644 --- a/heimdall/source/BridgeManager.h +++ b/heimdall/source/BridgeManager.h @@ -81,7 +81,8 @@ namespace Heimdall enum
{
kDefaultTimeoutSend = 3000,
- kDefaultTimeoutReceive = 3000
+ kDefaultTimeoutReceive = 3000,
+ kDefaultTimeoutSendEmptyTransfer = 100
};
enum class UsbLogLevel
@@ -139,7 +140,7 @@ namespace Heimdall bool InitialiseProtocol(void);
- bool SendBulkTransfer(unsigned char *data, int length, int timeout) const;
+ bool SendBulkTransfer(unsigned char *data, int length, int timeout, bool retry = true) const;
public:
|