diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 69255e2ef..d5fe7a67f 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -92,11 +92,19 @@ void GetSharedFont(Service::Interface* self) { } } +void ReplySleepQuery(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + u32 app_id = cmd_buff[1]; + QueryReply query_reply = static_cast(cmd_buff[2]); + cmd_buff[1] = RESULT_SUCCESS.raw; // No error + LOG_WARNING(Service_APT, "(STUBBED) app_id=0x%08X QueryReply=0x%08X", app_id, query_reply); +} + void NotifyToWait(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); u32 app_id = cmd_buff[1]; cmd_buff[1] = RESULT_SUCCESS.raw; // No error - LOG_WARNING(Service_APT, "(STUBBED) app_id=%u", app_id); + LOG_WARNING(Service_APT, "(STUBBED) app_id=0x%08X", app_id); } void GetLockHandle(Service::Interface* self) { @@ -145,7 +153,7 @@ void IsRegistered(Service::Interface* self) { // handle this properly once we implement multiprocess support. cmd_buff[2] = 0; // Set to not registered by default - if (app_id == static_cast(AppletId::AnyLibraryApplet)) { + if (app_id == static_cast(AppletId::AnyLibrary)) { cmd_buff[2] = HLE::Applets::IsLibraryAppletRunning() ? 1 : 0; } else if (auto applet = HLE::Applets::Applet::Get(static_cast(app_id))) { cmd_buff[2] = 1; // Set to registered @@ -288,19 +296,17 @@ void StartApplication(Service::Interface* self) { void AppletUtility(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); - - // These are from 3dbrew - I'm not really sure what they're used for. - u32 command = cmd_buff[1]; - u32 buffer1_size = cmd_buff[2]; - u32 buffer2_size = cmd_buff[3]; - u32 buffer1_addr = cmd_buff[5]; - u32 buffer2_addr = cmd_buff[65]; + u32 utility = cmd_buff[1]; + u32 input_size = cmd_buff[2]; + u32 output_size = cmd_buff[3]; + u32 translation_descriptor = cmd_buff[4]; + u32 input_address = cmd_buff[5]; cmd_buff[1] = RESULT_SUCCESS.raw; // No error + cmd_buff[2] = RESULT_SUCCESS.raw; // No error - LOG_WARNING(Service_APT, "(STUBBED) called command=0x%08X, buffer1_size=0x%08X, buffer2_size=0x%08X, " - "buffer1_addr=0x%08X, buffer2_addr=0x%08X", command, buffer1_size, buffer2_size, - buffer1_addr, buffer2_addr); + LOG_WARNING(Service_APT, "(STUBBED) called Utility=0x%08X, InputSize=0x%08X, OutputSize=0x%08X, " + "TranslationDescriptor=0x%08X, InputAddress=0x%08X", utility, input_size, output_size, translation_descriptor, input_address); } void SetAppCpuTimeLimit(Service::Interface* self) { diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index 4a72b6b5c..21d998f8a 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h @@ -31,6 +31,13 @@ struct AppletStartupParameter { u8* data = nullptr; }; +enum class QueryReply : u32 +{ + REPLY_REJECT = 0x0, + REPLY_ACCEPT = 0x1, + REPLY_LATER = 0x2 +}; + /// Signals used by APT functions enum class SignalType : u32 { None = 0x0, @@ -53,17 +60,27 @@ enum class AppletId : u32 { InstructionManual = 0x115, Notifications = 0x116, Miiverse = 0x117, + MiiversePosting = 0x118, + AmiiboSettings = 0x119, SoftwareKeyboard1 = 0x201, - Ed = 0x202, - PnoteApp = 0x204, - SnoteApp = 0x205, - Error = 0x206, - Mint = 0x207, - Extrapad = 0x208, - Memolib = 0x209, + MiiSelectorEd1 = 0x202, + PhotoSelector1 = 0x204, + SoundSelector1 = 0x205, + ErrorDisplay1 = 0x206, + EShopMint1 = 0x207, + Extrapad1 = 0x208, + Notepad1 = 0x209, Application = 0x300, - AnyLibraryApplet = 0x400, + EShopTiger = 0x301, + AnyLibrary = 0x400, SoftwareKeyboard2 = 0x401, + MiiSelectorEd2 = 0x402, + PhotoSelector2 = 0x404, + SoundSelector2 = 0x405, + ErrorDisplay2 = 0x406, + EShopMint2 = 0x407, + Extrapad2 = 0x408, + Notepad2 = 0x409 }; /// Send a parameter to the currently-running application, which will read it via ReceiveParameter @@ -88,6 +105,17 @@ void Initialize(Service::Interface* self); */ void GetSharedFont(Service::Interface* self); +/** +* APT::ReplySleepQuery service function +* Inputs: +* 1 : AppID +* 2 : ReplySleepQuery +* Outputs: +* 1 : Result of function, 0 on success, otherwise error code +*/ + +void ReplySleepQuery(Service::Interface* self); + /** * APT::NotifyToWait service function * Inputs: @@ -258,16 +286,17 @@ void PrepareToStartApplication(Service::Interface* self); void StartApplication(Service::Interface* self); /** - * APT::AppletUtility service function - * Inputs: - * 1 : Unknown, but clearly used for something - * 2 : Buffer 1 size (purpose is unknown) - * 3 : Buffer 2 size (purpose is unknown) - * 5 : Buffer 1 address (purpose is unknown) - * 65 : Buffer 2 address (purpose is unknown) - * Outputs: - * 1 : Result of function, 0 on success, otherwise error code - */ +* APT::AppletUtility service function +* Inputs: +* 1 : Utility +* 2 : Input Size +* 3 : Output Size +* 4: Translation descriptor: (Input Size << 14) | 0x402 +* 5 : void*, Input +* Outputs: +* 1 : Result of function, 0 on success, otherwise error code +* 2 : Applet Result +*/ void AppletUtility(Service::Interface* self); /** diff --git a/src/core/hle/service/apt/apt_a.cpp b/src/core/hle/service/apt/apt_a.cpp index 0c6a77305..346bdbc5b 100644 --- a/src/core/hle/service/apt/apt_a.cpp +++ b/src/core/hle/service/apt/apt_a.cpp @@ -9,25 +9,95 @@ namespace Service { namespace APT { const Interface::FunctionInfo FunctionTable[] = { - {0x00010040, GetLockHandle, "GetLockHandle?"}, - {0x00020080, Initialize, "Initialize?"}, - {0x00030040, Enable, "Enable?"}, - {0x00040040, nullptr, "Finalize?"}, - {0x00050040, nullptr, "GetAppletManInfo?"}, - {0x00060040, nullptr, "GetAppletInfo?"}, - {0x00090040, IsRegistered, "IsRegistered"}, - {0x000C0104, SendParameter, "SendParameter"}, - {0x000D0080, ReceiveParameter, "ReceiveParameter"}, - {0x000E0080, GlanceParameter, "GlanceParameter"}, - {0x000F0100, CancelParameter, "CancelParameter"}, - {0x00160040, PreloadLibraryApplet, "PreloadLibraryApplet"}, - {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, - {0x001E0084, StartLibraryApplet, "StartLibraryApplet"}, - {0x003B0040, nullptr, "CancelLibraryApplet?"}, - {0x00430040, NotifyToWait, "NotifyToWait?"}, - {0x00440000, GetSharedFont, "GetSharedFont?"}, - {0x004B00C2, AppletUtility, "AppletUtility?"}, - {0x00550040, nullptr, "WriteInputToNsState?"}, + {0x00010040, GetLockHandle, "GetLockHandle" }, + {0x00020080, Initialize, "Initialize" }, + {0x00030040, Enable, "Enable" }, + {0x00040040, nullptr, "Finalize" }, + {0x00050040, nullptr, "GetAppletManInfo" }, + {0x00060040, nullptr, "GetAppletInfo" }, + {0x00070000, nullptr, "GetLastSignaledAppletId" }, + {0x00080000, nullptr, "CountRegisteredApplet" }, + {0x00090040, IsRegistered, "IsRegistered" }, + {0x000A0040, nullptr, "GetAttribute" }, + {0x000B0040, InquireNotification, "InquireNotification" }, + {0x000C0104, SendParameter, "SendParameter" }, + {0x000D0080, ReceiveParameter, "ReceiveParameter" }, + {0x000E0080, GlanceParameter, "GlanceParameter" }, + {0x000F0100, CancelParameter, "CancelParameter" }, + {0x001000C2, nullptr, "DebugFunc" }, + {0x001100C0, nullptr, "MapProgramIdForDebug" }, + {0x00120040, nullptr, "SetHomeMenuAppletIdForDebug" }, + {0x00130000, nullptr, "GetPreparationState" }, + {0x00140040, nullptr, "SetPreparationState" }, + {0x00150140, nullptr, "PrepareToStartApplication" }, + {0x00160040, PreloadLibraryApplet, "PreloadLibraryApplet" }, + {0x00170040, nullptr, "FinishPreloadingLibraryApplet" }, + {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet" }, + {0x00190040, nullptr, "PrepareToStartSystemApplet" }, + {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu" }, + {0x001B00C4, nullptr, "StartApplication" }, + {0x001C0000, nullptr, "WakeupApplication" }, + {0x001D0000, nullptr, "CancelApplication" }, + {0x001E0084, nullptr, "StartLibraryApplet" }, + {0x001F0084, StartLibraryApplet, "StartSystemApplet" }, + {0x00200044, nullptr, "StartNewestHomeMenu" }, + {0x00210000, nullptr, "OrderToCloseApplication" }, + {0x00220040, nullptr, "PrepareToCloseApplication" }, + {0x00230040, nullptr, "PrepareToJumpToApplication" }, + {0x00240044, nullptr, "JumpToApplication" }, + {0x002500C0, nullptr, "PrepareToCloseLibraryApplet" }, + {0x00260000, nullptr, "PrepareToCloseSystemApplet" }, + {0x00270044, nullptr, "CloseApplication" }, + {0x00280044, nullptr, "CloseLibraryApplet" }, + {0x00290044, nullptr, "CloseSystemApplet" }, + {0x002A0000, nullptr, "OrderToCloseSystemApplet" }, + {0x002B0000, nullptr, "PrepareToJumpToHomeMenu" }, + {0x002C0044, nullptr, "JumpToHomeMenu" }, + {0x002D0000, nullptr, "PrepareToLeaveHomeMenu" }, + {0x002E0044, nullptr, "LeaveHomeMenu" }, + {0x002F0040, nullptr, "PrepareToLeaveResidentApplet" }, + {0x00300044, nullptr, "LeaveResidentApplet" }, + {0x00310100, nullptr, "PrepareToDoApplicationJump" }, + {0x00320084, nullptr, "DoApplicationJump" }, + {0x00330000, nullptr, "GetProgramIdOnApplicationJump" }, + {0x00340084, nullptr, "SendDeliverArg" }, + {0x00350080, nullptr, "ReceiveDeliverArg" }, + {0x00360040, nullptr, "LoadSysMenuArg" }, + {0x00370042, nullptr, "StoreSysMenuArg" }, + {0x00380040, nullptr, "PreloadResidentApplet" }, + {0x00390040, nullptr, "PrepareToStartResidentApplet" }, + {0x003A0044, nullptr, "StartResidentApplet" }, + {0x003B0040, nullptr, "CancelLibraryApplet" }, + {0x003C0042, nullptr, "SendDspSleep" }, + {0x003D0042, nullptr, "SendDspWakeUp" }, + {0x003E0080, ReplySleepQuery, "ReplySleepQuery" }, + {0x003F0040, nullptr, "ReplySleepNotificationComplete" }, + {0x00400042, nullptr, "SendCaptureBufferInfo" }, + {0x00410040, nullptr, "ReceiveCaptureBufferInfo" }, + {0x00420080, nullptr, "SleepSystem" }, + {0x00430040, NotifyToWait, "NotifyToWait" }, + {0x00440000, GetSharedFont, "GetSharedFont" }, + {0x00450040, nullptr, "GetWirelessRebootInfo" }, + {0x00460104, nullptr, "Wrap" }, + {0x00470104, nullptr, "Unwrap" }, + {0x00480100, nullptr, "GetProgramInfo" }, + {0x00490180, nullptr, "Reboot" }, + {0x004A0040, nullptr, "GetCaptureInfo" }, + {0x004B00C2, AppletUtility, "AppletUtility" }, + {0x004C0000, nullptr, "SetFatalErrDispMode" }, + {0x004D0080, nullptr, "GetAppletProgramInfo" }, + {0x004E0000, nullptr, "HardwareResetAsync" }, + {0x004F0080, SetAppCpuTimeLimit, "SetAppCpuTimeLimit" }, + {0x00500040, GetAppCpuTimeLimit, "GetAppCpuTimeLimit" }, + {0x00510080, nullptr, "GetStartupArgument" }, + {0x00520104, nullptr, "Wrap1" }, + {0x00530104, nullptr, "Unwrap1" }, + {0x00580002, nullptr, "GetProgramID" }, + {0x01010000, nullptr, "CheckNew3DSApp" }, + {0x01020000, nullptr, "CheckNew3DS" }, + {0x01040000, nullptr, "IsStandardMemoryLayout" }, + {0x01050100, nullptr, "IsTitleAllowed" } + }; APT_A_Interface::APT_A_Interface() { diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index 7f6e81a63..3170232b9 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp @@ -17,13 +17,13 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00060040, nullptr, "GetAppletInfo"}, {0x00070000, nullptr, "GetLastSignaledAppletId"}, {0x00080000, nullptr, "CountRegisteredApplet"}, - {0x00090040, nullptr, "IsRegistered"}, + {0x00090040, IsRegistered, "IsRegistered"}, {0x000A0040, nullptr, "GetAttribute"}, {0x000B0040, InquireNotification, "InquireNotification"}, {0x000C0104, nullptr, "SendParameter"}, {0x000D0080, ReceiveParameter, "ReceiveParameter"}, {0x000E0080, GlanceParameter, "GlanceParameter"}, - {0x000F0100, nullptr, "CancelParameter"}, + {0x000F0100, CancelParameter, "CancelParameter"}, {0x001000C2, nullptr, "DebugFunc"}, {0x001100C0, nullptr, "MapProgramIdForDebug"}, {0x00120040, nullptr, "SetHomeMenuAppletIdForDebug"}, @@ -39,7 +39,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x001C0000, nullptr, "WakeupApplication"}, {0x001D0000, nullptr, "CancelApplication"}, {0x001E0084, nullptr, "StartLibraryApplet"}, - {0x001F0084, nullptr, "StartSystemApplet"}, + {0x001F0084, StartLibraryApplet, "StartSystemApplet"}, {0x00200044, nullptr, "StartNewestHomeMenu"}, {0x00210000, nullptr, "OrderToCloseApplication"}, {0x00220040, nullptr, "PrepareToCloseApplication"}, @@ -70,7 +70,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x003B0040, nullptr, "CancelLibraryApplet"}, {0x003C0042, nullptr, "SendDspSleep"}, {0x003D0042, nullptr, "SendDspWakeUp"}, - {0x003E0080, nullptr, "ReplySleepQuery"}, + {0x003E0080, ReplySleepQuery, "ReplySleepQuery"}, {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, {0x00400042, nullptr, "SendCaptureBufferInfo"}, {0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, @@ -87,14 +87,16 @@ const Interface::FunctionInfo FunctionTable[] = { {0x004C0000, nullptr, "SetFatalErrDispMode"}, {0x004D0080, nullptr, "GetAppletProgramInfo"}, {0x004E0000, nullptr, "HardwareResetAsync"}, - {0x004F0080, nullptr, "SetApplicationCpuTimeLimit"}, - {0x00500040, nullptr, "GetApplicationCpuTimeLimit"}, + {0x004F0080, SetAppCpuTimeLimit, "SetAppCpuTimeLimit" }, + {0x00500040, GetAppCpuTimeLimit, "GetAppCpuTimeLimit" }, {0x00510080, nullptr, "GetStartupArgument"}, {0x00520104, nullptr, "Wrap1"}, {0x00530104, nullptr, "Unwrap1"}, {0x00580002, nullptr, "GetProgramID"}, {0x01010000, nullptr, "CheckNew3DSApp"}, - {0x01020000, nullptr, "CheckNew3DS"} + {0x01020000, nullptr, "CheckNew3DS"}, + {0x01040000, nullptr, "IsStandardMemoryLayout" }, + {0x01050100, nullptr, "IsTitleAllowed" } }; APT_S_Interface::APT_S_Interface() { diff --git a/src/core/hle/service/apt/apt_u.cpp b/src/core/hle/service/apt/apt_u.cpp index 209a0055b..2a7e23475 100644 --- a/src/core/hle/service/apt/apt_u.cpp +++ b/src/core/hle/service/apt/apt_u.cpp @@ -70,7 +70,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x003B0040, nullptr, "CancelLibraryApplet"}, {0x003C0042, nullptr, "SendDspSleep"}, {0x003D0042, nullptr, "SendDspWakeUp"}, - {0x003E0080, nullptr, "ReplySleepQuery"}, + {0x003E0080, ReplySleepQuery, "ReplySleepQuery"}, {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, {0x00400042, nullptr, "SendCaptureBufferInfo"}, {0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, @@ -94,7 +94,9 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00530104, nullptr, "Unwrap1"}, {0x00580002, nullptr, "GetProgramID"}, {0x01010000, nullptr, "CheckNew3DSApp"}, - {0x01020000, nullptr, "CheckNew3DS"} + {0x01020000, nullptr, "CheckNew3DS"}, + {0x01040000, nullptr, "IsStandardMemoryLayout"}, + {0x01050100, nullptr, "IsTitleAllowed" } }; APT_U_Interface::APT_U_Interface() { diff --git a/src/core/hle/service/srv.cpp b/src/core/hle/service/srv.cpp index 41fc3437b..334ce7d25 100644 --- a/src/core/hle/service/srv.cpp +++ b/src/core/hle/service/srv.cpp @@ -56,9 +56,14 @@ const Interface::FunctionInfo FunctionTable[] = { {0x000400C0, nullptr, "UnregisterService"}, {0x00050100, GetServiceHandle, "GetServiceHandle"}, {0x000600C2, nullptr, "RegisterHandle"}, + {0x000700C0, nullptr, "UnregisterPort" }, + {0x00080100, nullptr, "GetPort" }, {0x00090040, nullptr, "Subscribe"}, + {0x000A0040, nullptr, "Unsubscribe" }, {0x000B0000, nullptr, "ReceiveNotification"}, {0x000C0080, nullptr, "PublishToSubscriber"}, + {0x000D0040, nullptr, "PublishAndGetSubscriber" }, + {0x000E00C0, nullptr, "IsServiceRegistered" } }; ////////////////////////////////////////////////////////////////////////////////////////////////////