- Heimdall Frontend large font fixes.
- Heimdall Frontend name collision resolution (over the top). - Attempt at resolving SGS2 failure to end session errors. (Needs testing)alt_setting-error
parent
a18d2e6b02
commit
3fe2564481
|
@ -29,6 +29,7 @@ using namespace HeimdallFrontend;
|
|||
void Alerts::DisplayError(const QString& errorMessage)
|
||||
{
|
||||
QMessageBox messageBox;
|
||||
messageBox.setModal(true);
|
||||
messageBox.setText(errorMessage);
|
||||
messageBox.setIcon(QMessageBox::Critical);
|
||||
messageBox.exec();
|
||||
|
@ -37,6 +38,7 @@ void Alerts::DisplayError(const QString& errorMessage)
|
|||
void Alerts::DisplayWarning(const QString& warningMessage)
|
||||
{
|
||||
QMessageBox messageBox;
|
||||
messageBox.setModal(true);
|
||||
messageBox.setText(warningMessage);
|
||||
messageBox.setIcon(QMessageBox::Warning);
|
||||
messageBox.exec();
|
||||
|
|
|
@ -18,9 +18,13 @@
|
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.*/
|
||||
|
||||
// Qt
|
||||
#include "QRegExp"
|
||||
|
||||
// Heimdall Frontend
|
||||
#include "Alerts.h"
|
||||
#include "FirmwareInfo.h"
|
||||
#include "Packaging.h"
|
||||
|
||||
using namespace HeimdallFrontend;
|
||||
|
||||
|
@ -320,7 +324,7 @@ bool FileInfo::ParseXml(QXmlStreamReader& xml)
|
|||
return (false);
|
||||
}
|
||||
|
||||
void FileInfo::WriteXml(QXmlStreamWriter& xml) const
|
||||
void FileInfo::WriteXml(QXmlStreamWriter& xml, const QString& filename) const
|
||||
{
|
||||
xml.writeStartElement("file");
|
||||
|
||||
|
@ -329,14 +333,7 @@ void FileInfo::WriteXml(QXmlStreamWriter& xml) const
|
|||
xml.writeEndElement();
|
||||
|
||||
xml.writeStartElement("filename");
|
||||
|
||||
int lastSlash = filename.lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = filename.lastIndexOf('\\');
|
||||
|
||||
xml.writeCharacters(filename.mid(lastSlash + 1));
|
||||
|
||||
xml.writeCharacters(filename);
|
||||
xml.writeEndElement();
|
||||
|
||||
xml.writeEndElement();
|
||||
|
@ -775,7 +772,7 @@ void FirmwareInfo::WriteXml(QXmlStreamWriter& xml) const
|
|||
xml.writeStartElement("files");
|
||||
|
||||
for (int i = 0; i < fileInfos.length(); i++)
|
||||
fileInfos[i].WriteXml(xml);
|
||||
fileInfos[i].WriteXml(xml, Packaging::ClashlessFilename(fileInfos, i));
|
||||
|
||||
xml.writeEndElement();
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ namespace HeimdallFrontend
|
|||
FileInfo(unsigned int partitionId, const QString& filename);
|
||||
|
||||
bool ParseXml(QXmlStreamReader& xml);
|
||||
void WriteXml(QXmlStreamWriter& xml) const;
|
||||
void WriteXml(QXmlStreamWriter& xml, const QString& filename) const;
|
||||
|
||||
unsigned int GetPartitionId(void) const
|
||||
{
|
||||
|
|
|
@ -221,12 +221,12 @@ bool Packaging::ExtractTar(QTemporaryFile& tarFile, PackageData *packageData)
|
|||
return (true);
|
||||
}
|
||||
|
||||
bool Packaging::WriteTarEntry(const QString& filename, QTemporaryFile *tarFile, bool firmwareXml)
|
||||
bool Packaging::WriteTarEntry(const QString& filePath, QTemporaryFile *tarFile, const QString& entryFilename)
|
||||
{
|
||||
TarHeader tarHeader;
|
||||
memset(tarHeader.buffer, 0, TarHeader::kBlockLength);
|
||||
|
||||
QFile file(filename);
|
||||
QFile file(filePath);
|
||||
|
||||
if (!file.open(QFile::ReadOnly))
|
||||
{
|
||||
|
@ -243,19 +243,12 @@ bool Packaging::WriteTarEntry(const QString& filename, QTemporaryFile *tarFile,
|
|||
QFileInfo qtFileInfo(file);
|
||||
QByteArray utfFilename;
|
||||
|
||||
if (firmwareXml)
|
||||
{
|
||||
utfFilename = QString("firmware.xml").toUtf8();
|
||||
}
|
||||
else
|
||||
{
|
||||
utfFilename = qtFileInfo.fileName().toUtf8();
|
||||
utfFilename = entryFilename.toUtf8();
|
||||
|
||||
if (utfFilename.length() > 100)
|
||||
{
|
||||
Alerts::DisplayError(QString("File name is too long:\n%1").arg(qtFileInfo.fileName()));
|
||||
return (false);
|
||||
}
|
||||
if (utfFilename.length() > 100)
|
||||
{
|
||||
Alerts::DisplayError(QString("File name is too long:\n%1").arg(qtFileInfo.fileName()));
|
||||
return (false);
|
||||
}
|
||||
|
||||
strcpy(tarHeader.fields.name, utfFilename.constData());
|
||||
|
@ -388,7 +381,15 @@ bool Packaging::CreateTar(const FirmwareInfo& firmwareInfo, QTemporaryFile *tarF
|
|||
|
||||
for (int i = 0; i < fileInfos.length(); i++)
|
||||
{
|
||||
if (!WriteTarEntry(fileInfos[i].GetFilename(), tarFile))
|
||||
QString filename = ClashlessFilename(fileInfos, i);
|
||||
|
||||
if (filename == "firmware.xml")
|
||||
{
|
||||
Alerts::DisplayError("You cannot name your partition files \"firmware.xml\".\nIt is a reserved name.");
|
||||
return (false);
|
||||
}
|
||||
|
||||
if (!WriteTarEntry(fileInfos[i].GetFilename(), tarFile, ClashlessFilename(fileInfos, i)))
|
||||
{
|
||||
tarFile->resize(0);
|
||||
tarFile->close();
|
||||
|
@ -411,7 +412,20 @@ bool Packaging::CreateTar(const FirmwareInfo& firmwareInfo, QTemporaryFile *tarF
|
|||
}
|
||||
}
|
||||
|
||||
if (!WriteTarEntry(firmwareInfo.GetPitFilename(), tarFile))
|
||||
int lastSlash = firmwareInfo.GetPitFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = firmwareInfo.GetPitFilename().lastIndexOf('\\');
|
||||
|
||||
QString pitFilename = ClashlessFilename(fileInfos, firmwareInfo.GetPitFilename().mid(lastSlash + 1));
|
||||
|
||||
if (pitFilename == "firmware.xml")
|
||||
{
|
||||
Alerts::DisplayError("You cannot name your PIT file \"firmware.xml\".\nIt is a reserved name.");
|
||||
return (false);
|
||||
}
|
||||
|
||||
if (!WriteTarEntry(firmwareInfo.GetPitFilename(), tarFile, pitFilename))
|
||||
{
|
||||
tarFile->resize(0);
|
||||
tarFile->close();
|
||||
|
@ -431,7 +445,7 @@ bool Packaging::CreateTar(const FirmwareInfo& firmwareInfo, QTemporaryFile *tarF
|
|||
return (false);
|
||||
}
|
||||
|
||||
if (!WriteTarEntry(firmwareXmlFile.fileName(), tarFile, true))
|
||||
if (!WriteTarEntry(firmwareXmlFile.fileName(), tarFile, "firmware.xml"))
|
||||
{
|
||||
tarFile->resize(0);
|
||||
tarFile->close();
|
||||
|
@ -558,7 +572,12 @@ bool Packaging::BuildPackage(const QString& packagePath, const FirmwareInfo& fir
|
|||
QTemporaryFile tar("XXXXXX.tar");
|
||||
|
||||
if (!CreateTar(firmwareInfo, &tar))
|
||||
{
|
||||
fclose(compressedPackageFile);
|
||||
remove(packagePath.toStdString().c_str());
|
||||
|
||||
return (false);
|
||||
}
|
||||
|
||||
if (!tar.open())
|
||||
{
|
||||
|
@ -626,3 +645,271 @@ bool Packaging::BuildPackage(const QString& packagePath, const FirmwareInfo& fir
|
|||
|
||||
return (true);
|
||||
}
|
||||
|
||||
QString Packaging::ClashlessFilename(const QList<FileInfo>& fileInfos, int fileInfoIndex)
|
||||
{
|
||||
int lastSlash = fileInfos[fileInfoIndex].GetFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = fileInfos[fileInfoIndex].GetFilename().lastIndexOf('\\');
|
||||
|
||||
QString filename = fileInfos[fileInfoIndex].GetFilename().mid(lastSlash + 1);
|
||||
unsigned int renameIndex = 0;
|
||||
|
||||
// Check for name clashes
|
||||
for (int i = 0; i < fileInfoIndex; i++)
|
||||
{
|
||||
lastSlash = fileInfos[i].GetFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = fileInfos[i].GetFilename().lastIndexOf('\\');
|
||||
|
||||
QString otherFilename = fileInfos[i].GetFilename().mid(lastSlash + 1);
|
||||
|
||||
if (filename == otherFilename)
|
||||
renameIndex++;
|
||||
}
|
||||
|
||||
if (renameIndex > 0)
|
||||
{
|
||||
int lastPeriodIndex = filename.lastIndexOf(QChar('.'));
|
||||
QString shortFilename;
|
||||
QString fileType;
|
||||
|
||||
if (lastPeriodIndex >= 0)
|
||||
{
|
||||
shortFilename = filename.left(lastPeriodIndex);
|
||||
fileType = filename.mid(lastPeriodIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
shortFilename = filename;
|
||||
}
|
||||
|
||||
unsigned int renameIndexOffset = 0;
|
||||
bool validIndexOffset = true;
|
||||
|
||||
// Before we append a rename index we must ensure it doesn't produce further collisions.
|
||||
for (int i = 0; i < fileInfos.length(); i++)
|
||||
{
|
||||
int lastSlash = fileInfos[i].GetFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = fileInfos[i].GetFilename().lastIndexOf('\\');
|
||||
|
||||
QString otherFilename = fileInfos[i].GetFilename().mid(lastSlash + 1);
|
||||
|
||||
if (otherFilename.length() > filename.length() + 1)
|
||||
{
|
||||
QString trimmedOtherFilename = otherFilename.left(shortFilename.length());
|
||||
|
||||
if (shortFilename == trimmedOtherFilename)
|
||||
{
|
||||
lastPeriodIndex = otherFilename.lastIndexOf(QChar('.'));
|
||||
QString shortOtherFilename;
|
||||
|
||||
if (lastPeriodIndex >= 0)
|
||||
shortOtherFilename = otherFilename.left(lastPeriodIndex);
|
||||
else
|
||||
shortOtherFilename = otherFilename;
|
||||
|
||||
QRegExp renameExp("-[0-9]+");
|
||||
|
||||
if (renameExp.lastIndexIn(shortOtherFilename) == shortFilename.length())
|
||||
{
|
||||
unsigned int trailingInteger = shortOtherFilename.mid(shortFilename.length() + 1).toUInt(&validIndexOffset);
|
||||
|
||||
if (!validIndexOffset)
|
||||
break;
|
||||
|
||||
if (trailingInteger > renameIndexOffset)
|
||||
renameIndexOffset = trailingInteger;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (validIndexOffset)
|
||||
{
|
||||
// Ensure renaming won't involve integer overflow!
|
||||
if (renameIndex > static_cast<unsigned int>(-1) - renameIndexOffset)
|
||||
validIndexOffset = false;
|
||||
}
|
||||
|
||||
if (validIndexOffset)
|
||||
{
|
||||
shortFilename.append(QChar('-'));
|
||||
shortFilename.append(QString::number(renameIndexOffset + renameIndex));
|
||||
|
||||
return (shortFilename + fileType);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback behaviour... an absolutely terrible brute force implementation!
|
||||
QString filename;
|
||||
QString renamePrefix;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
renamePrefix.append(QChar('+'));
|
||||
|
||||
for (unsigned int i = 0; i < static_cast<unsigned int>(-1); i++)
|
||||
{
|
||||
filename = shortFilename + renamePrefix + QString::number(i) + fileType;
|
||||
|
||||
bool valid = true;
|
||||
|
||||
for (int i = 0; i < fileInfos.length(); i++)
|
||||
{
|
||||
int lastSlash = fileInfos[i].GetFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = fileInfos[i].GetFilename().lastIndexOf('\\');
|
||||
|
||||
if (filename == fileInfos[i].GetFilename().mid(lastSlash + 1))
|
||||
{
|
||||
valid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (valid)
|
||||
return (filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return (filename);
|
||||
}
|
||||
}
|
||||
|
||||
QString Packaging::ClashlessFilename(const QList<FileInfo>& fileInfos, const QString& filename)
|
||||
{
|
||||
unsigned int renameIndex = 0;
|
||||
|
||||
// Check for name clashes
|
||||
for (int i = 0; i < fileInfos.length(); i++)
|
||||
{
|
||||
int lastSlash = fileInfos[i].GetFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = fileInfos[i].GetFilename().lastIndexOf('\\');
|
||||
|
||||
QString otherFilename = fileInfos[i].GetFilename().mid(lastSlash + 1);
|
||||
|
||||
if (filename == otherFilename)
|
||||
renameIndex++;
|
||||
}
|
||||
|
||||
if (renameIndex > 0)
|
||||
{
|
||||
int lastPeriodIndex = filename.lastIndexOf(QChar('.'));
|
||||
QString shortFilename;
|
||||
QString fileType;
|
||||
|
||||
if (lastPeriodIndex >= 0)
|
||||
{
|
||||
shortFilename = filename.left(lastPeriodIndex);
|
||||
fileType = filename.mid(lastPeriodIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
shortFilename = filename;
|
||||
}
|
||||
|
||||
unsigned int renameIndexOffset = 0;
|
||||
bool validIndexOffset = true;
|
||||
|
||||
// Before we append a rename index we must ensure it doesn't produce further collisions.
|
||||
for (int i = 0; i < fileInfos.length(); i++)
|
||||
{
|
||||
int lastSlash = fileInfos[i].GetFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = fileInfos[i].GetFilename().lastIndexOf('\\');
|
||||
|
||||
QString otherFilename = fileInfos[i].GetFilename().mid(lastSlash + 1);
|
||||
|
||||
if (otherFilename.length() > filename.length() + 1)
|
||||
{
|
||||
QString trimmedOtherFilename = otherFilename.left(filename.length());
|
||||
|
||||
if (filename == trimmedOtherFilename)
|
||||
{
|
||||
lastPeriodIndex = otherFilename.lastIndexOf(QChar('.'));
|
||||
QString shortOtherFilename;
|
||||
|
||||
if (lastPeriodIndex >= 0)
|
||||
shortOtherFilename = otherFilename.left(lastPeriodIndex);
|
||||
else
|
||||
shortOtherFilename = otherFilename;
|
||||
|
||||
QRegExp renameExp("-[0-9]+");
|
||||
|
||||
if (renameExp.lastIndexIn(shortOtherFilename) == shortFilename.length())
|
||||
{
|
||||
unsigned int trailingInteger = shortOtherFilename.mid(shortFilename.length() + 1).toUInt(&validIndexOffset);
|
||||
|
||||
if (!validIndexOffset)
|
||||
break;
|
||||
|
||||
if (trailingInteger > renameIndexOffset)
|
||||
renameIndexOffset = trailingInteger;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (validIndexOffset)
|
||||
{
|
||||
// Ensure renaming won't involve integer overflow!
|
||||
if (renameIndex > static_cast<unsigned int>(-1) - renameIndexOffset)
|
||||
validIndexOffset = false;
|
||||
}
|
||||
|
||||
if (validIndexOffset)
|
||||
{
|
||||
shortFilename.append(QChar('-'));
|
||||
shortFilename.append(QString::number(renameIndexOffset + renameIndex));
|
||||
|
||||
return (shortFilename + fileType);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback behaviour, brute-force/semi-random.
|
||||
bool valid;
|
||||
QString filename;
|
||||
|
||||
do
|
||||
{
|
||||
valid = true;
|
||||
|
||||
filename = shortFilename + "-";
|
||||
for (int i = 0; i < 8; i++)
|
||||
filename.append(QChar(qrand() % ('Z' - 'A' + 1) + 'A'));
|
||||
|
||||
for (int i = 0; i < fileInfos.length(); i++)
|
||||
{
|
||||
int lastSlash = fileInfos[i].GetFilename().lastIndexOf('/');
|
||||
|
||||
if (lastSlash < 0)
|
||||
lastSlash = fileInfos[i].GetFilename().lastIndexOf('\\');
|
||||
|
||||
if (filename == fileInfos[i].GetFilename().mid(lastSlash + 1))
|
||||
{
|
||||
valid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (!valid);
|
||||
|
||||
return (filename);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return (filename);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace HeimdallFrontend
|
|||
// TODO: Add support for sparse files to both methods?
|
||||
static bool ExtractTar(QTemporaryFile& tarFile, PackageData *packageData);
|
||||
|
||||
static bool WriteTarEntry(const QString& filename, QTemporaryFile *tarFile, bool firmwareXml = false);
|
||||
static bool WriteTarEntry(const QString& filePath, QTemporaryFile *tarFile, const QString& entryFilename);
|
||||
static bool CreateTar(const FirmwareInfo& firmwareInfo, QTemporaryFile *tarFile); // Uses original TAR format.
|
||||
|
||||
public:
|
||||
|
@ -112,6 +112,9 @@ namespace HeimdallFrontend
|
|||
|
||||
static bool ExtractPackage(const QString& packagePath, PackageData *packageData);
|
||||
static bool BuildPackage(const QString& packagePath, const FirmwareInfo& firmwareInfo);
|
||||
|
||||
static QString ClashlessFilename(const QList<FileInfo>& fileInfos, int fileInfoIndex);
|
||||
static QString ClashlessFilename(const QList<FileInfo>& fileInfos, const QString& filename);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,9 @@
|
|||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="Qt4VSPropertySheet.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release - Static MSVC|Win32'">
|
||||
<Import Project="Qt4VSPropertySheet.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
|
@ -100,7 +103,6 @@
|
|||
<ItemGroup>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_mainwindow.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - Static MSVC|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\qrc_mainwindow.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
|
@ -110,7 +112,6 @@
|
|||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_mainwindow.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - Static MSVC|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Source\aboutform.cpp" />
|
||||
<ClCompile Include="Source\Alerts.cpp" />
|
||||
|
|
|
@ -130,9 +130,9 @@
|
|||
<widget class="QGroupBox" name="platformGroup">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>350</x>
|
||||
<x>340</x>
|
||||
<y>80</y>
|
||||
<width>151</width>
|
||||
<width>161</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -147,7 +147,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>131</width>
|
||||
<width>141</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -216,7 +216,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>221</width>
|
||||
<width>211</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -231,7 +231,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>201</width>
|
||||
<width>191</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -288,7 +288,7 @@
|
|||
<widget class="QGroupBox" name="versionGroup">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<x>230</x>
|
||||
<y>80</y>
|
||||
<width>101</width>
|
||||
<height>61</height>
|
||||
|
@ -643,9 +643,9 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>120</x>
|
||||
<x>140</x>
|
||||
<y>30</y>
|
||||
<width>261</width>
|
||||
<width>241</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -655,7 +655,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>101</width>
|
||||
<width>121</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -668,7 +668,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>60</y>
|
||||
<width>101</width>
|
||||
<width>121</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -727,9 +727,9 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>120</x>
|
||||
<x>140</x>
|
||||
<y>60</y>
|
||||
<width>261</width>
|
||||
<width>241</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -885,7 +885,7 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>230</y>
|
||||
<width>491</width>
|
||||
<width>471</width>
|
||||
<height>231</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -897,7 +897,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>471</width>
|
||||
<width>451</width>
|
||||
<height>161</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -908,9 +908,9 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>350</x>
|
||||
<x>320</x>
|
||||
<y>200</y>
|
||||
<width>131</width>
|
||||
<width>141</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1024,9 +1024,9 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>550</x>
|
||||
<x>560</x>
|
||||
<y>20</y>
|
||||
<width>191</width>
|
||||
<width>181</width>
|
||||
<height>81</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1034,7 +1034,7 @@
|
|||
<widget class="QGroupBox" name="createDeveloperInfoGroup">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<x>310</x>
|
||||
<y>20</y>
|
||||
<width>241</width>
|
||||
<height>101</height>
|
||||
|
@ -1048,7 +1048,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>41</width>
|
||||
<width>51</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1062,9 +1062,9 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
<x>70</x>
|
||||
<y>30</y>
|
||||
<width>171</width>
|
||||
<width>161</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1110,7 +1110,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>281</width>
|
||||
<width>291</width>
|
||||
<height>101</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1122,7 +1122,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>60</y>
|
||||
<width>71</width>
|
||||
<width>81</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1135,7 +1135,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>71</width>
|
||||
<width>81</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1149,7 +1149,7 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>90</x>
|
||||
<x>100</x>
|
||||
<y>30</y>
|
||||
<width>181</width>
|
||||
<height>21</height>
|
||||
|
@ -1165,7 +1165,7 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>90</x>
|
||||
<x>100</x>
|
||||
<y>60</y>
|
||||
<width>181</width>
|
||||
<height>21</height>
|
||||
|
@ -1209,9 +1209,9 @@
|
|||
<widget class="QGroupBox" name="createDeviceInfoGroup">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>500</x>
|
||||
<x>480</x>
|
||||
<y>240</y>
|
||||
<width>271</width>
|
||||
<width>291</width>
|
||||
<height>151</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1223,7 +1223,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>60</y>
|
||||
<width>91</width>
|
||||
<width>111</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1237,7 +1237,7 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<x>130</x>
|
||||
<y>60</y>
|
||||
<width>151</width>
|
||||
<height>21</height>
|
||||
|
@ -1252,7 +1252,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>91</width>
|
||||
<width>111</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1266,7 +1266,7 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<x>130</x>
|
||||
<y>30</y>
|
||||
<width>151</width>
|
||||
<height>21</height>
|
||||
|
@ -1281,7 +1281,7 @@
|
|||
<rect>
|
||||
<x>10</x>
|
||||
<y>90</y>
|
||||
<width>91</width>
|
||||
<width>111</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -1295,7 +1295,7 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<x>130</x>
|
||||
<y>90</y>
|
||||
<width>151</width>
|
||||
<height>21</height>
|
||||
|
@ -1311,9 +1311,9 @@
|
|||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>150</x>
|
||||
<x>160</x>
|
||||
<y>120</y>
|
||||
<width>111</width>
|
||||
<width>121</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
|
|
@ -244,6 +244,35 @@ void closeFiles(map<string, FILE *> argumentfileMap)
|
|||
argumentfileMap.clear();
|
||||
}
|
||||
|
||||
bool getDeviceInfo(BridgeManager *bridgeManager)
|
||||
{
|
||||
// ---------- GET DEVICE INFORMATION ----------
|
||||
|
||||
int deviceInfoResult;
|
||||
|
||||
if (!bridgeManager->RequestDeviceInfo(DeviceInfoPacket::kUnknown1, &deviceInfoResult))
|
||||
return (false);
|
||||
|
||||
// 131072 for Galaxy S II, 0 for other devices.
|
||||
if (deviceInfoResult != 0 && deviceInfoResult != 131072)
|
||||
{
|
||||
Interface::PrintError("Unexpected device info response!\nExpected: 0\nReceived:%d\n", deviceInfoResult);
|
||||
return (false);
|
||||
}
|
||||
|
||||
// -------------------- KIES DOESN'T DO THIS --------------------
|
||||
|
||||
if (!bridgeManager->RequestDeviceInfo(DeviceInfoPacket::kUnknown2, &deviceInfoResult))
|
||||
return (false);
|
||||
|
||||
// TODO: Work out what this value is... it has been either 180 or 0 for Galaxy S phones, 3 on the Galaxy Tab, 190 for SHW-M110S.
|
||||
if (deviceInfoResult != 180 && deviceInfoResult != 0 && deviceInfoResult != 3 && deviceInfoResult != 190)
|
||||
{
|
||||
Interface::PrintError("Unexpected device info response!\nExpected: 180, 0 or 3\nReceived:%d\n", deviceInfoResult);
|
||||
return (false);
|
||||
}
|
||||
}
|
||||
|
||||
int downloadPitFile(BridgeManager *bridgeManager, unsigned char **pitBuffer)
|
||||
{
|
||||
Interface::Print("Downloading device's PIT file...\n");
|
||||
|
@ -345,32 +374,6 @@ bool flashFile(BridgeManager *bridgeManager, unsigned int partitionIndex, const
|
|||
bool attemptFlash(BridgeManager *bridgeManager, map<string, FILE *> argumentFileMap, bool repartition)
|
||||
{
|
||||
bool success;
|
||||
|
||||
// ---------- GET DEVICE INFORMATION ----------
|
||||
|
||||
int deviceInfoResult;
|
||||
|
||||
if (!bridgeManager->RequestDeviceInfo(DeviceInfoPacket::kUnknown1, &deviceInfoResult))
|
||||
return (false);
|
||||
|
||||
// 131072 for Galaxy S II, 0 for other devices.
|
||||
if (deviceInfoResult != 0 && deviceInfoResult != 131072)
|
||||
{
|
||||
Interface::PrintError("Unexpected device info response!\nExpected: 0\nReceived:%d\n", deviceInfoResult);
|
||||
return (false);
|
||||
}
|
||||
|
||||
// -------------------- KIES DOESN'T DO THIS --------------------
|
||||
|
||||
if (!bridgeManager->RequestDeviceInfo(DeviceInfoPacket::kUnknown2, &deviceInfoResult))
|
||||
return (false);
|
||||
|
||||
// TODO: Work out what this value is... it has been either 180 or 0 for Galaxy S phones, 3 on the Galaxy Tab, 190 for SHW-M110S.
|
||||
if (deviceInfoResult != 180 && deviceInfoResult != 0 && deviceInfoResult != 3 && deviceInfoResult != 190)
|
||||
{
|
||||
Interface::PrintError("Unexpected device info response!\nExpected: 180, 0 or 3\nReceived:%d\n", deviceInfoResult);
|
||||
return (false);
|
||||
}
|
||||
|
||||
// ------------- SEND TOTAL BYTES TO BE TRANSFERRED -------------
|
||||
|
||||
|
@ -397,7 +400,7 @@ bool attemptFlash(BridgeManager *bridgeManager, map<string, FILE *> argumentFile
|
|||
|
||||
DeviceInfoResponse *deviceInfoResponse = new DeviceInfoResponse();
|
||||
success = bridgeManager->ReceivePacket(deviceInfoResponse);
|
||||
deviceInfoResult = deviceInfoResponse->GetUnknown();
|
||||
int deviceInfoResult = deviceInfoResponse->GetUnknown();
|
||||
delete deviceInfoResponse;
|
||||
|
||||
if (!success)
|
||||
|
@ -663,7 +666,7 @@ int main(int argc, char **argv)
|
|||
return (0);
|
||||
}
|
||||
|
||||
if (!bridgeManager->BeginSession())
|
||||
if (!bridgeManager->BeginSession() || !getDeviceInfo(bridgeManager))
|
||||
{
|
||||
closeFiles(argumentFileMap);
|
||||
delete bridgeManager;
|
||||
|
@ -683,7 +686,7 @@ int main(int argc, char **argv)
|
|||
|
||||
case Interface::kActionClosePcScreen:
|
||||
{
|
||||
if (!bridgeManager->BeginSession())
|
||||
if (!bridgeManager->BeginSession() || !getDeviceInfo(bridgeManager))
|
||||
{
|
||||
delete bridgeManager;
|
||||
return (-1);
|
||||
|
@ -710,7 +713,7 @@ int main(int argc, char **argv)
|
|||
return (0);
|
||||
}
|
||||
|
||||
if (!bridgeManager->BeginSession())
|
||||
if (!bridgeManager->BeginSession() || !getDeviceInfo(bridgeManager))
|
||||
{
|
||||
delete bridgeManager;
|
||||
fclose(outputPitFile);
|
||||
|
@ -761,7 +764,7 @@ int main(int argc, char **argv)
|
|||
|
||||
int chipId = atoi(argumentMap.find(Interface::actions[Interface::kActionDump].valueArguments[Interface::kDumpValueArgChipId])->second.c_str());
|
||||
|
||||
if (!bridgeManager->BeginSession())
|
||||
if (!bridgeManager->BeginSession() || !getDeviceInfo(bridgeManager))
|
||||
{
|
||||
fclose(dumpFile);
|
||||
|
||||
|
@ -780,7 +783,7 @@ int main(int argc, char **argv)
|
|||
|
||||
case Interface::kActionPrintPit:
|
||||
{
|
||||
if (!bridgeManager->BeginSession())
|
||||
if (!bridgeManager->BeginSession() || !getDeviceInfo(bridgeManager))
|
||||
{
|
||||
delete bridgeManager;
|
||||
return (-1);
|
||||
|
|
Loading…
Reference in New Issue