diff options
author | Benjamin Dobell <benjamin.dobell+git@glassechidna.com.au> | 2013-03-08 00:00:52 +1100 |
---|---|---|
committer | Benjamin Dobell <benjamin.dobell+git@glassechidna.com.au> | 2013-03-08 00:12:27 +1100 |
commit | ebbc3e7cd2086a9f62a857dffe9ab0bd1f5da768 (patch) | |
tree | 2267ec17efe5435887cb68169a56418acf7a9f05 /heimdall/source/DownloadPitAction.cpp | |
parent | 9d7008e4ba010162945d985adf560dce7274bc00 (diff) | |
download | external_heimdall-ebbc3e7cd2086a9f62a857dffe9ab0bd1f5da768.zip external_heimdall-ebbc3e7cd2086a9f62a857dffe9ab0bd1f5da768.tar.gz external_heimdall-ebbc3e7cd2086a9f62a857dffe9ab0bd1f5da768.tar.bz2 |
- Removed legacy command line hard-coded partition name parameters.
- As a result of the above two points, there are no "known boot
partitions", and hence boot partitions are not automatically flashed
last.
- Made partitions flash in the order in order in which partition arguments
are specified. Hence, it's recommended that you specify boot partitions
last.
- Added --usb-level argument that can be used for debugging libusbx, or
flashing issues in general.
- Removed generally non-functional firmware dumping behaviour.
- Removed auto-resume functionality - Although this feature was definitely
nice to have; I believe it may be responsible for flashing compatibility
issues for a variety of devices.
- As a result of the above. In order perform another action after a
--no-reboot action, you must provide the --resume flag.
- Heimdall Frontend also has support for specifying the --resume flag
via a GUI. Heimdall Frontend also tries to keep track of your actions
and enable "Resume" automatically after a "No Reboot" action.
- Refactored quite a few of the actions, and code responsible for flashing
(particularly PIT file flashing).
- Bumped version to 1.4RC3 *however* this commit is not yet an official
release candidate. It's still a WIP. In particular build files still
have not been updated for Linux and OS X.
Diffstat (limited to 'heimdall/source/DownloadPitAction.cpp')
-rw-r--r-- | heimdall/source/DownloadPitAction.cpp | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/heimdall/source/DownloadPitAction.cpp b/heimdall/source/DownloadPitAction.cpp index b4b81a9..744ba56 100644 --- a/heimdall/source/DownloadPitAction.cpp +++ b/heimdall/source/DownloadPitAction.cpp @@ -28,11 +28,12 @@ #include "Heimdall.h" #include "Interface.h" +using namespace std; using namespace Heimdall; const char *DownloadPitAction::usage = "Action: download-pit\n\ Arguments: --output <filename> [--verbose] [--no-reboot] [--stdout-errors]\n\ - [--delay <ms>]\n\ + [--delay <ms>] [--usb-log-level <none/error/warning/debug>]\n\ Description: Downloads the connected device's PIT file to the specified\n\ output file.\n"; @@ -43,9 +44,11 @@ int DownloadPitAction::Execute(int argc, char **argv) map<string, ArgumentType> argumentTypes; argumentTypes["output"] = kArgumentTypeString; argumentTypes["no-reboot"] = kArgumentTypeFlag; + argumentTypes["resume"] = kArgumentTypeFlag; argumentTypes["delay"] = kArgumentTypeUnsignedInteger; argumentTypes["verbose"] = kArgumentTypeFlag; argumentTypes["stdout-errors"] = kArgumentTypeFlag; + argumentTypes["usb-log-level"] = kArgumentTypeString; Arguments arguments(argumentTypes); @@ -67,11 +70,48 @@ int DownloadPitAction::Execute(int argc, char **argv) const UnsignedIntegerArgument *communicationDelayArgument = static_cast<const UnsignedIntegerArgument *>(arguments.GetArgument("delay")); bool reboot = arguments.GetArgument("no-reboot") == nullptr; + bool resume = arguments.GetArgument("resume") != nullptr; bool verbose = arguments.GetArgument("verbose") != nullptr; if (arguments.GetArgument("stdout-errors") != nullptr) Interface::SetStdoutErrors(true); + const StringArgument *usbLogLevelArgument = static_cast<const StringArgument *>(arguments.GetArgument("usb-log-level")); + + BridgeManager::UsbLogLevel usbLogLevel = BridgeManager::UsbLogLevel::Default; + + if (usbLogLevelArgument) + { + const string& usbLogLevelString = usbLogLevelArgument->GetValue(); + + if (usbLogLevelString.compare("none") == 0 || usbLogLevelString.compare("NONE") == 0) + { + usbLogLevel = BridgeManager::UsbLogLevel::None; + } + else if (usbLogLevelString.compare("error") == 0 || usbLogLevelString.compare("ERROR") == 0) + { + usbLogLevel = BridgeManager::UsbLogLevel::Error; + } + else if (usbLogLevelString.compare("warning") == 0 || usbLogLevelString.compare("WARNING") == 0) + { + usbLogLevel = BridgeManager::UsbLogLevel::Warning; + } + else if (usbLogLevelString.compare("info") == 0 || usbLogLevelString.compare("INFO") == 0) + { + usbLogLevel = BridgeManager::UsbLogLevel::Info; + } + else if (usbLogLevelString.compare("debug") == 0 || usbLogLevelString.compare("DEBUG") == 0) + { + usbLogLevel = BridgeManager::UsbLogLevel::Debug; + } + else + { + Interface::Print("Unknown USB log level: %s\n\n", usbLogLevelString.c_str()); + Interface::Print(DownloadPitAction::usage); + return (0); + } + } + // Info Interface::PrintReleaseInfo(); @@ -96,8 +136,9 @@ int DownloadPitAction::Execute(int argc, char **argv) communicationDelay = communicationDelayArgument->GetValue(); BridgeManager *bridgeManager = new BridgeManager(verbose, communicationDelay); + bridgeManager->SetUsbLogLevel(usbLogLevel); - if (bridgeManager->Initialise() != BridgeManager::kInitialiseSucceeded || !bridgeManager->BeginSession()) + if (bridgeManager->Initialise(resume) != BridgeManager::kInitialiseSucceeded || !bridgeManager->BeginSession()) { fclose(outputPitFile); delete bridgeManager; |