aboutsummaryrefslogtreecommitdiffstats
path: root/heimdall-frontend
diff options
context:
space:
mode:
Diffstat (limited to 'heimdall-frontend')
-rw-r--r--heimdall-frontend/Source/Alerts.cpp2
-rw-r--r--heimdall-frontend/Source/Alerts.h2
-rw-r--r--heimdall-frontend/Source/FirmwareInfo.cpp2
-rw-r--r--heimdall-frontend/Source/FirmwareInfo.h2
-rw-r--r--heimdall-frontend/Source/PackageData.cpp2
-rw-r--r--heimdall-frontend/Source/PackageData.h2
-rw-r--r--heimdall-frontend/Source/Packaging.cpp4
-rw-r--r--heimdall-frontend/Source/Packaging.h2
-rw-r--r--heimdall-frontend/Source/aboutform.cpp2
-rw-r--r--heimdall-frontend/Source/aboutform.h2
-rw-r--r--heimdall-frontend/Source/main.cpp2
-rw-r--r--heimdall-frontend/Source/mainwindow.cpp115
-rw-r--r--heimdall-frontend/Source/mainwindow.h23
-rw-r--r--heimdall-frontend/aboutform.ui16
-rw-r--r--heimdall-frontend/doc-pak/LICENSE19
-rw-r--r--heimdall-frontend/doc-pak/README535
-rw-r--r--heimdall-frontend/heimdall-frontend.pro42
-rw-r--r--heimdall-frontend/mainwindow.ui239
18 files changed, 284 insertions, 729 deletions
diff --git a/heimdall-frontend/Source/Alerts.cpp b/heimdall-frontend/Source/Alerts.cpp
index f0b2caa..f3bda78 100644
--- a/heimdall-frontend/Source/Alerts.cpp
+++ b/heimdall-frontend/Source/Alerts.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/Alerts.h b/heimdall-frontend/Source/Alerts.h
index 7094a53..6e76239 100644
--- a/heimdall-frontend/Source/Alerts.h
+++ b/heimdall-frontend/Source/Alerts.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/FirmwareInfo.cpp b/heimdall-frontend/Source/FirmwareInfo.cpp
index e11a002..a32ddea 100644
--- a/heimdall-frontend/Source/FirmwareInfo.cpp
+++ b/heimdall-frontend/Source/FirmwareInfo.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/FirmwareInfo.h b/heimdall-frontend/Source/FirmwareInfo.h
index c9f9fbd..8f05ab4 100644
--- a/heimdall-frontend/Source/FirmwareInfo.h
+++ b/heimdall-frontend/Source/FirmwareInfo.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/PackageData.cpp b/heimdall-frontend/Source/PackageData.cpp
index e5ed75f..5bd78aa 100644
--- a/heimdall-frontend/Source/PackageData.cpp
+++ b/heimdall-frontend/Source/PackageData.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/PackageData.h b/heimdall-frontend/Source/PackageData.h
index 9e04fea..1103815 100644
--- a/heimdall-frontend/Source/PackageData.h
+++ b/heimdall-frontend/Source/PackageData.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/Packaging.cpp b/heimdall-frontend/Source/Packaging.cpp
index 9bf7d46..dfdfe38 100644
--- a/heimdall-frontend/Source/Packaging.cpp
+++ b/heimdall-frontend/Source/Packaging.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -301,7 +301,7 @@ bool Packaging::WriteTarEntry(const QString& filePath, QTemporaryFile *tarFile,
// Note: We don't support base-256 encoding. Support could be added later.
sprintf(tarHeader.fields.size, "%011llo", file.size());
- sprintf(tarHeader.fields.modifiedTime, "%011llo", qtFileInfo.lastModified().toTime_t());
+ sprintf(tarHeader.fields.modifiedTime, "%u", qtFileInfo.lastModified().toTime_t());
// Regular File
tarHeader.fields.typeFlag = '0';
diff --git a/heimdall-frontend/Source/Packaging.h b/heimdall-frontend/Source/Packaging.h
index 4cead82..c8ea07a 100644
--- a/heimdall-frontend/Source/Packaging.h
+++ b/heimdall-frontend/Source/Packaging.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/aboutform.cpp b/heimdall-frontend/Source/aboutform.cpp
index 9bb975a..3547dcc 100644
--- a/heimdall-frontend/Source/aboutform.cpp
+++ b/heimdall-frontend/Source/aboutform.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/aboutform.h b/heimdall-frontend/Source/aboutform.h
index 6223e3b..3fe3ece 100644
--- a/heimdall-frontend/Source/aboutform.h
+++ b/heimdall-frontend/Source/aboutform.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/main.cpp b/heimdall-frontend/Source/main.cpp
index ce76059..6d49ba8 100644
--- a/heimdall-frontend/Source/main.cpp
+++ b/heimdall-frontend/Source/main.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/heimdall-frontend/Source/mainwindow.cpp b/heimdall-frontend/Source/mainwindow.cpp
index f990cdd..46dc381 100644
--- a/heimdall-frontend/Source/mainwindow.cpp
+++ b/heimdall-frontend/Source/mainwindow.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -52,13 +52,19 @@ void MainWindow::StartHeimdall(const QStringList& arguments)
QStringList paths;
- // Ensure /usr/bin is in PATH
+ // Ensure /usr/local/bin and /usr/bin are in PATH.
for (int i = 0; i < environment.length(); i++)
{
if (environment[i].left(5) == "PATH=")
{
paths = environment[i].mid(5).split(':');
- paths.prepend("/usr/bin");
+
+ if (!paths.contains("/usr/local/bin"))
+ paths.prepend("/usr/local/bin");
+
+ if (!paths.contains("/usr/bin"))
+ paths.prepend("/usr/bin");
+
break;
}
}
@@ -71,6 +77,7 @@ void MainWindow::StartHeimdall(const QStringList& arguments)
if (heimdallPath.length() > 0)
{
+ utilityOutputPlainTextEdit->clear();
heimdallFailed = false;
if (heimdallPath[heimdallPath.length() - 1] != QDir::separator())
@@ -87,7 +94,7 @@ void MainWindow::StartHeimdall(const QStringList& arguments)
{
flashLabel->setText("Failed to start Heimdall!");
- heimdallState = MainWindow::kHeimdallStateStopped;
+ heimdallState = HeimdallState::Stopped;
UpdateInterfaceAvailability();
}
}
@@ -102,7 +109,7 @@ void MainWindow::UpdateUnusedPartitionIds(void)
{
const PitEntry *pitEntry = currentPitData.GetEntry(i);
- if (pitEntry->GetBlockCount() > 0 && strcmp(pitEntry->GetPartitionName(), "PIT") != 0 && strcmp(pitEntry->GetPartitionName(), "PT") != 0)
+ if (pitEntry->IsFlashable() && strcmp(pitEntry->GetPartitionName(), "PIT") != 0 && strcmp(pitEntry->GetPartitionName(), "PT") != 0)
unusedPartitionIds.append(pitEntry->GetIdentifier());
}
@@ -236,13 +243,13 @@ void MainWindow::UpdateLoadPackageInterfaceAvailability(void)
else
developerDonateButton->setEnabled(false);
- loadFirmwareButton->setEnabled(heimdallState == MainWindow::kHeimdallStateStopped);
+ loadFirmwareButton->setEnabled(heimdallState == HeimdallState::Stopped);
}
}
void MainWindow::UpdateFlashInterfaceAvailability(void)
{
- if (heimdallState == MainWindow::kHeimdallStateStopped)
+ if (heimdallState == HeimdallState::Stopped)
{
partitionNameComboBox->setEnabled(partitionsListWidget->currentRow() >= 0);
@@ -262,7 +269,10 @@ void MainWindow::UpdateFlashInterfaceAvailability(void)
flashProgressBar->setEnabled(false);
optionsGroup->setEnabled(true);
+ sessionGroup->setEnabled(true);
startFlashButton->setEnabled(validFlashSettings);
+ noRebootCheckBox->setEnabled(validFlashSettings);
+ resumeCheckbox->setEnabled(validFlashSettings);
}
else
{
@@ -270,13 +280,13 @@ void MainWindow::UpdateFlashInterfaceAvailability(void)
flashProgressBar->setEnabled(true);
optionsGroup->setEnabled(false);
- startFlashButton->setEnabled(false);
+ sessionGroup->setEnabled(false);
}
}
void MainWindow::UpdateCreatePackageInterfaceAvailability(void)
{
- if (heimdallState == MainWindow::kHeimdallStateStopped)
+ if (heimdallState == HeimdallState::Stopped)
{
const FirmwareInfo& firmwareInfo = workingPackageData.GetFirmwareInfo();
@@ -308,16 +318,13 @@ void MainWindow::UpdateCreatePackageInterfaceAvailability(void)
void MainWindow::UpdateUtilitiesInterfaceAvailability(void)
{
- if (heimdallState == MainWindow::kHeimdallStateStopped)
+ if (heimdallState == HeimdallState::Stopped)
{
detectDeviceButton->setEnabled(true);
closePcScreenButton->setEnabled(true);
pitSaveAsButton->setEnabled(true);
- if (!pitDestinationLineEdit->text().isEmpty())
- downloadPitButton->setEnabled(true);
- else
- downloadPitButton->setEnabled(false);
+ downloadPitButton->setEnabled(!pitDestinationLineEdit->text().isEmpty());
if (printPitDeviceRadioBox->isChecked())
{
@@ -331,6 +338,7 @@ void MainWindow::UpdateUtilitiesInterfaceAvailability(void)
printLocalPitGroup->setEnabled(true);
printLocalPitLineEdit->setEnabled(true);
printLocalPitBrowseButton->setEnabled(true);
+
printPitButton->setEnabled(!printLocalPitLineEdit->text().isEmpty());
}
}
@@ -353,7 +361,7 @@ void MainWindow::UpdateInterfaceAvailability(void)
UpdateCreatePackageInterfaceAvailability();
UpdateUtilitiesInterfaceAvailability();
- if (heimdallState == MainWindow::kHeimdallStateStopped)
+ if (heimdallState == HeimdallState::Stopped)
{
// Enable/disable tabs
@@ -404,7 +412,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
setupUi(this);
- heimdallState = MainWindow::kHeimdallStateStopped;
+ heimdallState = HeimdallState::Stopped;
lastDirectory = QDir::toNativeSeparators(QApplication::applicationDirPath());
@@ -420,6 +428,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
// Menu
QObject::connect(actionDonate, SIGNAL(triggered()), this, SLOT(OpenDonationWebpage()));
QObject::connect(actionVerboseOutput, SIGNAL(toggled(bool)), this, SLOT(SetVerboseOutput(bool)));
+ QObject::connect(actionResumeConnection, SIGNAL(toggled(bool)), this, SLOT(SetResume(bool)));
QObject::connect(actionAboutHeimdall, SIGNAL(triggered()), this, SLOT(ShowAbout()));
// Load Package Tab
@@ -439,7 +448,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
QObject::connect(pitBrowseButton, SIGNAL(clicked()), this, SLOT(SelectPit()));
QObject::connect(repartitionCheckBox, SIGNAL(stateChanged(int)), this, SLOT(SetRepartition(int)));
+
QObject::connect(noRebootCheckBox, SIGNAL(stateChanged(int)), this, SLOT(SetNoReboot(int)));
+ QObject::connect(resumeCheckbox, SIGNAL(stateChanged(int)), this, SLOT(SetResume(int)));
QObject::connect(startFlashButton, SIGNAL(clicked()), this, SLOT(StartFlash()));
@@ -882,20 +893,39 @@ void MainWindow::SelectPit(void)
}
}
+
void MainWindow::SetRepartition(int enabled)
{
workingPackageData.GetFirmwareInfo().SetRepartition(enabled);
+
+ repartitionCheckBox->setChecked(enabled);
}
+
void MainWindow::SetNoReboot(int enabled)
{
workingPackageData.GetFirmwareInfo().SetNoReboot(enabled);
+
+ noRebootCheckBox->setChecked(enabled);
+}
+
+void MainWindow::SetResume(bool enabled)
+{
+ resume = enabled;
+
+ actionResumeConnection->setChecked(enabled);
+ resumeCheckbox->setChecked(enabled);
+}
+
+void MainWindow::SetResume(int enabled)
+{
+ SetResume(enabled != 0);
}
void MainWindow::StartFlash(void)
{
outputPlainTextEdit->clear();
- heimdallState = MainWindow::kHeimdallStateFlashing;
+ heimdallState = HeimdallState::Flashing;
heimdallFailed = false;
const FirmwareInfo& firmwareInfo = workingPackageData.GetFirmwareInfo();
@@ -922,6 +952,9 @@ void MainWindow::StartFlash(void)
if (firmwareInfo.GetNoReboot())
arguments.append("--no-reboot");
+ if (resume)
+ arguments.append("--resume");
+
if (verboseOutput)
arguments.append("--verbose");
@@ -1072,7 +1105,7 @@ void MainWindow::DetectDevice(void)
deviceDetectedRadioButton->setChecked(false);
utilityOutputPlainTextEdit->clear();
- heimdallState = MainWindow::kHeimdallStateDetectingDevice;
+ heimdallState = HeimdallState::DetectingDevice;
heimdallFailed = false;
QStringList arguments;
@@ -1090,11 +1123,14 @@ void MainWindow::ClosePcScreen(void)
{
utilityOutputPlainTextEdit->clear();
- heimdallState = MainWindow::kHeimdallStateClosingPcScreen;
+ heimdallState = HeimdallState::ClosingPcScreen;
heimdallFailed = false;
QStringList arguments;
arguments.append("close-pc-screen");
+
+ if (resume)
+ arguments.append("--resume");
if (verboseOutput)
arguments.append("--verbose");
@@ -1124,7 +1160,7 @@ void MainWindow::DownloadPit(void)
deviceDetectedRadioButton->setChecked(false);
utilityOutputPlainTextEdit->clear();
- heimdallState = MainWindow::kHeimdallStateDetectingDevice;
+ heimdallState = HeimdallState::DownloadingPit;
heimdallFailed = false;
QStringList arguments;
@@ -1135,6 +1171,9 @@ void MainWindow::DownloadPit(void)
arguments.append("--no-reboot");
+ if (resume)
+ arguments.append("--resume");
+
if (verboseOutput)
arguments.append("--verbose");
@@ -1182,7 +1221,7 @@ void MainWindow::PrintPit(void)
{
utilityOutputPlainTextEdit->clear();
- heimdallState = MainWindow::kHeimdallStatePrintingPit;
+ heimdallState = HeimdallState::PrintingPit;
heimdallFailed = false;
QStringList arguments;
@@ -1196,6 +1235,9 @@ void MainWindow::PrintPit(void)
arguments.append("--stdout-errors");
arguments.append("--no-reboot");
+
+ if (resume)
+ arguments.append("--resume");
if (verboseOutput)
arguments.append("--verbose");
@@ -1223,7 +1265,7 @@ void MainWindow::HandleHeimdallStdout(void)
output.remove(QChar('\b'));
output.replace(QChar('%'), QString("%\n"));
- if (heimdallState == MainWindow::kHeimdallStateFlashing)
+ if (heimdallState == HeimdallState::Flashing)
{
outputPlainTextEdit->insertPlainText(output);
outputPlainTextEdit->ensureCursorVisible();
@@ -1237,20 +1279,27 @@ void MainWindow::HandleHeimdallStdout(void)
void MainWindow::HandleHeimdallReturned(int exitCode, QProcess::ExitStatus exitStatus)
{
+ HandleHeimdallStdout();
+
if (exitStatus == QProcess::NormalExit && exitCode == 0)
{
- if (heimdallState == MainWindow::kHeimdallStateFlashing)
+ bool executedNoReboot = (heimdallState == HeimdallState::Flashing && loadedPackageData.GetFirmwareInfo().GetNoReboot())
+ || (heimdallState == HeimdallState::PrintingPit && printPitDeviceRadioBox->isChecked()) || heimdallState == HeimdallState::DownloadingPit;
+
+ SetResume(executedNoReboot);
+
+ if (heimdallState == HeimdallState::Flashing)
{
flashLabel->setText("Flash completed successfully!");
}
- else if (heimdallState == MainWindow::kHeimdallStateDetectingDevice)
+ else if (heimdallState == HeimdallState::DetectingDevice)
{
deviceDetectedRadioButton->setChecked(true);
}
}
else
{
- if (heimdallState == MainWindow::kHeimdallStateFlashing)
+ if (heimdallState == HeimdallState::Flashing)
{
QString error = heimdallProcess.readAllStandardError();
@@ -1263,13 +1312,13 @@ void MainWindow::HandleHeimdallReturned(int exitCode, QProcess::ExitStatus exitS
flashLabel->setText(error);
}
- else if (heimdallState == MainWindow::kHeimdallStateDetectingDevice)
+ else if (heimdallState == HeimdallState::DetectingDevice)
{
deviceDetectedRadioButton->setChecked(false);
}
}
- heimdallState = MainWindow::kHeimdallStateStopped;
+ heimdallState = HeimdallState::Stopped;
flashProgressBar->setEnabled(false);
UpdateInterfaceAvailability();
}
@@ -1278,7 +1327,7 @@ void MainWindow::HandleHeimdallError(QProcess::ProcessError error)
{
if (error == QProcess::FailedToStart || error == QProcess::Timedout)
{
- if (heimdallState == kHeimdallStateFlashing)
+ if (heimdallState == HeimdallState::Flashing)
{
flashLabel->setText("Failed to start Heimdall!");
flashProgressBar->setEnabled(false);
@@ -1289,12 +1338,12 @@ void MainWindow::HandleHeimdallError(QProcess::ProcessError error)
}
heimdallFailed = true;
- heimdallState = MainWindow::kHeimdallStateStopped;
+ heimdallState = HeimdallState::Stopped;
UpdateInterfaceAvailability();
}
else if (error == QProcess::Crashed)
{
- if (heimdallState == kHeimdallStateFlashing)
+ if (heimdallState == HeimdallState::Flashing)
{
flashLabel->setText("Heimdall crashed!");
flashProgressBar->setEnabled(false);
@@ -1304,12 +1353,12 @@ void MainWindow::HandleHeimdallError(QProcess::ProcessError error)
utilityOutputPlainTextEdit->appendPlainText("\nFRONTEND ERROR: Heimdall crashed!");
}
- heimdallState = MainWindow::kHeimdallStateStopped;
+ heimdallState = HeimdallState::Stopped;
UpdateInterfaceAvailability();
}
else
{
- if (heimdallState == kHeimdallStateFlashing)
+ if (heimdallState == HeimdallState::Flashing)
{
flashLabel->setText("Heimdall reported an unknown error!");
flashProgressBar->setEnabled(false);
@@ -1319,7 +1368,7 @@ void MainWindow::HandleHeimdallError(QProcess::ProcessError error)
utilityOutputPlainTextEdit->appendPlainText("\nFRONTEND ERROR: Heimdall reported an unknown error!");
}
- heimdallState = MainWindow::kHeimdallStateStopped;
+ heimdallState = HeimdallState::Stopped;
UpdateInterfaceAvailability();
}
}
diff --git a/heimdall-frontend/Source/mainwindow.h b/heimdall-frontend/Source/mainwindow.h
index bea15cd..6aa9519 100644
--- a/heimdall-frontend/Source/mainwindow.h
+++ b/heimdall-frontend/Source/mainwindow.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -45,15 +45,14 @@ namespace HeimdallFrontend
private:
- enum
+ enum class HeimdallState
{
- kHeimdallStateStopped = 0,
- kHeimdallStateFlashing,
- kHeimdallStateDetectingDevice,
- kHeimdallStateClosingPcScreen,
- kHeimdallStatePrintingPit,
- kHeimdallStateDownloadingPit,
- kHeimdallStateCount
+ Stopped = 0,
+ Flashing,
+ DetectingDevice,
+ ClosingPcScreen,
+ PrintingPit,
+ DownloadingPit
};
enum
@@ -69,7 +68,7 @@ namespace HeimdallFrontend
int tabIndex;
bool heimdallFailed;
- int heimdallState;
+ HeimdallState heimdallState;
QProcess heimdallProcess;
PackageData loadedPackageData;
@@ -81,6 +80,7 @@ namespace HeimdallFrontend
QList<unsigned int> unusedPartitionIds;
bool verboseOutput;
+ bool resume;
void StartHeimdall(const QStringList& arguments);
@@ -133,7 +133,10 @@ namespace HeimdallFrontend
void SelectPit(void);
void SetRepartition(int enabled);
+
void SetNoReboot(int enabled);
+ void SetResume(bool enabled);
+ void SetResume(int enabled);
void StartFlash(void);
diff --git a/heimdall-frontend/aboutform.ui b/heimdall-frontend/aboutform.ui
index 142de47..b7f00f3 100644
--- a/heimdall-frontend/aboutform.ui
+++ b/heimdall-frontend/aboutform.ui
@@ -72,7 +72,7 @@
<property name="geometry">
<rect>
<x>0</x>
- <y>0</y>
+ <y>-701</y>
<width>542</width>
<height>1140</height>
</rect>
@@ -114,11 +114,11 @@
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Heimdall Frontend&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Version 1.4 RC1&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Copyright © 2010-2012 Benjamin Dobell, Glass Echidna&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Version 1.4.0&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Copyright © 2010-2013 Benjamin Dobell, Glass Echidna&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Heimdall (command line)&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;%HEIMDALL-VERSION%Copyright © 2010-2012 Benjamin Dobell, Glass Echidna&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;%HEIMDALL-VERSION%Copyright © 2010-2013 Benjamin Dobell, Glass Echidna&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
@@ -411,10 +411,10 @@ p, li { white-space: pre-wrap; }
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:600;&quot;&gt;Heimdall (command line) utilises libusb-1.0 for all USB communication:&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:10pt;&quot;&gt;libusb-1.0 is licensed under the &lt;/span&gt;&lt;a href=&quot;http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;Lesser General Public License v2.1.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;Heimdall (command line) utilises libusbx for all USB communication:&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;libusbx is licensed under the &lt;/span&gt;&lt;a href=&quot;http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;Lesser General Public License v2.1.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
diff --git a/heimdall-frontend/doc-pak/LICENSE b/heimdall-frontend/doc-pak/LICENSE
deleted file mode 100644
index 680dad9..0000000
--- a/heimdall-frontend/doc-pak/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/heimdall-frontend/doc-pak/README b/heimdall-frontend/doc-pak/README
deleted file mode 100644
index a0ca91e..0000000
--- a/heimdall-frontend/doc-pak/README
+++ /dev/null
@@ -1,535 +0,0 @@
-Heimdall (c) 2010-2012 Benjamin Dobell, Glass Echidna
-http://www.glassechidna.com.au/products/heimdall/
-
-DISCLAIMER:
-
- This software attempts to flash your Galaxy S device. The very nature of
- flashing is dangerous. As with all flashing software, Heimdall has the
- potential to damage (brick) your device if not used carefully. If you're
- concerned, don't use this software. Flashing ROMs onto your phone may also
- void your warranty. Benjamin Dobell and Glass Echidna are not responsible
- for the result of your actions.
-
-
-These instructions are for Linux operating systems.
-
-
-Flashing Heimdall Firmware Package with Heimdall Frontend:
-
- As of Heimdall Frontend 1.3 there are now two main ways to flash a ROM from
- Heimdall Frontend. The simpler and preferred option is to download a
- Heimdall Firmware Package and follow the following steps.
-
-
- 1. Fully charge your device (use the wall charger as it's faster).
-
- 2. Open the a terminal and run Heimdall Frontend by typing:
-
- heimdall-frontend
-
- 3. From the "Load Package" tab, under the "Heimdall Firmware Package"
- section click the "Browse" button.
-
- 4. Use the dialogue that appears to navigate to, and select, the Heimdall
- firmware package that you wish to flash.
-
- 5. You will see progress bars appear as the package is decompressed and
- extracted.
-
- When the package has finished being decompressed you should see
- information about the particular firmware package that has been
- selected.
-
- 6. Verify that your device is listed under "Supported Devices". If it's not
- then STOP immediately! DO NOT flash this firmware to your device!
- Instead search for an appropriate firmware package for your device.
-
- If you believe there is a mistake and your device is actually
- supported please get in contact with the firmware developer (not Glass
- Echidna!) and ask them to rectify the issue. If the developer provided
- a URL you may be able to contact them by pressing the "Homepage" button.
-
- 7. If you've verified your device is supported you may continue to press
- the "Load / Customise" button.
-
- 8. You should now be looking at the "Flash" tab. If not verify that you did
- in fact push the "Load / Customise" button.
-
- Generally, you won't NEED or WANT to customise a firmware package! In
- which case you can safely move on to step 9.
-
- Nonetheless, the "Flash" tab provides you with a means to customise the
- firmware package before flashing it to your device. See "Performing a
- Custom Flash with Heimdall Frontend" for more details.
-
- 9. Put your Galaxy S device into download mode and plug it in to your PC.
-
- Download mode can be accessed several different ways depending on your
- particular device model. If you're unsure how to do this please search
- online for the appropriate method.
-
- 10. Press the "Start" button.
-
- 11. Heimdall Frontend will display the progress and inform you when the
- flash is complete.
-
- If something went wrong i.e. your device wasn't detected because it
- wasn't in download mode, then the status section will let you know the
- cause of the problem.
-
-
-
-Performing a Custom Flash with Heimdall Frontend:
-
- This is the advanced means of flashing firmware to your device.
-
- If you're not an advanced user or a developer, in the event that a Heimdall
- Firmware Package doesn't exist for the particular firmware (or files) that
- you wish to flash, then I strongly recommend you get in touch with the
- developer of the firmware (or files) and politely ask them to create a
- Heimdall Firmware Package for you. In doing so, you avoid the risk of
- making mistakes due to inexperience.
-
-
- If you're looking to customise an existing Heimdall Firmware Package then
- follow steps 1-8 of "Flashing Heimdall Firmware Package with Heimdall
- Frontend" then start from below with step 5.
-
-
- 1. Fully charge your device (use the wall charger as it's faster).
-
- 2. Download a decrypted Samsung Galaxy S ROM or a Heimdall Firmware Package
- and extract everything to the one directory.
-
- 3. If the ROM is not a Heimdall Firmware Package it may instead be provided
- as multiple archives (nested or otherwise), extract them all to the same
- location.
-
- NOTE: If you want to use the CSC then extract it last. If you're asked
- to overwrite files then do so.
-
- 3. Open the a terminal and run Heimdall Frontend by typing:
-
- heimdall-frontend
-
- 4. Select the "Flash" tab. From the "Flash" tab you're able to completely
- customise a flash.
-
- 5. Before you can chose which partitions you want to flash with particular
- files you MUST first select a PIT file. To do this click the "Browse"
- button in the "PIT" section. This will open a dialogue allowing you to
- navigate to and select a valid PIT (.pit) file.
-
- If you do not already have a valid PIT file stored on your computer you
- can download your device's PIT file from the "Utilities" tab.
-
- 6. If a valid PIT file has been selected then the "Add" button below the
- "Partitions (Files)" list-box will be enabled. Press this button to add
- a partition to your flash.
-
- 7. When you first add a partition you will see the "Partition Name" and
- "Partition ID" be populated with information. Use the "Partition Name"
- drop down to select which partition you wish to flash. "Partition ID"
- will automatically update and is never directly editable.
-
- 8. You must then select a file to flash to the partition that you just
- specified using the "Browse" button under the "File / Partition". You
- will not be able to flash, create a firmware package or add another
- partition until you have selected a file. However, you're still able to
- press the "Remove" button if you've decided not to flash the partition
- you've just specified.
-
- 9. When you've specified a file name then you'll be able to see the updated
- information in the partition list to the right. You can select any
- partition from this list and customise it as you see fit.
-
- You can also remove a partition from the list by selecting it and
- clicking the "Remove" button. Removing a partition from the list doesn't
- remove it from your device, it simply means it will not be flashed.
-
- 10. Repeat steps 7-9 as often as needed to specify all the partions/files
- that you wish to flash.
-
- 11. Now you can chose whether you would like to repartition your device as
- well as whether you would like to prevent the device rebooting once a
- flash has been completed. These options can be enabled or disabled by
- toggling the "Repartition" and "No Reboot" check-boxes.
-
- In the general case you will only need to enable repartition if you wish
- to change the PIT file on your device. Keep in mind that repartitioning
- will wipe your device!
-
- The "No Reboot" option is rarely required. It's mostly in place so you
- can manually boot straight into recovery mode after a flash (rather than
- booting up normally).
-
- 12. If you've added at least one partition to your flash (and selected a
- file for that partition) then the "Start" button will be enabled. Press
- the "Start" button to begin the flashing process.
-
- You may notice that the "Create Package" tab becomes available at the
- whenever the "Start" button becomes available. From this tab you're able
- to create a reusable, redistributable Heimdall Firmware Package with the
- files and partitions you just selected. See "How to Create a Heimdall
- Firmware Package" for details.
-
- 13. Heimdall Frontend will display the progress and inform you when the
- flash is complete.
-
- If something went wrong i.e. your device wasn't detected because it
- wasn't in download mode, then the status section will let you know the
- cause of the problem.
-
-
-
-Flashing Firmware from Command Line:
-
- 1. Fully charge your phone (use the wall charger as it's faster).
-
- 2. Download a decrypted Samsung Galaxy S ROM or a Heimdall Firmware Package
- and extract everything to the one directory.
-
- 3. If the ROM is not a Heimdall Firmware Package it may instead be provided
- as multiple archives (nested or otherwise), extract them all to the same
- location.
-
- NOTE: If you want to use the CSC then extract it last.
-
- 4. Put your Galaxy S device into download mode and plug it in..
-
- 5. Open a terminal and navigate to the directory where you extracted
- the ROM/firmware files.
-
- 6. Type the following to list all the functionality Heimdall supports:
-
- heimdall help
-
- 7. Use the instructions to manually enter a command with all the files you
- want to flash.
-
- Here is an example that does a full flash and repartition on a GT-I9000:
-
- heimdall flash --repartition --pit s1_odin_20100512.pit --factoryfs factoryfs.rfs --cache cache.rfs --dbdata dbdata.rfs --primary-boot boot.bin --secondary-boot Sbl.bin --param param.lfs --kernel zImage --modem modem.bin
-
-
- 8. Heimdall will display the progress as it flashes so that you know things
- are working as they should.
-
-
-
-How to Create a Heimdall Firmware Package:
-
- Firstly, Heimdall's firmware package format is just a regular TAR archive
- compressed with gzip. The only two real requirements are that a valid
- firmware.xml must be included (refer to Appendix A) and you can only
- include files (no directories, links etc.) As such if you'd like there is
- nothing preventing you from creating Heimdall packages manually. Of course
- Heimdall Frontend provides a simple user interface that takes care of all
- the hard work for you.
-
- There are two ways in which you can create a firmware package. You can
- create a package from scratch, or you can load an existing package, apply
- modifications and then save the package. Creating a package from scratch
- is the preferred approach, by taking this approach you're far less likely
- to run into file name length limitations.
-
- Before you can access Heimdall Frontend's firmware creation functionality
- (available from the "Create Package" tab) you must first specify which
- files will be included in your package, as well as a few flashing options
- i.e. Whether or not users should repartition when flashing. This
- information must be filled out from the "Flash" tab in exactly the same
- fashion you would provide information to flash your device (see "Performing
- a Custom Flash with Heimdall Frontend"). As mentioned above, it's not the
- preferred means, but you're able to load an existing package as a starting
- point for this information.
-
- Once you've specified the files/partitions you wish to include in your
- firmware package the "Create Package" tab will become available. Clicking
- this tab will display additional information that you can include in your
- package. In order to continue you must fill out all sections except for the
- URLs section, which is optional. The following is a break-down of what all
- these options mean.
-
- - General Firmware Information: -
-
- Firmware Name - This is the name of your particular firmware. An
- example would be "Cyanogenmod".
-
- Firmware Version - This is the version identifier for your package. Any
- valid string will be accepted, although the inclusion of decimal
- point version number is preferred i.e. "7.1". If it makes sense
- then feel free to append a text string like "RC1" or "Beta 1" to
- the decimal point version.
-
- Platform Name - This is the name of platform (or operating system) that
- your firmware is based on. In most cases this will simply be
- "Android".
-
- Platform Version - This is the operating system version that your
- firmware is based on. Again decimal point version numbers are
- preferred over text, i.e. "2.3.4" is preferred over "Gingerbread".
-
-
- - Developers -
-
- URLs (Optional):
-
- Homepage - Here you can enter your personal URL or a URL particularly
- pertaining to the firmware being packaged. The URL must be well
- formed for it to work. An example of a well formed URL is
- "http://www.glassechidna.com.au/products/heimdall/". It is
- important to include "http://" in order to specify the protocol as
- other protocols such as "ftp://" are equally valid although
- unlikely to be used.
-
- Donate - Here you can enter a URL that will link users to a page to
- make donations for the effort you've put into developing your
- firmware. Once again the URL must be well formed but there is no
- requirement on how your donation page should work. For instance
- both "http://www.glassechidna.com.au/donate/" and
- "http://forum.xda-developers.com/donatetome.php?u=2710388" are
- equally valid.
-
- Developer Info:
-
- Name - Here you can enter in the name of individual team members or a
- team name. Click "Add" and the developer will be added to the list
- on the right. If you make a mistake you can select a developer from
- the list and click "Remove". You can list as many developers as you
- like, however visual constraints of the "Load Package" tab means
- only a few names will be visible. Where possible you may want to
- opt for team names over listing individual team members.
-
-
- - Supported Devices -
-
- This section allows you to create a list of devices that are supported by
- your particular firmware. Although Heimdall isn't capable of enforcing this
- we strongly recommend you take this section seriously. If filled out
- correctly you could help save a number of accidental bricks!
-
- Device Info:
-
- Manufacturer - This is where you can enter the name of the manufacturer
- for a particular device. For now this will most likely be
- "Samsung".
-
- Name - This is the human readable name for a particular device.
- "Galaxy S", "Galaxy S II", "Droid Charge", "Vibrant" and
- "Galaxy S (Telstra)" are all valid names. There are a lot of
- possible variations here so be as specific as you think is
- necessary.
-
- Product Code - This is by far the most important bit of device
- information. Device names tend to be region specific and further
- subject to the whims of telecommunication companies and resellers.
- Product Codes (or product IDs) are designated by manufacturers and
- are generally the definitive means of referring to a particular
- device. Examples are "GT-I9000", "GT-I9100" and "SCH-I897". If
- you're unsure of a particular product code then both Google and
- GSMArena are your friends!
-
-
- After filling out all the necessary information the "Build" button will be
- enabled. If it's still disabled then you know you're missing some required
- information. In particular you must specify at least one developer and at
- least one supported device. Pressing the "Build" button will bring up a
- save dialogue where you must chose a file name for your particular package.
- Don't worry about specifying the ".tar.gz" extension Heimdall Frontend will
- take care of this automatically.
-
- Once you've chosen a file name Heimdall Frontend will begin the process of
- building the firmware package. In doing so a valid firmware.xml file will
- be generated from the information entered. All files will be archived in a
- single TAR file then the TAR archive will be compressed via gzip
- compression. Compression will take a little while but you will see progress
- bars so you know the application hasn't hung. When the progress bars
- disappear you're finished making your package.
-
- Congratulations! You're now ready to redistribute your firmware package
- online or by any means you see fit.
-
-
-
-Appendix A - firmware.xml
-
-The following details a part of the Heimdall Firmware Package format. This
-is only relevant to developers or advanced users who wish to create Heimdall
-Firmware Packages outside of Heimdall Frontend or in some way integrate support
-for the format in their own software.
-
-
-All Heimdall Firmware Packages must contain a file called firmware.xml. This
-file stores flash information and meta-data for the package as well as
-information about other files contained within the package.
-
-
-The format is fairly straight-forward so it won't be explained in great detail.
-Nonetheless the following is an example of a valid firmware.xml file.
-
-<?xml version="1.0" encoding="UTF-8"?>
-<firmware version="1">
- <name>Test Firmware</name>
- <version>1.1</version>
- <platform>
- <name>Android</name>
- <version>2.3.4</version>
- </platform>
- <developers>
- <name>Benjamin Dobell</name>
- <name>Hedonism Bot</name>
- </developers>
- <url>http://www.glassechidna.com.au/</url>
- <donateurl>http://www.glassechidna.com.au/donate/</donateurl>
- <devices>
- <device>
- <manufacturer>Samsung</manufacturer>
- <product>GT-I9000</product>
- <name>Galaxy S</name>
- </device>
- <device>
- <manufacturer>Samsung</manufacturer>
- <product>GT-I9000T</product>
- <name>Galaxy S (Telstra)</name>
- </device>
- <device>
- <manufacturer>Samsung</manufacturer>
- <product>GT-I9000M</product>
- <name>Vibrant</name>
- </device>
- </devices>
- <pit>Nl3276-I9000 s1_odin_20100512.pit</pit>
- <repartition>0</repartition>
- <noreboot>0</noreboot>
- <files>
- <file>
- <id>0</id>
- <filename>gq3276-boot.bin</filename>
- </file>
- <file>
- <id>24</id>
- <filename>Uh3276-cache.rfs</filename>
- </file>
- <file>
- <id>22</id>
- <filename>em3276-factoryfs.rfs</filename>
- </file>
- <file>
- <id>11</id>
- <filename>fl3276-modem.bin</filename>
- </file>
- <file>
- <id>21</id>
- <filename>Xd3276-param.lfs</filename>
- </file>
- <file>
- <id>3</id>
- <filename>if3276-Sbl.bin</filename>
- </file>
- <file>
- <id>6</id>
- <filename>cr3276-zImage</filename>
- </file>
- </files>
-</firmware>
-
-
-New lines need not be included and the order in which elements are specified
-does not need to match that of the above example.
-
-One and only one <firmware> element must be included. The <firmware> element
-must also have a version attribute specified. The version must be parsable as
-an integer and indicates what version of the Heimdall Firmware Package
-specification the package adheres to.
-
-All data is stored as strings, however a <file>'s <id> element must be parsable
-as an integer. The <id> value represents the partition ID (according to the
-specified PIT file) that the file should be flashed to.
-
-A <firmware>'s <repartition> and <noreboot> elements must also be parsable as
-an integer. However, as they represent boolean values, a value of zero ("0")
-means false (or disabled) where as a non-zero value (typically "1") means true
-(or enabled).
-
-File names are specified relative to the TAR archive in which firmware.xml and
-all other files are to be stored. Heimdall Firmware Packages do not support
-directories or links, as such file names should only be a name and not a path.
-
-<url> and <donateurl> are the only optional elements, all other elements must
-be included.
-
-
-
-Appendix B - Installing Heimdall from Source:
-
- 1. First make sure you have installed build-tools, pkgconfig, zlib-dev and
- libusb-1.0-dev (v1.0.8 or newer).
-
- NOTE: Package names may not be absolutely identical to those above.
-
- 2. Open a terminal and navigate to the directory you downloaded,
- or extracted, Heimdall to.
-
- 3. Enter the following commands to compile libpit:
-
- cd libpit
- ./configure
- make
- cd ..
-
- If you have problems please consult http://www.libusb.org/
-
- 4. Enter the following commands to compile libpit.
-
- cd libusb-1.0
- ./configure
- make
- cd ..
-
- NOTE: There is no need to run "sudo make install".
-
- 4. Enter the following commands to compile and install Heimdall:
-
- cd heimdall
- ./configure
- make
- sudo make install
- cd ..
-
- NOTE: As an alternative to "sudo make install" you may chose to generate
- a package by typing the following:
-
- sudo checkinstall --pkgversion <version>
-
- Where <version> is the current Heimdall release e.g. 1.3.0
-
- 5. Done
-
-
-
-Appendix C - Installing Heimdall Frontend from Source:
-
- 1. Compile and install Heimdall, see Appendix B.
-
- 2. First make sure you have installed Qt 4.7 or later, available from:
-
- http://qt.nokia.com/downloads/
-
- 3. Open a terminal and navigate to the directory you extracted Heimdall to.
-
- 4. Enter the following commands to compile and install Heimdall Frontend:
-
- cd heimdall-frontend
- qmake-qt4 heimdall-frontend.pro
- make
- sudo make install
-
- NOTE: As an alternative to "sudo make install" you may chose to generate
- a package by typing the following:
-
- sudo checkinstall --pkgversion <version>
-
- Where <version> is the current Heimdall release e.g. 1.3.0
-
- 5. Done
-
diff --git a/heimdall-frontend/heimdall-frontend.pro b/heimdall-frontend/heimdall-frontend.pro
index 1c3e5bc..6cb5774 100644
--- a/heimdall-frontend/heimdall-frontend.pro
+++ b/heimdall-frontend/heimdall-frontend.pro
@@ -5,19 +5,29 @@
TEMPLATE = app
TARGET = heimdall-frontend
+isEmpty(OUTPUTDIR) {
+ OUTPUTDIR = $$(OUTPUTDIR)
+}
+
macx {
message("")
- QT_FRAMEWORKS_DIR = $$(QT_FRAMEWORKS_DIR)
+ isEmpty(QT_FRAMEWORKS_DIR) {
+ QT_FRAMEWORKS_DIR = $$(QT_FRAMEWORKS_DIR)
+ }
+
isEmpty(QT_FRAMEWORKS_DIR) {
message("QT_FRAMEWORKS_DIR not specified, using default:")
- QT_FRAMEWORKS_DIR = /System/Library/Frameworks
+ QT_FRAMEWORKS_DIR = /Library/Frameworks
}
message("QT_FRAMEWORKS_DIR = $$QT_FRAMEWORKS_DIR")
message("")
- QMAKE_MACOSX_DEPLOYMENT_TARGET = $$(QMAKE_MACOSX_DEPLOYMENT_TARGET)
+ isEmpty(QMAKE_MACOSX_DEPLOYMENT_TARGET) {
+ QMAKE_MACOSX_DEPLOYMENT_TARGET = $$(QMAKE_MACOSX_DEPLOYMENT_TARGET)
+ }
+
isEmpty(QMAKE_MACOSX_DEPLOYMENT_TARGET) {
message("QMAKE_MACOSX_DEPLOYMENT_TARGET not specified, using default:")
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4
@@ -26,30 +36,35 @@ macx {
message("QMAKE_MACOSX_DEPLOYMENT_TARGET = $$QMAKE_MACOSX_DEPLOYMENT_TARGET")
message("")
- QMAKE_MAC_SDK = $$(QMAKE_MAC_SDK)
+ isEmpty(QMAKE_MAC_SDK) {
+ QMAKE_MAC_SDK = $$(QMAKE_MAC_SDK)
+ }
+
isEmpty(QMAKE_MAC_SDK) {
message("QMAKE_MAC_SDK not specified, using default:")
- QMAKE_MAC_SDK = /Developer/SDKs/MacOSX10.4.sdk
+ QMAKE_MAC_SDK = /Developer/SDKs/MacOSX10.7.sdk
}
message("QMAKE_MAC_SDK = $$QMAKE_MAC_SDK")
message("")
- QMAKE_MACOSX_DEPLOYMENT_TARGET = $$MACOSX_DEPLOYMENT_TARGET
- QMAKE_MAC_SDK = $$MAC_SDK
-
- PRIVATE_FRAMEWORKS.files = $$(QTFRAMEWORKSDIR)/QtCore.framework \
- $$(QTFRAMEWORKSDIR)//QtGui.framework $$(QTFRAMEWORKSDIR)/QtXml.framework
+ PRIVATE_FRAMEWORKS.files = $$QT_FRAMEWORKS_DIR/QtCore.framework \
+ $$QT_FRAMEWORKS_DIR//QtGui.framework $$QT_FRAMEWORKS_DIR/QtXml.framework
PRIVATE_FRAMEWORKS.path = Contents/Frameworks
QMAKE_BUNDLE_DATA += PRIVATE_FRAMEWORKS
+ LIBS += -L/usr/lib
config += x86 x86_64 ppc
+
+ QMAKE_CFLAGS_X86_64 = -m64 -mmacosx-version-min=10.5
+ QMAKE_CXXFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
+ QMAKE_LFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
isEmpty(OUTPUTDIR) {
DESTDIR = /Applications
} else {
- DESTDIR = $$(OUTPUTDIR)
+ DESTDIR = $$OUTPUTDIR
}
} else {
@@ -57,7 +72,7 @@ macx {
DESTDIR = ../Win32
!isEmpty(OUTPUTDIR) {
- target.path = $$(OUTPUTDIR)
+ target.path = $$OUTPUTDIR
INSTALLS += target
}
} else {
@@ -66,7 +81,7 @@ macx {
isEmpty(OUTPUTDIR) {
target.path = /usr/local/bin
} else {
- target.path = $$(OUTPUTDIR)
+ target.path = $$OUTPUTDIR
}
INSTALLS += target
@@ -85,6 +100,7 @@ INCLUDEPATH += ./GeneratedFiles \
./GeneratedFiles/Release \
../libpit/Source \
.
+unix:INCLUDEPATH += /usr/include
DEPENDPATH += .
MOC_DIR += ./GeneratedFiles/release
OBJECTS_DIR += release
diff --git a/heimdall-frontend/mainwindow.ui b/heimdall-frontend/mainwindow.ui
index 6a165fb..ce42a89 100644
--- a/heimdall-frontend/mainwindow.ui
+++ b/heimdall-frontend/mainwindow.ui
@@ -401,7 +401,7 @@
<rect>
<x>10</x>
<y>300</y>
- <width>751</width>
+ <width>511</width>
<height>171</height>
</rect>
</property>
@@ -414,9 +414,9 @@
</property>
<property name="geometry">
<rect>
- <x>350</x>
+ <x>280</x>
<y>130</y>
- <width>271</width>
+ <width>221</width>
<height>31</height>
</rect>
</property>
@@ -432,8 +432,8 @@
<rect>
<x>10</x>
<y>30</y>
- <width>731</width>
- <height>91</height>
+ <width>491</width>
+ <height>81</height>
</rect>
</property>
<property name="undoRedoEnabled">
@@ -451,7 +451,7 @@
<rect>
<x>10</x>
<y>130</y>
- <width>331</width>
+ <width>261</width>
<height>21</height>
</rect>
</property>
@@ -468,59 +468,6 @@
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
</property>
</widget>
- <widget class="QPushButton" name="startFlashButton">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="geometry">
- <rect>
- <x>620</x>
- <y>130</y>
- <width>91</width>
- <height>31</height>
- </rect>
- </property>
- <property name="text">
- <string>Start</string>
- </property>
- </widget>
- <widget class="QLabel" name="startFlashTipLabel">
- <property name="geometry">
- <rect>
- <x>720</x>
- <y>130</y>
- <width>21</width>
- <height>23</height>
- </rect>
- </property>
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="toolTip">
- <string notr="true">The &quot;Start&quot; button will remain inactive until at least one partition/file is added.</string>
- </property>
- <property name="frameShape">
- <enum>QFrame::Panel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <property name="lineWidth">
- <number>2</number>
- </property>
- <property name="midLineWidth">
- <number>0</number>
- </property>
- <property name="text">
- <string>?</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
</widget>
<widget class="QGroupBox" name="optionsGroup">
<property name="geometry">
@@ -540,7 +487,7 @@
<x>10</x>
<y>20</y>
<width>391</width>
- <height>61</height>
+ <height>91</height>
</rect>
</property>
<property name="title">
@@ -624,6 +571,25 @@
<set>Qt::AlignCenter</set>
</property>
</widget>
+ <widget class="QCheckBox" name="repartitionCheckBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>60</y>
+ <width>131</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string notr="true">Repartitioning will wipe all data for your phone and install the selected PIT file.</string>
+ </property>
+ <property name="text">
+ <string>Repartition</string>
+ </property>
+ </widget>
</widget>
<widget class="QGroupBox" name="partitionGroup">
<property name="geometry">
@@ -738,44 +704,6 @@
</property>
</widget>
</widget>
- <widget class="QCheckBox" name="noRebootCheckBox">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="geometry">
- <rect>
- <x>250</x>
- <y>90</y>
- <width>151</width>
- <height>21</height>
- </rect>
- </property>
- <property name="toolTip">
- <string notr="true">Can be enabled to prevent your device rebooting after the flash finishes.</string>
- </property>
- <property name="text">
- <string>No Reboot</string>
- </property>
- </widget>
- <widget class="QCheckBox" name="repartitionCheckBox">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="geometry">
- <rect>
- <x>20</x>
- <y>90</y>
- <width>151</width>
- <height>21</height>
- </rect>
- </property>
- <property name="toolTip">
- <string notr="true">Repartitioning will wipe all data for your phone and install the selected PIT file.</string>
- </property>
- <property name="text">
- <string>Repartition</string>
- </property>
- </widget>
<widget class="QGroupBox" name="partitionsGroup">
<property name="geometry">
<rect>
@@ -872,6 +800,110 @@
</widget>
</widget>
</widget>
+ <widget class="QGroupBox" name="sessionGroup">
+ <property name="geometry">
+ <rect>
+ <x>530</x>
+ <y>300</y>
+ <width>231</width>
+ <height>171</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Session</string>
+ </property>
+ <widget class="QCheckBox" name="noRebootCheckBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>211</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string notr="true">Can be enabled to prevent your device rebooting after the flash finishes.</string>
+ </property>
+ <property name="text">
+ <string>No Reboot</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" name="resumeCheckbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>60</y>
+ <width>211</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string notr="true">Can be enabled to prevent your device rebooting after the flash finishes.</string>
+ </property>
+ <property name="text">
+ <string>Resume (use after &quot;No Reboot&quot;)</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="startFlashButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>50</x>
+ <y>120</y>
+ <width>111</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Start</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="startFlashTipLabel">
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>120</y>
+ <width>21</width>
+ <height>23</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="toolTip">
+ <string notr="true">The &quot;Start&quot; button will remain inactive until at least one partition/file is added.</string>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="lineWidth">
+ <number>2</number>
+ </property>
+ <property name="midLineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>?</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </widget>
</widget>
<widget class="QWidget" name="createPackageTab">
<property name="enabled">
@@ -1826,6 +1858,8 @@
<property name="title">
<string>Advanced</string>
</property>
+ <addaction name="actionResumeConnection"/>
+ <addaction name="separator"/>
<addaction name="actionVerboseOutput"/>
</widget>
<addaction name="menuDonate"/>
@@ -1860,6 +1894,14 @@
<string>Verbose Output</string>
</property>
</action>
+ <action name="actionResumeConnection">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Resume Connection</string>
+ </property>
+ </action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<tabstops>
@@ -1883,7 +1925,6 @@
<tabstop>partitionFileLineEdit</tabstop>
<tabstop>partitionFileBrowseButton</tabstop>
<tabstop>outputPlainTextEdit</tabstop>
- <tabstop>startFlashButton</tabstop>
<tabstop>createFirmwareNameLineEdit</tabstop>
<tabstop>createFirmwareVersionLineEdit</tabstop>
<tabstop>createPlatformNameLineEdit</tabstop>