dolphin/Source/Core/DiscIO/NANDImporter.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

61 lines
1.7 KiB
C
Raw Normal View History

2017-03-19 01:00:49 -06:00
// Copyright 2017 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
2017-03-19 01:00:49 -06:00
#pragma once
#include <functional>
#include <string>
#include <vector>
#include "Common/CommonTypes.h"
namespace DiscIO
{
class NANDImporter final
{
public:
NANDImporter();
~NANDImporter();
// Extract a NAND image to the configured NAND root.
// If the associated OTP/SEEPROM dump (keys.bin) is not included in the image,
// get_otp_dump_path will be called to get a path to it.
void ImportNANDBin(const std::string& path_to_bin, std::function<void()> update_callback,
std::function<std::string()> get_otp_dump_path);
bool ExtractCertificates(const std::string& nand_root);
2017-03-19 01:00:49 -06:00
private:
#pragma pack(push, 1)
struct NANDFSTEntry
{
char name[12];
2017-03-19 01:00:49 -06:00
u8 mode; // 0x0C
u8 attr; // 0x0D
u16 sub; // 0x0E
u16 sib; // 0x10
u32 size; // 0x12
u16 x1; // 0x16
u16 uid; // 0x18
u16 gid; // 0x1A
u32 x3; // 0x1C
};
#pragma pack(pop)
bool ReadNANDBin(const std::string& path_to_bin, std::function<std::string()> get_otp_dump_path);
2017-03-19 01:00:49 -06:00
void FindSuperblock();
std::string GetPath(const NANDFSTEntry& entry, const std::string& parent_path);
2017-05-14 18:47:02 -06:00
std::string FormatDebugString(const NANDFSTEntry& entry);
2017-03-19 01:00:49 -06:00
void ProcessEntry(u16 entry_number, const std::string& parent_path);
void ProcessFile(const NANDFSTEntry& entry, const std::string& parent_path);
void ProcessDirectory(const NANDFSTEntry& entry, const std::string& parent_path);
void ExportKeys(const std::string& nand_root);
std::vector<u8> m_nand;
std::vector<u8> m_nand_keys;
size_t m_nand_fat_offset = 0;
size_t m_nand_fst_offset = 0;
std::function<void()> m_update_callback;
2017-05-14 18:47:02 -06:00
size_t m_nand_root_length = 0;
2017-03-19 01:00:49 -06:00
};
} // namespace DiscIO