diff --git a/include/stratosphere.hpp b/include/stratosphere.hpp index 4227326d..5ba88a04 100644 --- a/include/stratosphere.hpp +++ b/include/stratosphere.hpp @@ -41,12 +41,11 @@ #include "stratosphere/results.hpp" -#include "stratosphere/title_ids.hpp" - #include "stratosphere/on_crash.hpp" #include "stratosphere/cfg.hpp" #include "stratosphere/hid.hpp" +#include "stratosphere/ncm.hpp" #include "stratosphere/pm.hpp" #include "stratosphere/rnd.hpp" #include "stratosphere/util.hpp" \ No newline at end of file diff --git a/include/stratosphere/mitm/imitmserviceobject.hpp b/include/stratosphere/mitm/imitmserviceobject.hpp index 83351a04..e717ad2f 100644 --- a/include/stratosphere/mitm/imitmserviceobject.hpp +++ b/include/stratosphere/mitm/imitmserviceobject.hpp @@ -19,23 +19,24 @@ #include #include +#include "../ncm.hpp" #include "mitm_query_service.hpp" class IMitmServiceObject : public IServiceObject { protected: std::shared_ptr forward_service; u64 process_id = 0; - u64 title_id = 0; + sts::ncm::TitleId title_id = sts::ncm::TitleId::Invalid; public: IMitmServiceObject(std::shared_ptr s, u64 pid) : forward_service(s), process_id(pid) { MitmQueryUtils::GetAssociatedTidForPid(this->process_id, &this->title_id); } - virtual u64 GetTitleId() { + virtual sts::ncm::TitleId GetTitleId() const { return this->title_id; } - virtual u64 GetProcessId() { + virtual u64 GetProcessId() const { return this->process_id; } diff --git a/include/stratosphere/mitm/mitm_query_service.hpp b/include/stratosphere/mitm/mitm_query_service.hpp index b60f67b1..28608c8b 100644 --- a/include/stratosphere/mitm/mitm_query_service.hpp +++ b/include/stratosphere/mitm/mitm_query_service.hpp @@ -17,11 +17,12 @@ #pragma once #include #include +#include "../ncm.hpp" namespace MitmQueryUtils { - Result GetAssociatedTidForPid(u64 pid, u64 *tid); + Result GetAssociatedTidForPid(u64 pid, sts::ncm::TitleId *tid); - void AssociatePidToTid(u64 pid, u64 tid); + void AssociatePidToTid(u64 pid, sts::ncm::TitleId tid); } template @@ -34,12 +35,12 @@ class MitmQueryService : public IServiceObject { protected: void ShouldMitm(Out should_mitm, u64 pid) { should_mitm.SetValue(false); - u64 tid = 0; + sts::ncm::TitleId tid = sts::ncm::TitleId::Invalid; if (R_SUCCEEDED(MitmQueryUtils::GetAssociatedTidForPid(pid, &tid))) { should_mitm.SetValue(T::ShouldMitm(pid, tid)); } } - void AssociatePidToTid(u64 pid, u64 tid) { + void AssociatePidToTid(u64 pid, sts::ncm::TitleId tid) { MitmQueryUtils::AssociatePidToTid(pid, tid); } public: diff --git a/include/stratosphere/ncm/ncm_types.hpp b/include/stratosphere/ncm/ncm_types.hpp index e86295a2..8edf4a83 100644 --- a/include/stratosphere/ncm/ncm_types.hpp +++ b/include/stratosphere/ncm/ncm_types.hpp @@ -37,45 +37,395 @@ namespace sts::ncm { inline explicit operator u64() const { return this->value; } - }; - static constexpr TitleId InvalidTitleId = {}; - inline bool operator==(const TitleId &lhs, const TitleId &rhs) { + /* Invalid Title ID. */ + static const TitleId Invalid; + + /* System Modules. */ + static const TitleId SystemStart; + + static const TitleId Fs; + static const TitleId Loader; + static const TitleId Ncm; + static const TitleId Pm; + static const TitleId Sm; + static const TitleId Boot; + static const TitleId Usb; + static const TitleId Tma; + static const TitleId Boot2; + static const TitleId Settings; + static const TitleId Bus; + static const TitleId Bluetooth; + static const TitleId Bcat; + static const TitleId Dmnt; + static const TitleId Friends; + static const TitleId Nifm; + static const TitleId Ptm; + static const TitleId Shell; + static const TitleId BsdSockets; + static const TitleId Hid; + static const TitleId Audio; + static const TitleId LogManager; + static const TitleId Wlan; + static const TitleId Cs; + static const TitleId Ldn; + static const TitleId NvServices; + static const TitleId Pcv; + static const TitleId Ppc; + static const TitleId NvnFlinger; + static const TitleId Pcie; + static const TitleId Account; + static const TitleId Ns; + static const TitleId Nfc; + static const TitleId Psc; + static const TitleId CapSrv; + static const TitleId Am; + static const TitleId Ssl; + static const TitleId Nim; + static const TitleId Cec; + static const TitleId Tspm; + static const TitleId Spl; + static const TitleId Lbl; + static const TitleId Btm; + static const TitleId Erpt; + static const TitleId Time; + static const TitleId Vi; + static const TitleId Pctl; + static const TitleId Npns; + static const TitleId Eupld; + static const TitleId Arp; + static const TitleId Glue; + static const TitleId Eclct; + static const TitleId Es; + static const TitleId Fatal; + static const TitleId Grc; + static const TitleId Creport; + static const TitleId Ro; + static const TitleId Profiler; + static const TitleId Sdb; + static const TitleId Migration; + static const TitleId Jit; + static const TitleId JpegDec; + static const TitleId SafeMode; + static const TitleId Olsc; + static const TitleId Dt; + static const TitleId Nd; + + static const TitleId SystemEnd; + + /* System Data Archives. */ + static const TitleId ArchiveStart; + static const TitleId ArchiveCertStore; + static const TitleId ArchiveErrorMessage; + static const TitleId ArchiveMiiModel; + static const TitleId ArchiveBrowserDll; + static const TitleId ArchiveHelp; + static const TitleId ArchiveSharedFont; + static const TitleId ArchiveNgWord; + static const TitleId ArchiveSsidList; + static const TitleId ArchiveDictionary; + static const TitleId ArchiveSystemVersion; + static const TitleId ArchiveAvatarImage; + static const TitleId ArchiveLocalNews; + static const TitleId ArchiveEula; + static const TitleId ArchiveUrlBlackList; + static const TitleId ArchiveTimeZoneBinar; + static const TitleId ArchiveCertStoreCruiser; + static const TitleId ArchiveFontNintendoExtension; + static const TitleId ArchiveFontStandard; + static const TitleId ArchiveFontKorean; + static const TitleId ArchiveFontChineseTraditional; + static const TitleId ArchiveFontChineseSimple; + static const TitleId ArchiveFontBfcpx; + static const TitleId ArchiveSystemUpdate; + + static const TitleId ArchiveFirmwareDebugSettings; + static const TitleId ArchiveBootImagePackage; + static const TitleId ArchiveBootImagePackageSafe; + static const TitleId ArchiveBootImagePackageExFat; + static const TitleId ArchiveBootImagePackageExFatSafe; + static const TitleId ArchiveFatalMessage; + static const TitleId ArchiveControllerIcon; + static const TitleId ArchivePlatformConfigIcosa; + static const TitleId ArchivePlatformConfigCopper; + static const TitleId ArchivePlatformConfigHoag; + static const TitleId ArchiveControllerFirmware; + static const TitleId ArchiveNgWord2; + static const TitleId ArchivePlatformConfigIcosaMariko; + static const TitleId ArchiveApplicationBlackList; + static const TitleId ArchiveRebootlessSystemUpdateVersion; + static const TitleId ArchiveContentActionTable; + + static const TitleId ArchiveEnd; + + /* System Applets. */ + static const TitleId AppletStart; + + static const TitleId AppletQlaunch; + static const TitleId AppletAuth; + static const TitleId AppletCabinet; + static const TitleId AppletController; + static const TitleId AppletDataErase; + static const TitleId AppletError; + static const TitleId AppletNetConnect; + static const TitleId AppletPlayerSelect; + static const TitleId AppletSwkbd; + static const TitleId AppletMiiEdit; + static const TitleId AppletWeb; + static const TitleId AppletShop; + static const TitleId AppletOverlayDisp; + static const TitleId AppletPhotoViewer; + static const TitleId AppletSet; + static const TitleId AppletOfflineWeb; + static const TitleId AppletLoginShare; + static const TitleId AppletWifiWebAuth; + static const TitleId AppletStarter; + static const TitleId AppletMyPage; + static const TitleId AppletPlayReport; + static const TitleId AppletMaintenanceMenu; + + static const TitleId AppletGift; + static const TitleId AppletDummyShop; + static const TitleId AppletUserMigration; + static const TitleId AppletEncounter; + + static const TitleId AppletStory; + + static const TitleId AppletEnd; + + /* Debug Applets. */ + + /* Debug Modules. */ + + /* Factory Setup. */ + + /* Applications. */ + static const TitleId ApplicationStart; + static const TitleId ApplicationEnd; + + /* Atmosphere Extensions. */ + static const TitleId AtmosphereMitm; + }; + + /* Invalid Title ID. */ + inline constexpr const TitleId TitleId::Invalid = {}; + + /* System Modules. */ + inline constexpr const TitleId TitleId::SystemStart = { 0x0100000000000000ul }; + + inline constexpr const TitleId TitleId::Fs = { 0x0100000000000000ul }; + inline constexpr const TitleId TitleId::Loader = { 0x0100000000000001ul }; + inline constexpr const TitleId TitleId::Ncm = { 0x0100000000000002ul }; + inline constexpr const TitleId TitleId::Pm = { 0x0100000000000003ul }; + inline constexpr const TitleId TitleId::Sm = { 0x0100000000000004ul }; + inline constexpr const TitleId TitleId::Boot = { 0x0100000000000005ul }; + inline constexpr const TitleId TitleId::Usb = { 0x0100000000000006ul }; + inline constexpr const TitleId TitleId::Tma = { 0x0100000000000007ul }; + inline constexpr const TitleId TitleId::Boot2 = { 0x0100000000000008ul }; + inline constexpr const TitleId TitleId::Settings = { 0x0100000000000009ul }; + inline constexpr const TitleId TitleId::Bus = { 0x010000000000000Aul }; + inline constexpr const TitleId TitleId::Bluetooth = { 0x010000000000000Bul }; + inline constexpr const TitleId TitleId::Bcat = { 0x010000000000000Cul }; + inline constexpr const TitleId TitleId::Dmnt = { 0x010000000000000Dul }; + inline constexpr const TitleId TitleId::Friends = { 0x010000000000000Eul }; + inline constexpr const TitleId TitleId::Nifm = { 0x010000000000000Ful }; + inline constexpr const TitleId TitleId::Ptm = { 0x0100000000000010ul }; + inline constexpr const TitleId TitleId::Shell = { 0x0100000000000011ul }; + inline constexpr const TitleId TitleId::BsdSockets = { 0x0100000000000012ul }; + inline constexpr const TitleId TitleId::Hid = { 0x0100000000000013ul }; + inline constexpr const TitleId TitleId::Audio = { 0x0100000000000014ul }; + inline constexpr const TitleId TitleId::LogManager = { 0x0100000000000015ul }; + inline constexpr const TitleId TitleId::Wlan = { 0x0100000000000016ul }; + inline constexpr const TitleId TitleId::Cs = { 0x0100000000000017ul }; + inline constexpr const TitleId TitleId::Ldn = { 0x0100000000000018ul }; + inline constexpr const TitleId TitleId::NvServices = { 0x0100000000000019ul }; + inline constexpr const TitleId TitleId::Pcv = { 0x010000000000001Aul }; + inline constexpr const TitleId TitleId::Ppc = { 0x010000000000001Bul }; + inline constexpr const TitleId TitleId::NvnFlinger = { 0x010000000000001Cul }; + inline constexpr const TitleId TitleId::Pcie = { 0x010000000000001Dul }; + inline constexpr const TitleId TitleId::Account = { 0x010000000000001Eul }; + inline constexpr const TitleId TitleId::Ns = { 0x010000000000001Ful }; + inline constexpr const TitleId TitleId::Nfc = { 0x0100000000000020ul }; + inline constexpr const TitleId TitleId::Psc = { 0x0100000000000021ul }; + inline constexpr const TitleId TitleId::CapSrv = { 0x0100000000000022ul }; + inline constexpr const TitleId TitleId::Am = { 0x0100000000000023ul }; + inline constexpr const TitleId TitleId::Ssl = { 0x0100000000000024ul }; + inline constexpr const TitleId TitleId::Nim = { 0x0100000000000025ul }; + inline constexpr const TitleId TitleId::Cec = { 0x0100000000000026ul }; + inline constexpr const TitleId TitleId::Tspm = { 0x0100000000000027ul }; + inline constexpr const TitleId TitleId::Spl = { 0x0100000000000028ul }; + inline constexpr const TitleId TitleId::Lbl = { 0x0100000000000029ul }; + inline constexpr const TitleId TitleId::Btm = { 0x010000000000002Aul }; + inline constexpr const TitleId TitleId::Erpt = { 0x010000000000002Bul }; + inline constexpr const TitleId TitleId::Time = { 0x010000000000002Cul }; + inline constexpr const TitleId TitleId::Vi = { 0x010000000000002Dul }; + inline constexpr const TitleId TitleId::Pctl = { 0x010000000000002Eul }; + inline constexpr const TitleId TitleId::Npns = { 0x010000000000002Ful }; + inline constexpr const TitleId TitleId::Eupld = { 0x0100000000000030ul }; + inline constexpr const TitleId TitleId::Arp = { 0x0100000000000031ul }; + inline constexpr const TitleId TitleId::Glue = { 0x0100000000000031ul }; + inline constexpr const TitleId TitleId::Eclct = { 0x0100000000000032ul }; + inline constexpr const TitleId TitleId::Es = { 0x0100000000000033ul }; + inline constexpr const TitleId TitleId::Fatal = { 0x0100000000000034ul }; + inline constexpr const TitleId TitleId::Grc = { 0x0100000000000035ul }; + inline constexpr const TitleId TitleId::Creport = { 0x0100000000000036ul }; + inline constexpr const TitleId TitleId::Ro = { 0x0100000000000037ul }; + inline constexpr const TitleId TitleId::Profiler = { 0x0100000000000038ul }; + inline constexpr const TitleId TitleId::Sdb = { 0x0100000000000039ul }; + inline constexpr const TitleId TitleId::Migration = { 0x010000000000003Aul }; + inline constexpr const TitleId TitleId::Jit = { 0x010000000000003Bul }; + inline constexpr const TitleId TitleId::JpegDec = { 0x010000000000003Cul }; + inline constexpr const TitleId TitleId::SafeMode = { 0x010000000000003Dul }; + inline constexpr const TitleId TitleId::Olsc = { 0x010000000000003Eul }; + inline constexpr const TitleId TitleId::Dt = { 0x010000000000003Ful }; + inline constexpr const TitleId TitleId::Nd = { 0x0100000000000040ul }; + + inline constexpr const TitleId TitleId::SystemEnd = { 0x01000000000007FFul }; + + /* System Data Archives. */ + inline constexpr const TitleId TitleId::ArchiveStart = { 0x0100000000000800ul }; + inline constexpr const TitleId TitleId::ArchiveCertStore = { 0x0100000000000800ul }; + inline constexpr const TitleId TitleId::ArchiveErrorMessage = { 0x0100000000000801ul }; + inline constexpr const TitleId TitleId::ArchiveMiiModel = { 0x0100000000000802ul }; + inline constexpr const TitleId TitleId::ArchiveBrowserDll = { 0x0100000000000803ul }; + inline constexpr const TitleId TitleId::ArchiveHelp = { 0x0100000000000804ul }; + inline constexpr const TitleId TitleId::ArchiveSharedFont = { 0x0100000000000805ul }; + inline constexpr const TitleId TitleId::ArchiveNgWord = { 0x0100000000000806ul }; + inline constexpr const TitleId TitleId::ArchiveSsidList = { 0x0100000000000807ul }; + inline constexpr const TitleId TitleId::ArchiveDictionary = { 0x0100000000000808ul }; + inline constexpr const TitleId TitleId::ArchiveSystemVersion = { 0x0100000000000809ul }; + inline constexpr const TitleId TitleId::ArchiveAvatarImage = { 0x010000000000080Aul }; + inline constexpr const TitleId TitleId::ArchiveLocalNews = { 0x010000000000080Bul }; + inline constexpr const TitleId TitleId::ArchiveEula = { 0x010000000000080Cul }; + inline constexpr const TitleId TitleId::ArchiveUrlBlackList = { 0x010000000000080Dul }; + inline constexpr const TitleId TitleId::ArchiveTimeZoneBinar = { 0x010000000000080Eul }; + inline constexpr const TitleId TitleId::ArchiveCertStoreCruiser = { 0x010000000000080Ful }; + inline constexpr const TitleId TitleId::ArchiveFontNintendoExtension = { 0x0100000000000810ul }; + inline constexpr const TitleId TitleId::ArchiveFontStandard = { 0x0100000000000811ul }; + inline constexpr const TitleId TitleId::ArchiveFontKorean = { 0x0100000000000812ul }; + inline constexpr const TitleId TitleId::ArchiveFontChineseTraditional = { 0x0100000000000813ul }; + inline constexpr const TitleId TitleId::ArchiveFontChineseSimple = { 0x0100000000000814ul }; + inline constexpr const TitleId TitleId::ArchiveFontBfcpx = { 0x0100000000000815ul }; + inline constexpr const TitleId TitleId::ArchiveSystemUpdate = { 0x0100000000000816ul }; + + inline constexpr const TitleId TitleId::ArchiveFirmwareDebugSettings = { 0x0100000000000818ul }; + inline constexpr const TitleId TitleId::ArchiveBootImagePackage = { 0x0100000000000819ul }; + inline constexpr const TitleId TitleId::ArchiveBootImagePackageSafe = { 0x010000000000081Aul }; + inline constexpr const TitleId TitleId::ArchiveBootImagePackageExFat = { 0x010000000000081Bul }; + inline constexpr const TitleId TitleId::ArchiveBootImagePackageExFatSafe = { 0x010000000000081Cul }; + inline constexpr const TitleId TitleId::ArchiveFatalMessage = { 0x010000000000081Dul }; + inline constexpr const TitleId TitleId::ArchiveControllerIcon = { 0x010000000000081Eul }; + inline constexpr const TitleId TitleId::ArchivePlatformConfigIcosa = { 0x010000000000081Ful }; + inline constexpr const TitleId TitleId::ArchivePlatformConfigCopper = { 0x0100000000000820ul }; + inline constexpr const TitleId TitleId::ArchivePlatformConfigHoag = { 0x0100000000000821ul }; + inline constexpr const TitleId TitleId::ArchiveControllerFirmware = { 0x0100000000000822ul }; + inline constexpr const TitleId TitleId::ArchiveNgWord2 = { 0x0100000000000823ul }; + inline constexpr const TitleId TitleId::ArchivePlatformConfigIcosaMariko = { 0x0100000000000824ul }; + inline constexpr const TitleId TitleId::ArchiveApplicationBlackList = { 0x0100000000000825ul }; + inline constexpr const TitleId TitleId::ArchiveRebootlessSystemUpdateVersion = { 0x0100000000000826ul }; + inline constexpr const TitleId TitleId::ArchiveContentActionTable = { 0x0100000000000827ul }; + + inline constexpr const TitleId TitleId::ArchiveEnd = { 0x0100000000000FFFul }; + + /* System Applets. */ + inline constexpr const TitleId TitleId::AppletStart = { 0x0100000000001000ul }; + + inline constexpr const TitleId TitleId::AppletQlaunch = { 0x0100000000001000ul }; + inline constexpr const TitleId TitleId::AppletAuth = { 0x0100000000001001ul }; + inline constexpr const TitleId TitleId::AppletCabinet = { 0x0100000000001002ul }; + inline constexpr const TitleId TitleId::AppletController = { 0x0100000000001003ul }; + inline constexpr const TitleId TitleId::AppletDataErase = { 0x0100000000001004ul }; + inline constexpr const TitleId TitleId::AppletError = { 0x0100000000001005ul }; + inline constexpr const TitleId TitleId::AppletNetConnect = { 0x0100000000001006ul }; + inline constexpr const TitleId TitleId::AppletPlayerSelect = { 0x0100000000001007ul }; + inline constexpr const TitleId TitleId::AppletSwkbd = { 0x0100000000001008ul }; + inline constexpr const TitleId TitleId::AppletMiiEdit = { 0x0100000000001009ul }; + inline constexpr const TitleId TitleId::AppletWeb = { 0x010000000000100Aul }; + inline constexpr const TitleId TitleId::AppletShop = { 0x010000000000100Bul }; + inline constexpr const TitleId TitleId::AppletOverlayDisp = { 0x010000000000100Cul }; + inline constexpr const TitleId TitleId::AppletPhotoViewer = { 0x010000000000100Dul }; + inline constexpr const TitleId TitleId::AppletSet = { 0x010000000000100Eul }; + inline constexpr const TitleId TitleId::AppletOfflineWeb = { 0x010000000000100Ful }; + inline constexpr const TitleId TitleId::AppletLoginShare = { 0x0100000000001010ul }; + inline constexpr const TitleId TitleId::AppletWifiWebAuth = { 0x0100000000001011ul }; + inline constexpr const TitleId TitleId::AppletStarter = { 0x0100000000001012ul }; + inline constexpr const TitleId TitleId::AppletMyPage = { 0x0100000000001013ul }; + inline constexpr const TitleId TitleId::AppletPlayReport = { 0x0100000000001014ul }; + inline constexpr const TitleId TitleId::AppletMaintenanceMenu = { 0x0100000000001015ul }; + + inline constexpr const TitleId TitleId::AppletGift = { 0x010000000000101Aul }; + inline constexpr const TitleId TitleId::AppletDummyShop = { 0x010000000000101Bul }; + inline constexpr const TitleId TitleId::AppletUserMigration = { 0x010000000000101Cul }; + inline constexpr const TitleId TitleId::AppletEncounter = { 0x010000000000101Dul }; + + inline constexpr const TitleId TitleId::AppletStory = { 0x0100000000001020ul }; + + inline constexpr const TitleId TitleId::AppletEnd = { 0x0100000000001FFFul }; + + /* Debug Applets. */ + + /* Debug Modules. */ + + /* Factory Setup. */ + + /* Applications. */ + inline constexpr const TitleId TitleId::ApplicationStart = { 0x0100000000010000ul }; + inline constexpr const TitleId TitleId::ApplicationEnd = { 0x01FFFFFFFFFFFFFFul }; + + /* Atmosphere Extensions. */ + inline constexpr const TitleId TitleId::AtmosphereMitm = { 0x010041544D530000ul }; + + inline constexpr bool operator==(const TitleId &lhs, const TitleId &rhs) { return lhs.value == rhs.value; } - inline bool operator!=(const TitleId &lhs, const TitleId &rhs) { + inline constexpr bool operator!=(const TitleId &lhs, const TitleId &rhs) { return lhs.value != rhs.value; } - inline bool operator<(const TitleId &lhs, const TitleId &rhs) { + inline constexpr bool operator<(const TitleId &lhs, const TitleId &rhs) { return lhs.value < rhs.value; } - inline bool operator<=(const TitleId &lhs, const TitleId &rhs) { + inline constexpr bool operator<=(const TitleId &lhs, const TitleId &rhs) { return lhs.value <= rhs.value; } - inline bool operator>(const TitleId &lhs, const TitleId &rhs) { + inline constexpr bool operator>(const TitleId &lhs, const TitleId &rhs) { return lhs.value > rhs.value; } - inline bool operator>=(const TitleId &lhs, const TitleId &rhs) { + inline constexpr bool operator>=(const TitleId &lhs, const TitleId &rhs) { return lhs.value >= rhs.value; } + inline constexpr bool IsSystemTitleId(const TitleId &title_id) { + return TitleId::SystemStart <= title_id && title_id <= TitleId::SystemEnd; + } + + inline constexpr bool IsArchiveTitleId(const TitleId &title_id) { + return TitleId::ArchiveStart <= title_id && title_id <= TitleId::ArchiveEnd; + } + + inline constexpr bool IsAppletTitleId(const TitleId &title_id) { + return TitleId::AppletStart <= title_id && title_id <= TitleId::AppletEnd; + } + + inline constexpr bool IsApplicationTitleId(const TitleId &title_id) { + return TitleId::ApplicationStart <= title_id && title_id <= TitleId::ApplicationEnd; + } + static_assert(sizeof(TitleId) == sizeof(u64) && std::is_pod::value, "TitleId definition!"); /* Title Location. */ struct TitleLocation { TitleId title_id; u8 storage_id; - }; - constexpr TitleLocation MakeTitleLocation(TitleId title_id, StorageId storage_id) { - TitleLocation loc = { .title_id = title_id, .storage_id = static_cast(storage_id) }; - return loc; - } + static constexpr TitleLocation Make(TitleId title_id, StorageId storage_id) { + return { .title_id = title_id, .storage_id = static_cast(storage_id), }; + } + }; static_assert(sizeof(TitleLocation) == 0x10 && std::is_pod::value, "TitleLocation definition!"); diff --git a/include/stratosphere/title_ids.hpp b/include/stratosphere/title_ids.hpp deleted file mode 100644 index 52531d5d..00000000 --- a/include/stratosphere/title_ids.hpp +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2018-2019 Atmosphère-NX - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include - -/* System Modules. */ -static constexpr u64 TitleId_SystemStart = 0x0100000000000000ul; - -static constexpr u64 TitleId_Fs = 0x0100000000000000ul; -static constexpr u64 TitleId_Loader = 0x0100000000000001ul; -static constexpr u64 TitleId_Ncm = 0x0100000000000002ul; -static constexpr u64 TitleId_Pm = 0x0100000000000003ul; -static constexpr u64 TitleId_Sm = 0x0100000000000004ul; -static constexpr u64 TitleId_Boot = 0x0100000000000005ul; -static constexpr u64 TitleId_Usb = 0x0100000000000006ul; -static constexpr u64 TitleId_Tma = 0x0100000000000007ul; -static constexpr u64 TitleId_Boot2 = 0x0100000000000008ul; -static constexpr u64 TitleId_Settings = 0x0100000000000009ul; -static constexpr u64 TitleId_Bus = 0x010000000000000Aul; -static constexpr u64 TitleId_Bluetooth = 0x010000000000000Bul; -static constexpr u64 TitleId_Bcat = 0x010000000000000Cul; -static constexpr u64 TitleId_Dmnt = 0x010000000000000Dul; -static constexpr u64 TitleId_Friends = 0x010000000000000Eul; -static constexpr u64 TitleId_Nifm = 0x010000000000000Ful; -static constexpr u64 TitleId_Ptm = 0x0100000000000010ul; -static constexpr u64 TitleId_Shell = 0x0100000000000011ul; -static constexpr u64 TitleId_BsdSockets = 0x0100000000000012ul; -static constexpr u64 TitleId_Hid = 0x0100000000000013ul; -static constexpr u64 TitleId_Audio = 0x0100000000000014ul; -static constexpr u64 TitleId_LogManager = 0x0100000000000015ul; -static constexpr u64 TitleId_Wlan = 0x0100000000000016ul; -static constexpr u64 TitleId_Cs = 0x0100000000000017ul; -static constexpr u64 TitleId_Ldn = 0x0100000000000018ul; -static constexpr u64 TitleId_NvServices = 0x0100000000000019ul; -static constexpr u64 TitleId_Pcv = 0x010000000000001Aul; -static constexpr u64 TitleId_Ppc = 0x010000000000001Bul; -static constexpr u64 TitleId_NvnFlinger = 0x010000000000001Cul; -static constexpr u64 TitleId_Pcie = 0x010000000000001Dul; -static constexpr u64 TitleId_Account = 0x010000000000001Eul; -static constexpr u64 TitleId_Ns = 0x010000000000001Ful; -static constexpr u64 TitleId_Nfc = 0x0100000000000020ul; -static constexpr u64 TitleId_Psc = 0x0100000000000021ul; -static constexpr u64 TitleId_CapSrv = 0x0100000000000022ul; -static constexpr u64 TitleId_Am = 0x0100000000000023ul; -static constexpr u64 TitleId_Ssl = 0x0100000000000024ul; -static constexpr u64 TitleId_Nim = 0x0100000000000025ul; -static constexpr u64 TitleId_Cec = 0x0100000000000026ul; -static constexpr u64 TitleId_Tspm = 0x0100000000000027ul; -static constexpr u64 TitleId_Spl = 0x0100000000000028ul; -static constexpr u64 TitleId_Lbl = 0x0100000000000029ul; -static constexpr u64 TitleId_Btm = 0x010000000000002Aul; -static constexpr u64 TitleId_Erpt = 0x010000000000002Bul; -static constexpr u64 TitleId_Time = 0x010000000000002Cul; -static constexpr u64 TitleId_Vi = 0x010000000000002Dul; -static constexpr u64 TitleId_Pctl = 0x010000000000002Eul; -static constexpr u64 TitleId_Npns = 0x010000000000002Ful; -static constexpr u64 TitleId_Eupld = 0x0100000000000030ul; -static constexpr u64 TitleId_Arp = 0x0100000000000031ul; -static constexpr u64 TitleId_Glue = 0x0100000000000031ul; -static constexpr u64 TitleId_Eclct = 0x0100000000000032ul; -static constexpr u64 TitleId_Es = 0x0100000000000033ul; -static constexpr u64 TitleId_Fatal = 0x0100000000000034ul; -static constexpr u64 TitleId_Grc = 0x0100000000000035ul; -static constexpr u64 TitleId_Creport = 0x0100000000000036ul; -static constexpr u64 TitleId_Ro = 0x0100000000000037ul; -static constexpr u64 TitleId_Profiler = 0x0100000000000038ul; -static constexpr u64 TitleId_Sdb = 0x0100000000000039ul; -static constexpr u64 TitleId_Migration = 0x010000000000003Aul; -static constexpr u64 TitleId_Jit = 0x010000000000003Bul; -static constexpr u64 TitleId_JpegDec = 0x010000000000003Cul; -static constexpr u64 TitleId_SafeMode = 0x010000000000003Dul; -static constexpr u64 TitleId_Olsc = 0x010000000000003Eul; -static constexpr u64 TitleId_Dt = 0x010000000000003Ful; -static constexpr u64 TitleId_Nd = 0x0100000000000040ul; - -static constexpr u64 TitleId_SystemEnd = 0x01000000000007FFul; - -/* System Data Archives. */ -static constexpr u64 TitleId_ArchiveStart = 0x0100000000000800ul; -static constexpr u64 TitleId_ArchiveCertStore = 0x0100000000000800ul; -static constexpr u64 TitleId_ArchiveErrorMessage = 0x0100000000000801ul; -static constexpr u64 TitleId_ArchiveMiiModel = 0x0100000000000802ul; -static constexpr u64 TitleId_ArchiveBrowserDll = 0x0100000000000803ul; -static constexpr u64 TitleId_ArchiveHelp = 0x0100000000000804ul; -static constexpr u64 TitleId_ArchiveSharedFont = 0x0100000000000805ul; -static constexpr u64 TitleId_ArchiveNgWord = 0x0100000000000806ul; -static constexpr u64 TitleId_ArchiveSsidList = 0x0100000000000807ul; -static constexpr u64 TitleId_ArchiveDictionary = 0x0100000000000808ul; -static constexpr u64 TitleId_ArchiveSystemVersion = 0x0100000000000809ul; -static constexpr u64 TitleId_ArchiveAvatarImage = 0x010000000000080Aul; -static constexpr u64 TitleId_ArchiveLocalNews = 0x010000000000080Bul; -static constexpr u64 TitleId_ArchiveEula = 0x010000000000080Cul; -static constexpr u64 TitleId_ArchiveUrlBlackList = 0x010000000000080Dul; -static constexpr u64 TitleId_ArchiveTimeZoneBinar = 0x010000000000080Eul; -static constexpr u64 TitleId_ArchiveCertStoreCruiser = 0x010000000000080Ful; -static constexpr u64 TitleId_ArchiveFontNintendoExtension = 0x0100000000000810ul; -static constexpr u64 TitleId_ArchiveFontStandard = 0x0100000000000811ul; -static constexpr u64 TitleId_ArchiveFontKorean = 0x0100000000000812ul; -static constexpr u64 TitleId_ArchiveFontChineseTraditional = 0x0100000000000813ul; -static constexpr u64 TitleId_ArchiveFontChineseSimple = 0x0100000000000814ul; -static constexpr u64 TitleId_ArchiveFontBfcpx = 0x0100000000000815ul; -static constexpr u64 TitleId_ArchiveSystemUpdate = 0x0100000000000816ul; - -static constexpr u64 TitleId_ArchiveFirmwareDebugSettings = 0x0100000000000818ul; -static constexpr u64 TitleId_ArchiveBootImagePackage = 0x0100000000000819ul; -static constexpr u64 TitleId_ArchiveBootImagePackageSafe = 0x010000000000081Aul; -static constexpr u64 TitleId_ArchiveBootImagePackageExFat = 0x010000000000081Bul; -static constexpr u64 TitleId_ArchiveBootImagePackageExFatSafe = 0x010000000000081Cul; -static constexpr u64 TitleId_ArchiveFatalMessage = 0x010000000000081Dul; -static constexpr u64 TitleId_ArchiveControllerIcon = 0x010000000000081Eul; -static constexpr u64 TitleId_ArchivePlatformConfigIcosa = 0x010000000000081Ful; -static constexpr u64 TitleId_ArchivePlatformConfigCopper = 0x0100000000000820ul; -static constexpr u64 TitleId_ArchivePlatformConfigHoag = 0x0100000000000821ul; -static constexpr u64 TitleId_ArchiveControllerFirmware = 0x0100000000000822ul; -static constexpr u64 TitleId_ArchiveNgWord2 = 0x0100000000000823ul; -static constexpr u64 TitleId_ArchivePlatformConfigIcosaMariko = 0x0100000000000824ul; -static constexpr u64 TitleId_ArchiveApplicationBlackList = 0x0100000000000825ul; -static constexpr u64 TitleId_ArchiveRebootlessSystemUpdateVersion = 0x0100000000000826ul; -static constexpr u64 TitleId_ArchiveContentActionTable = 0x0100000000000827ul; - -static constexpr u64 TitleId_ArchiveEnd = 0x0100000000000FFFul; - -/* System Applets. */ -static constexpr u64 TitleId_AppletStart = 0x0100000000001000ul; - -static constexpr u64 TitleId_AppletQlaunch = 0x0100000000001000ul; -static constexpr u64 TitleId_AppletAuth = 0x0100000000001001ul; -static constexpr u64 TitleId_AppletCabinet = 0x0100000000001002ul; -static constexpr u64 TitleId_AppletController = 0x0100000000001003ul; -static constexpr u64 TitleId_AppletDataErase = 0x0100000000001004ul; -static constexpr u64 TitleId_AppletError = 0x0100000000001005ul; -static constexpr u64 TitleId_AppletNetConnect = 0x0100000000001006ul; -static constexpr u64 TitleId_AppletPlayerSelect = 0x0100000000001007ul; -static constexpr u64 TitleId_AppletSwkbd = 0x0100000000001008ul; -static constexpr u64 TitleId_AppletMiiEdit = 0x0100000000001009ul; -static constexpr u64 TitleId_AppletWeb = 0x010000000000100Aul; -static constexpr u64 TitleId_AppletShop = 0x010000000000100Bul; -static constexpr u64 TitleId_AppletOverlayDisp = 0x010000000000100Cul; -static constexpr u64 TitleId_AppletPhotoViewer = 0x010000000000100Dul; -static constexpr u64 TitleId_AppletSet = 0x010000000000100Eul; -static constexpr u64 TitleId_AppletOfflineWeb = 0x010000000000100Ful; -static constexpr u64 TitleId_AppletLoginShare = 0x0100000000001010ul; -static constexpr u64 TitleId_AppletWifiWebAuth = 0x0100000000001011ul; -static constexpr u64 TitleId_AppletStarter = 0x0100000000001012ul; -static constexpr u64 TitleId_AppletMyPage = 0x0100000000001013ul; -static constexpr u64 TitleId_AppletPlayReport = 0x0100000000001014ul; -static constexpr u64 TitleId_AppletMaintenanceMenu = 0x0100000000001015ul; - -static constexpr u64 TitleId_AppletGift = 0x010000000000101Aul; -static constexpr u64 TitleId_AppletDummyShop = 0x010000000000101Bul; -static constexpr u64 TitleId_AppletUserMigration = 0x010000000000101Cul; -static constexpr u64 TitleId_AppletEncounter = 0x010000000000101Dul; - -static constexpr u64 TitleId_AppletStory = 0x0100000000001020ul; - -static constexpr u64 TitleId_AppletEnd = 0x0100000000001FFFul; - -/* Debug Applets. */ - -/* Debug Modules. */ - -/* Factory Setup. */ - -/* Applications. */ -static constexpr u64 TitleId_ApplicationStart = 0x0100000000010000ul; -static constexpr u64 TitleId_ApplicationEnd = 0x01FFFFFFFFFFFFFFul; - -/* Target Tools. */ - -/* Helper functions. */ -static inline bool TitleIdIsSystem(const u64 title_id) { - return TitleId_SystemStart <= title_id && title_id <= TitleId_SystemEnd; -} - -static inline bool TitleIdIsArchive(const u64 title_id) { - return TitleId_ArchiveStart <= title_id && title_id <= TitleId_ArchiveEnd; -} - -static inline bool TitleIdIsApplet(const u64 title_id) { - return TitleId_AppletStart <= title_id && title_id <= TitleId_AppletEnd; -} - -static inline bool TitleIdIsApplication(const u64 title_id) { - return TitleId_ApplicationStart <= title_id && title_id <= TitleId_ApplicationEnd; -} \ No newline at end of file diff --git a/source/cfg/cfg_override.cpp b/source/cfg/cfg_override.cpp index ab84362e..4a84ea08 100644 --- a/source/cfg/cfg_override.cpp +++ b/source/cfg/cfg_override.cpp @@ -59,7 +59,7 @@ namespace sts::cfg { .key_combination = KEY_R, .override_by_default = false, }, - .title_id = {TitleId_AppletPhotoViewer}, + .title_id = ncm::TitleId::AppletPhotoViewer, .override_any_app = true, }; @@ -219,7 +219,7 @@ namespace sts::cfg { } /* For system modules and anything launched before the home menu, always override. */ - if (static_cast(title_id) < TitleId_AppletStart || !pm::info::HasLaunchedTitle(ncm::TitleId{TitleId_AppletQlaunch})) { + if (title_id < ncm::TitleId::AppletStart || !pm::info::HasLaunchedTitle(ncm::TitleId::AppletQlaunch)) { return true; } @@ -237,7 +237,7 @@ namespace sts::cfg { } /* For system modules and anything launched before the home menu, always override. */ - if (static_cast(title_id) < TitleId_AppletStart || !pm::info::HasLaunchedTitle(ncm::TitleId{TitleId_AppletQlaunch})) { + if (title_id < ncm::TitleId::AppletStart || !pm::info::HasLaunchedTitle(ncm::TitleId::AppletQlaunch)) { return true; } @@ -258,7 +258,7 @@ namespace sts::cfg { } /* For system modules and anything launched before the home menu, always override. */ - if (static_cast(title_id) < TitleId_AppletStart || !pm::info::HasLaunchedTitle(ncm::TitleId{TitleId_AppletQlaunch})) { + if (title_id < ncm::TitleId::AppletStart || !pm::info::HasLaunchedTitle(ncm::TitleId::AppletQlaunch)) { *out_hbl = false; *out_title = true; return; @@ -292,12 +292,11 @@ namespace sts::cfg { /* HBL Configuration utilities. */ bool IsHblTitleId(ncm::TitleId title_id) { - return (g_hbl_override_config.override_any_app && TitleIdIsApplication(static_cast(title_id))) || (title_id == g_hbl_override_config.title_id); + return (g_hbl_override_config.override_any_app && ncm::IsApplicationTitleId(title_id)) || (title_id == g_hbl_override_config.title_id); } const char *GetHblPath() { return g_hbl_sd_path; } - } diff --git a/source/hid/hid_api.cpp b/source/hid/hid_api.cpp index b0560960..7ae8f5ee 100644 --- a/source/hid/hid_api.cpp +++ b/source/hid/hid_api.cpp @@ -39,7 +39,7 @@ namespace sts::hid { Result EnsureHidInitialized() { if (!g_initialized_hid) { if (!serviceIsActive(hidGetSessionService())) { - if (!pm::info::HasLaunchedTitle(ncm::TitleId{TitleId_Hid})) { + if (!pm::info::HasLaunchedTitle(ncm::TitleId::Hid)) { return MAKERESULT(Module_Libnx, LibnxError_InitFail_HID); } InitializeHid(); diff --git a/source/mitm_query_service.cpp b/source/mitm_query_service.cpp index 619ada30..e35c5e8c 100644 --- a/source/mitm_query_service.cpp +++ b/source/mitm_query_service.cpp @@ -22,12 +22,12 @@ static std::vector g_known_pids; static std::vector g_known_tids; static HosMutex g_pid_tid_mutex; -Result MitmQueryUtils::GetAssociatedTidForPid(u64 pid, u64 *tid) { +Result MitmQueryUtils::GetAssociatedTidForPid(u64 pid, sts::ncm::TitleId *tid) { std::scoped_lock lk(g_pid_tid_mutex); for (unsigned int i = 0; i < g_known_pids.size(); i++) { if (g_known_pids[i] == pid) { - *tid = g_known_tids[i]; + *tid = sts::ncm::TitleId{g_known_tids[i]}; return ResultSuccess; } } @@ -35,9 +35,9 @@ Result MitmQueryUtils::GetAssociatedTidForPid(u64 pid, u64 *tid) { return ResultAtmosphereMitmProcessNotAssociated; } -void MitmQueryUtils::AssociatePidToTid(u64 pid, u64 tid) { +void MitmQueryUtils::AssociatePidToTid(u64 pid, sts::ncm::TitleId tid) { std::scoped_lock lk(g_pid_tid_mutex); g_known_pids.push_back(pid); - g_known_tids.push_back(tid); + g_known_tids.push_back(static_cast(tid)); } diff --git a/source/on_crash.cpp b/source/on_crash.cpp index 9dab2652..2621a51a 100644 --- a/source/on_crash.cpp +++ b/source/on_crash.cpp @@ -18,9 +18,10 @@ #include #include +WEAK sts::ncm::TitleId __stratosphere_title_id = sts::ncm::TitleId::Invalid; + extern "C" { - __attribute__((weak)) u64 __stratosphere_title_id = 0; - void __attribute__((weak)) __libstratosphere_exception_handler(AtmosphereFatalErrorContext *ctx); + void WEAK __libstratosphere_exception_handler(AtmosphereFatalErrorContext *ctx); /* Redefine abort, so that it triggers these handlers. */ void abort(); @@ -43,7 +44,7 @@ void StratosphereCrashHandler(ThreadExceptionDump *ctx) { { ams_ctx.magic = AtmosphereFatalErrorMagic; ams_ctx.error_desc = ctx->error_desc; - ams_ctx.title_id = __stratosphere_title_id; + ams_ctx.title_id = static_cast(__stratosphere_title_id); for (size_t i = 0; i < AtmosphereFatalErrorNumGprs; i++) { ams_ctx.gprs[i] = ctx->cpu_gprs[i].x; } @@ -119,7 +120,7 @@ void StratosphereCrashHandler(ThreadExceptionDump *ctx) { } /* Default exception handler behavior. */ -void __attribute__((weak)) __libstratosphere_exception_handler(AtmosphereFatalErrorContext *ctx) { +void WEAK __libstratosphere_exception_handler(AtmosphereFatalErrorContext *ctx) { R_ASSERT(bpcAmsInitialize()); R_ASSERT(bpcAmsRebootToFatalError(ctx)); bpcAmsExit();