diff --git a/common/defaults/system_settings.ini b/common/defaults/system_settings.ini index 629c695f8..33d216373 100644 --- a/common/defaults/system_settings.ini +++ b/common/defaults/system_settings.ini @@ -1,40 +1,37 @@ ; Disable uploading error reports to Nintendo [eupld] -upload_enabled = u8!0x0 -; Enable USB 3.0 superspeed for homebrew -[usb] -usb30_force_enabled = u8!0x0 +; upload_enabled = u8!0x0 ; Control whether RO should ease its validation of NROs. ; (note: this is normally not necessary, and ips patches can be used.) [ro] -ease_nro_restriction = u8!0x0 +; ease_nro_restriction = u8!0x0 ; Atmosphere custom settings [atmosphere] ; Reboot from fatal automatically after some number of milliseconds. ; If field is not present or 0, fatal will wait indefinitely for user input. -fatal_auto_reboot_interval = u64!0x0 +; fatal_auto_reboot_interval = u64!0x0 ; Make the power menu's "reboot" button reboot to payload. ; Set to "normal" for normal reboot, "rcm" for rcm reboot. -power_menu_reboot_function = str!payload +; power_menu_reboot_function = str!payload ; Controls whether dmnt cheats should be toggled on or off by ; default. 1 = toggled on by default, 0 = toggled off by default. -dmnt_cheats_enabled_by_default = u8!0x1 +; dmnt_cheats_enabled_by_default = u8!0x1 ; Controls whether dmnt should always save cheat toggle state ; for restoration on new game launch. 1 = always save toggles, ; 0 = only save toggles if toggle file exists. -dmnt_always_save_cheat_toggles = u8!0x0 +; dmnt_always_save_cheat_toggles = u8!0x0 ; Controls whether fs.mitm should redirect save files ; to directories on the sd card. ; 0 = Do not redirect, 1 = Redirect. ; NOTE: EXPERIMENTAL ; If you do not know what you are doing, do not touch this yet. -fsmitm_redirect_saves_to_sd = u8!0x0 +; fsmitm_redirect_saves_to_sd = u8!0x0 [hbloader] ; Controls the size of the homebrew heap when running as applet. ; If set to zero, all available applet memory is used as heap. ; The default is zero. -applet_heap_size = u64!0x0 +; applet_heap_size = u64!0x0 ; Controls the amount of memory to reserve when running as applet ; for usage by other applets. This setting has no effect if -; applet_heap_size is non-zero. The default is zero. -applet_heap_reservation_size = u64!0x8000000 \ No newline at end of file +; applet_heap_size is non-zero. The default is 0x8000000. +; applet_heap_reservation_size = u64!0x8000000 \ No newline at end of file diff --git a/stratosphere/ams_mitm/source/ns_mitm/nsmitm_module.cpp b/stratosphere/ams_mitm/source/ns_mitm/nsmitm_module.cpp index 9ae1dbe1c..9d443d705 100644 --- a/stratosphere/ams_mitm/source/ns_mitm/nsmitm_module.cpp +++ b/stratosphere/ams_mitm/source/ns_mitm/nsmitm_module.cpp @@ -13,6 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#include "../amsmitm_initialization.hpp" #include "nsmitm_module.hpp" #include "ns_am_mitm_service.hpp" #include "ns_web_mitm_service.hpp" @@ -22,7 +23,7 @@ namespace ams::mitm::ns { namespace { constexpr sm::ServiceName NsAmMitmServiceName = sm::ServiceName::Encode("ns:am"); - constexpr sm::ServiceName NsWebMitmServiceName = sm::ServiceName::Encode("ns:am"); + constexpr sm::ServiceName NsWebMitmServiceName = sm::ServiceName::Encode("ns:web"); constexpr size_t MaxServers = 1; constexpr size_t MaxSessions = 5; @@ -32,6 +33,9 @@ namespace ams::mitm::ns { } void MitmModule::ThreadFunction(void *arg) { + /* Wait until initialization is complete. */ + mitm::WaitInitialized(); + /* Create mitm servers. */ if (hos::GetVersion() < hos::Version_300) { R_ASSERT(g_server_manager.RegisterMitmServer(NsAmMitmServiceName)); diff --git a/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp b/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp index 463c3f498..783315b17 100644 --- a/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp +++ b/stratosphere/ams_mitm/source/set_mitm/settings_sd_kvs.cpp @@ -291,34 +291,91 @@ namespace ams::settings::fwdbg { Result LoadSdCardKeyValueStore() { /* Open file. */ FsFile config_file; - R_TRY(ams::mitm::fs::OpenAtmosphereSdFile(&config_file, "/system_settings.ini", FsOpenMode_Read)); + if (R_FAILED(ams::mitm::fs::OpenAtmosphereSdFile(&config_file, "/system_settings.ini", FsOpenMode_Read))) { + /* It's okay if the file isn't readable/present, because we already loaded defaults. */ + return ResultSuccess(); + } ON_SCOPE_EXIT { fsFileClose(&config_file); }; Result parse_result = ResultSuccess(); util::ini::ParseFile(&config_file, &parse_result, SystemSettingsIniHandler); R_TRY(parse_result); - for (size_t i = 0; i < util::size(g_entries); i++) { - if (!g_entries[i].HasValue()) { - g_num_entries = i; - break; - } - } - - if (g_num_entries) { - std::sort(g_entries, g_entries + g_num_entries); - } - return ResultSuccess(); } + void LoadDefaultCustomSettings() { + /* Disable uploading error reports to Nintendo. */ + R_ASSERT(ParseSettingsItemValue("eupld", "upload_enabled", "u8!0x0")); + + /* Control whether RO should ease its validation of NROs. */ + /* (note: this is normally not necessary, and ips patches can be used.) */ + R_ASSERT(ParseSettingsItemValue("ro", "ease_nro_restriction", "u8!0x0")); + + /* Atmosphere custom settings. */ + + /* Reboot from fatal automatically after some number of milliseconds. */ + /* If field is not present or 0, fatal will wait indefinitely for user input. */ + R_ASSERT(ParseSettingsItemValue("atmosphere", "fatal_auto_reboot_interval", "u64!0x0")); + + /* Make the power menu's "reboot" button reboot to payload. */ + /* Set to "normal" for normal reboot, "rcm" for rcm reboot. */ + R_ASSERT(ParseSettingsItemValue("atmosphere", "power_menu_reboot_function", "str!payload")); + + /* Controls whether dmnt cheats should be toggled on or off by */ + /* default. 1 = toggled on by default, 0 = toggled off by default. */ + R_ASSERT(ParseSettingsItemValue("atmosphere", "dmnt_cheats_enabled_by_default", "u8!0x1")); + + /* Controls whether dmnt should always save cheat toggle state */ + /* for restoration on new game launch. 1 = always save toggles, */ + /* 0 = only save toggles if toggle file exists. */ + R_ASSERT(ParseSettingsItemValue("atmosphere", "dmnt_always_save_cheat_toggles", "u8!0x0")); + + /* Controls whether fs.mitm should redirect save files */ + /* to directories on the sd card. */ + /* 0 = Do not redirect, 1 = Redirect. */ + /* NOTE: EXPERIMENTAL */ + /* If you do not know what you are doing, do not touch this yet. */ + R_ASSERT(ParseSettingsItemValue("atmosphere", "fsmitm_redirect_saves_to_sd", "u8!0x0")); + + /* Hbloader custom settings. */ + + /* Controls the size of the homebrew heap when running as applet. */ + /* If set to zero, all available applet memory is used as heap. */ + /* The default is zero. */ + R_ASSERT(ParseSettingsItemValue("hbloader", "applet_heap_size", "u64!0x0")); + + /* Controls the amount of memory to reserve when running as applet */ + /* for usage by other applets. This setting has no effect if */ + /* applet_heap_size is non-zero. The default is 0x8000000. */ + R_ASSERT(ParseSettingsItemValue("hbloader", "applet_heap_reservation_size", "u64!0x8000000")); + } + } void InitializeSdCardKeyValueStore() { + /* Load in hardcoded defaults. */ + /* These will be overwritten if present on the SD card. */ + LoadDefaultCustomSettings(); + + /* Parse custom settings off the SD card. */ const Result parse_result = LoadSdCardKeyValueStore(); if (R_FAILED(parse_result)) { ams::mitm::ThrowResultForDebug(parse_result); } + + /* Determine how many custom settings are present. */ + for (size_t i = 0; i < util::size(g_entries); i++) { + if (!g_entries[i].HasValue()) { + g_num_entries = i; + break; + } + } + + /* Ensure that the custom settings entries are sorted. */ + if (g_num_entries) { + std::sort(g_entries, g_entries + g_num_entries); + } } Result GetSdCardKeyValueStoreSettingsItemValueSize(size_t *out_size, const char *name, const char *key) {