summaryrefslogtreecommitdiffstats
path: root/heimdall/source/PitData.h
diff options
context:
space:
mode:
Diffstat (limited to 'heimdall/source/PitData.h')
-rwxr-xr-xheimdall/source/PitData.h345
1 files changed, 0 insertions, 345 deletions
diff --git a/heimdall/source/PitData.h b/heimdall/source/PitData.h
deleted file mode 100755
index b6a0d2f..0000000
--- a/heimdall/source/PitData.h
+++ /dev/null
@@ -1,345 +0,0 @@
-/* Copyright (c) 2010 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.*/
-
-#ifndef PITDATA_H
-#define PITDATA_H
-
-// C Standard Library
-#include <string.h>
-#include <vector>
-
-namespace Heimdall
-{
- class PitEntry
- {
- public:
-
- enum
- {
- kDataSize = 132,
- kPartitionNameMaxLength = 32,
- kFilenameMaxLength = 64
- };
-
- enum
- {
- kPartitionTypeRfs = 0,
- kPartitionTypeBlank = 1, // ?
- kPartitionTypeExt4 = 2
- };
-
- enum
- {
- kPartitionFlagWrite = 1 << 1
- };
-
- private:
-
- bool unused;
-
- unsigned int partitionType;
- unsigned int partitionIdentifier;
- unsigned int partitionFlags;
-
- unsigned int unknown2;
-
- unsigned int partitionBlockSize;
- unsigned int partitionBlockCount;
-
- unsigned int unknown3;
- unsigned int unknown4;
-
- char partitionName[kPartitionNameMaxLength];
- char filename[kFilenameMaxLength];
-
- public:
-
- PitEntry();
- ~PitEntry();
-
- void Print(void) const;
-
- bool GetUnused(void) const
- {
- return unused;
- }
-
- void SetUnused(bool unused)
- {
- this->unused = unused;
- }
-
- unsigned int GetPartitionType(void) const
- {
- return partitionType;
- }
-
- void SetPartitionType(unsigned int partitionType)
- {
- this->partitionType = partitionType;
- }
-
- unsigned int GetPartitionIdentifier(void) const
- {
- return partitionIdentifier;
- }
-
- void SetPartitionIdentifier(unsigned int partitionIdentifier)
- {
- this->partitionIdentifier = partitionIdentifier;
- }
-
- unsigned int GetPartitionFlags(void) const
- {
- return partitionFlags;
- }
-
- void SetPartitionFlags(unsigned int partitionFlags)
- {
- this->partitionFlags = partitionFlags;
- }
-
- unsigned int GetUnknown2(void) const
- {
- return unknown2;
- }
-
- void SetUnknown2(unsigned int unknown2)
- {
- this->unknown2 = unknown2;
- }
-
- unsigned int GetPartitionBlockSize(void) const
- {
- return partitionBlockSize;
- }
-
- void SetPartitionBlockSize(unsigned int partitionBlockSize)
- {
- this->partitionBlockSize = partitionBlockSize;
- }
-
- unsigned int GetPartitionBlockCount(void) const
- {
- return partitionBlockCount;
- }
-
- void SetPartitionBlockCount(unsigned int partitionBlockCount)
- {
- this->partitionBlockCount = partitionBlockCount;
- }
-
- unsigned int GetUnknown3(void) const
- {
- return unknown3;
- }
-
- void SetUnknown3(unsigned int unknown3)
- {
- this->unknown3 = unknown3;
- }
-
- unsigned int GetUnknown4(void) const
- {
- return unknown4;
- }
-
- void SetUnknown4(unsigned int unknown4)
- {
- this->unknown4 = unknown4;
- }
-
- const char *GetPartitionName(void) const
- {
- return partitionName;
- }
-
- void SetPartitionName(const char *partitionName)
- {
- // This isn't strictly necessary but ensures no junk is left in our PIT file.
- memset(this->partitionName, 0, 64);
-
- if (strlen(partitionName) < 64)
- strcpy(this->partitionName, partitionName);
- else
- memcpy(this->partitionName, partitionName, 63);
- }
-
- const char *GetFilename(void) const
- {
- return filename;
- }
-
- void SetFilename(const char *filename)
- {
- // This isn't strictly necessary but ensures no junk is left in our PIT file.
- memset(this->filename, 0, 32);
-
- if (strlen(partitionName) < 32)
- strcpy(this->filename, filename);
- else
- memcpy(this->filename, filename, 31);
- }
- };
-
- class PitData
- {
- public:
-
- enum
- {
- kFileIdentifier = 0x12349876,
- kHeaderDataSize = 28
- };
-
- private:
-
- unsigned int entryCount; // 0x04
- unsigned int unknown1; // 0x08
- unsigned int unknown2; // 0x0C
-
- unsigned short unknown3; // 0x10 (7508 = I9000, 7703 = I9100 & P1000)?
- unsigned short unknown4; // 0x12 (Always 65, probably flags of some sort)
-
- unsigned short unknown5; // 0x14
- unsigned short unknown6; // 0x16
-
- unsigned short unknown7; // 0x18
- unsigned short unknown8; // 0x1A
-
- // Entries start at 0x1C
- std::vector<PitEntry *> entries;
-
- static int UnpackInteger(const unsigned char *data, unsigned int offset)
- {
-#ifdef WORDS_BIGENDIAN
- int value = (data[offset] << 24) | (data[offset + 1] << 16) |
- (data[offset + 2] << 8) | data[offset + 3];
-#else
- // Flip endianness
- int value = data[offset] | (data[offset + 1] << 8) |
- (data[offset + 2] << 16) | (data[offset + 3] << 24);
-#endif
- return (value);
- }
-
- static int UnpackShort(const unsigned char *data, unsigned int offset)
- {
-#ifdef WORDS_BIGENDIAN
- short value = (data[offset] << 8) | data[offset + 1];
-#else
- // Flip endianness
- short value = data[offset] | (data[offset + 1] << 8);
-#endif
- return (value);
- }
-
- static void PackInteger(unsigned char *data, unsigned int offset, unsigned int value)
- {
-#ifdef WORDS_BIGENDIAN
- data[offset] = (value & 0xFF000000) >> 24;
- data[offset + 1] = (value & 0x00FF0000) >> 16;
- data[offset + 2] = (value & 0x0000FF00) >> 8;
- data[offset + 3] = value & 0x000000FF;
-#else
- // Flip endianness
- data[offset] = value & 0x000000FF;
- data[offset + 1] = (value & 0x0000FF00) >> 8;
- data[offset + 2] = (value & 0x00FF0000) >> 16;
- data[offset + 3] = (value & 0xFF000000) >> 24;
-#endif
- }
-
- static void PackShort(unsigned char *data, unsigned int offset, unsigned short value)
- {
-#ifdef WORDS_BIGENDIAN
- data[offset] = (value & 0xFF00) >> 8;
- data[offset + 1] = value & 0x00FF;
-#else
- // Flip endianness
- data[offset] = value & 0x00FF;
- data[offset + 1] = (value & 0xFF00) >> 8;
-#endif
- }
-
- public:
-
- PitData();
- ~PitData();
-
- bool Unpack(const unsigned char *data);
- void Pack(unsigned char *data) const;
-
- PitEntry *FindEntry(const char *partitionName);
- const PitEntry *FindEntry(const char *partitionName) const;
-
- PitEntry *FindEntry(unsigned int partitionIdentifier);
- const PitEntry *FindEntry(unsigned int partitionIdentifier) const;
-
- void Print(void) const;
-
- unsigned int GetEntryCount(void) const
- {
- return entryCount;
- }
-
- unsigned int GetUnknown1(void) const
- {
- return unknown1;
- }
-
- unsigned int GetUnknown2(void) const
- {
- return unknown2;
- }
-
- unsigned short GetUnknown3(void) const
- {
- return unknown3;
- }
-
- unsigned short GetUnknown4(void) const
- {
- return unknown4;
- }
-
- unsigned short GetUnknown5(void) const
- {
- return unknown5;
- }
-
- unsigned short GetUnknown6(void) const
- {
- return unknown6;
- }
-
- unsigned short GetUnknown7(void) const
- {
- return unknown7;
- }
-
- unsigned short GetUnknown8(void) const
- {
- return unknown8;
- }
- };
-}
-
-#endif