diff options
author | Benjamin Dobell <benjamin.dobell+git@glassechidna.com.au> | 2014-05-17 20:18:36 +0200 |
---|---|---|
committer | Benjamin Dobell <benjamin.dobell+git@glassechidna.com.au> | 2014-05-17 20:18:36 +0200 |
commit | fd23c07ef525f836d4974189ae5c7f3ecb0bb640 (patch) | |
tree | 4dd5ed360121e5a479954c88fd19bd2cfcbe39ec | |
parent | Fixed Frontend bug that could cause flashing to fail. (diff) | |
download | Heimdall-fd23c07ef525f836d4974189ae5c7f3ecb0bb640.tar Heimdall-fd23c07ef525f836d4974189ae5c7f3ecb0bb640.tar.gz Heimdall-fd23c07ef525f836d4974189ae5c7f3ecb0bb640.tar.bz2 Heimdall-fd23c07ef525f836d4974189ae5c7f3ecb0bb640.tar.lz Heimdall-fd23c07ef525f836d4974189ae5c7f3ecb0bb640.tar.xz Heimdall-fd23c07ef525f836d4974189ae5c7f3ecb0bb640.tar.zst Heimdall-fd23c07ef525f836d4974189ae5c7f3ecb0bb640.zip |
Diffstat (limited to '')
-rw-r--r-- | heimdall/source/BridgeManager.cpp | 35 | ||||
-rw-r--r-- | heimdall/source/BridgeManager.h | 6 |
2 files changed, 16 insertions, 25 deletions
diff --git a/heimdall/source/BridgeManager.cpp b/heimdall/source/BridgeManager.cpp index 7db00d5..719d041 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, bool retry) const +bool BridgeManager::SendBulkTransfer(unsigned char *data, int length, int timeout) const { int dataTransferred; int result = libusb_bulk_transfer(deviceHandle, outEndpoint, data, length, &dataTransferred, timeout); - if (result != LIBUSB_SUCCESS && retry) + if (result != LIBUSB_SUCCESS) { static const int retryDelay = 250; @@ -661,39 +661,33 @@ bool BridgeManager::SendBulkTransfer(unsigned char *data, int length, int timeou return (result == LIBUSB_SUCCESS && dataTransferred == length); } -bool BridgeManager::SendPacket(OutboundPacket *packet, int timeout, bool retry) const +bool BridgeManager::SendPacket(OutboundPacket *packet, int timeout) const { packet->Pack(); - if (!SendBulkTransfer(packet->GetData(), packet->GetSize(), timeout, retry)) + if (!SendBulkTransfer(packet->GetData(), packet->GetSize(), timeout)) return (false); // After each packet we send an empty bulk transfer... Hey! I'm just implementing the protocol, I didn't define it! - if (!SendBulkTransfer(nullptr, 0, timeout, retry)) + if (!SendBulkTransfer(nullptr, 0, timeout)) return (false); return (true); } -bool BridgeManager::ReceivePacket(InboundPacket *packet, int timeout, bool retry, unsigned char *buffer, unsigned int bufferSize) const +bool BridgeManager::ReceivePacket(InboundPacket *packet, int timeout) const { - bool bufferProvided = buffer != nullptr && bufferSize >= packet->GetSize(); - - if (!bufferProvided) - { - buffer = packet->GetData(); - bufferSize = packet->GetSize(); - } + unsigned char *buffer = packet->GetData(); + unsigned int bufferSize = packet->GetSize(); int dataTransferred; int result; unsigned int attempt = 0; - unsigned int maxAttempts = (retry) ? kReceivePacketMaxAttempts : 1; - + static const int retryDelay = 250; - for (; attempt < maxAttempts; attempt++) + for (; attempt < kReceivePacketMaxAttempts; attempt++) { if (attempt > 0) { @@ -716,7 +710,7 @@ bool BridgeManager::ReceivePacket(InboundPacket *packet, int timeout, bool retry if (verbose && attempt > 0) Interface::PrintErrorSameLine("\n"); - if (attempt == maxAttempts) + if (attempt == kReceivePacketMaxAttempts) return (false); if (dataTransferred != packet->GetSize() && !packet->IsSizeVariable()) @@ -727,9 +721,6 @@ bool BridgeManager::ReceivePacket(InboundPacket *packet, int timeout, bool retry return (false); } - if (bufferProvided) - memcpy(packet->GetData(), buffer, dataTransferred); - packet->SetReceivedSize(dataTransferred); bool unpacked = packet->Unpack(); @@ -1170,7 +1161,7 @@ bool BridgeManager::SendFile(FILE *file, unsigned int destination, unsigned int { EndPhoneFileTransferPacket *endPhoneFileTransferPacket = new EndPhoneFileTransferPacket(sequenceByteCount, 0, deviceType, fileIdentifier, isLastSequence); - success = SendPacket(endPhoneFileTransferPacket, 3000); + success = SendPacket(endPhoneFileTransferPacket); delete endPhoneFileTransferPacket; if (!success) @@ -1184,7 +1175,7 @@ bool BridgeManager::SendFile(FILE *file, unsigned int destination, unsigned int { EndModemFileTransferPacket *endModemFileTransferPacket = new EndModemFileTransferPacket(sequenceByteCount, 0, deviceType, isLastSequence); - success = SendPacket(endModemFileTransferPacket, 3000); + success = SendPacket(endModemFileTransferPacket); delete endModemFileTransferPacket; if (!success) diff --git a/heimdall/source/BridgeManager.h b/heimdall/source/BridgeManager.h index 9ebbdae..6b967fa 100644 --- a/heimdall/source/BridgeManager.h +++ b/heimdall/source/BridgeManager.h @@ -125,7 +125,7 @@ namespace Heimdall bool InitialiseProtocol(void);
- bool SendBulkTransfer(unsigned char *data, int length, int timeout = 3000, bool retry = true) const;
+ bool SendBulkTransfer(unsigned char *data, int length, int timeout = 3000) const;
public:
@@ -138,8 +138,8 @@ namespace Heimdall bool BeginSession(void);
bool EndSession(bool reboot) const;
- bool SendPacket(OutboundPacket *packet, int timeout = 3000, bool retry = true) const;
- bool ReceivePacket(InboundPacket *packet, int timeout = 3000, bool retry = true, unsigned char *buffer = nullptr, unsigned int bufferSize = -1) const;
+ bool SendPacket(OutboundPacket *packet, int timeout = 3000) const;
+ bool ReceivePacket(InboundPacket *packet, int timeout = 3000) const;
bool RequestDeviceType(unsigned int request, int *result) const;
|