summaryrefslogtreecommitdiff
path: root/src/core/file_sys
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/file_sys')
-rw-r--r--src/core/file_sys/content_manager.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/core/file_sys/content_manager.cpp b/src/core/file_sys/content_manager.cpp
new file mode 100644
index 000000000..fd53978fc
--- /dev/null
+++ b/src/core/file_sys/content_manager.cpp
@@ -0,0 +1,25 @@
+#include "core/system.h"
+#include "core/file_sys/registered_cache.h"
+#include "core/file_sys/content_archive.h"
+#include "core/crypto/key_manager.h"
+
+bool ContentManager::IsFirmwareAvailable() {
+ constexpr u64 MiiEditId = 0x0100000000001009; // Mii Edit applet ID
+ constexpr u64 QLaunchId = 0x0100000000001000; // Home Menu applet ID
+
+ auto& system = Core::System::GetInstance();
+ auto bis_system = system.GetFileSystemController().GetSystemNANDContents();
+ if (!bis_system) {
+ return false;
+ }
+
+ auto mii_applet_nca = bis_system->GetEntry(MiiEditId, FileSys::ContentRecordType::Program);
+ auto qlaunch_nca = bis_system->GetEntry(QLaunchId, FileSys::ContentRecordType::Program);
+
+ if (!mii_applet_nca || !qlaunch_nca) {
+ return false;
+ }
+
+ // Also check for essential keys
+ return Core::Crypto::KeyManager::Instance().IsFirmwareAvailable();
+} \ No newline at end of file