diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 90fdde6c7..53ee01b39 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include + #include "common/logging/log.h" #include "core/hle/service/service.h" @@ -46,16 +48,15 @@ void GetNumContentInfos(Service::Interface* self) { void ListDataTitleTicketInfos(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); - u32 ticket_count = cmd_buff[1]; - u64 title_id = cmd_buff[2]; - title_id = (title_id << 32) | cmd_buff[3]; - u32 start_index = cmd_buff[4]; - u32 tipointer = cmd_buff[6]; + u32 ticket_count = cmd_buff[1]; + u64 title_id = static_cast(cmd_buff[2]) << 32 | cmd_buff[3]; + u32 start_index = cmd_buff[4]; + u32 ticket_info_pointer = cmd_buff[6]; cmd_buff[1] = RESULT_SUCCESS.raw; cmd_buff[2] = 0x18; - LOG_WARNING(Service_AM, "(STUBBED) TicketCount=0x%08X TitleID==0x%16X StartIndex=0x%08X", - "TicketInfosPointer=0x%08X",ticket_count, title_id, start_index, tipointer); + LOG_WARNING(Service_AM, "(STUBBED) TicketCount=0x%08X TitleID=0x%016" PRIx64 " StartIndex=0x%08X TicketInfosPointer=0x%08X", + ticket_count, title_id, start_index, ticket_info_pointer); } void Init() { diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 69255e2ef..963b9944f 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,18 @@ 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..5934177a8 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 +{ + Reject, + Accept, + Later +}; + /// 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,16 @@ 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: @@ -162,7 +189,7 @@ void InquireNotification(Service::Interface* self); * Outputs: * 0 : Return Header * 1 : Result of function, 0 on success, otherwise error code -*/ + */ void SendParameter(Service::Interface* self); /** @@ -254,19 +281,20 @@ void PrepareToStartApplication(Service::Interface* self); * Outputs: * 0 : Return Header * 1 : Result of function, 0 on success, otherwise error code -*/ + */ 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 + * 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..66481667b 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, GetAppletManInfo, "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, StartLibraryApplet, "StartLibraryApplet" }, + {0x001F0084, nullptr, "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..6c6e09129 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp @@ -13,17 +13,17 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00020080, Initialize, "Initialize"}, {0x00030040, Enable, "Enable"}, {0x00040040, nullptr, "Finalize"}, - {0x00050040, nullptr, "GetAppletManInfo"}, + {0x00050040, GetAppletManInfo, "GetAppletManInfo"}, {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"}, @@ -38,7 +38,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x001B00C4, nullptr, "StartApplication"}, {0x001C0000, nullptr, "WakeupApplication"}, {0x001D0000, nullptr, "CancelApplication"}, - {0x001E0084, nullptr, "StartLibraryApplet"}, + {0x001E0084, StartLibraryApplet, "StartLibraryApplet"}, {0x001F0084, nullptr, "StartSystemApplet"}, {0x00200044, nullptr, "StartNewestHomeMenu"}, {0x00210000, nullptr, "OrderToCloseApplication"}, @@ -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..680142cc3 100644 --- a/src/core/hle/service/srv.cpp +++ b/src/core/hle/service/srv.cpp @@ -10,32 +10,34 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// // Namespace SRV - namespace SRV { static Kernel::SharedPtr event_handle; -static void Initialize(Service::Interface* self) { +static void RegisterClient(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); - cmd_buff[1] = 0; // No error + u32 translate_header = cmd_buff[1]; + u32 current_pid = cmd_buff[2]; + + cmd_buff[1] = RESULT_SUCCESS.raw; // No error + LOG_WARNING(Service_HID, "(STUBBED) called TranslateHeader=0x%08X , CurrentPID=0x%08X ",translate_header,current_pid); } -static void GetProcSemaphore(Service::Interface* self) { +static void EnableNotification(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); // TODO(bunnei): Change to a semaphore once these have been implemented event_handle = Kernel::Event::Create(RESETTYPE_ONESHOT, "SRV:Event"); event_handle->Clear(); - cmd_buff[1] = 0; // No error + cmd_buff[1] = RESULT_SUCCESS.raw; // No error cmd_buff[3] = Kernel::g_handle_table.Create(event_handle).MoveFrom(); } static void GetServiceHandle(Service::Interface* self) { - ResultCode res = RESULT_SUCCESS; u32* cmd_buff = Kernel::GetCommandBuffer(); - + ResultCode res = RESULT_SUCCESS; std::string port_name = std::string((const char*)&cmd_buff[1], 0, Service::kMaxPortSize); auto it = Service::g_srv_services.find(port_name); @@ -49,16 +51,84 @@ static void GetServiceHandle(Service::Interface* self) { cmd_buff[1] = res.raw; } + +static void Subscribe(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + NotificationID notification_id = static_cast(cmd_buff[1]); + + std::string notification_act; + + switch (notification_id) + { + case NotificationID::Terminate: + notification_act = "All processes must terminate: power-off, reboot, or FIRM-launch"; + break; + case NotificationID::EnterSleepMode: + notification_act = "The system is entering sleep mode"; + break; + case NotificationID::ExitSleepMode: + notification_act = "The system has exited sleep mode"; + break; + case NotificationID::ErrorAtBoot: + notification_act = "Error at boot"; + break; + case NotificationID::PowerButtonPressed: + notification_act = "POWER button pressed"; + break; + case NotificationID::PowerButtonHeldLong: + notification_act = "POWER button held long"; + break; + case NotificationID::HomeButtonPressed: + notification_act = "HOME button pressed"; + break; + case NotificationID::HomeButtonReleased: + notification_act = "HOME button released"; + break; + case NotificationID::WirelessEnabled: + notification_act = "The physical Wi-Fi slider is enabled"; + break; + case NotificationID::SDCardInserted: + notification_act = "SD card inserted"; + break; + case NotificationID::GameCartInserted: + notification_act = "Game cartridge inserted"; + break; + case NotificationID::SDCardRemoved: + notification_act = "SD card removed"; + break; + case NotificationID::GameCartRemoved: + notification_act = "Game cartridge removed"; + break; + case NotificationID::GameCartInsertOrRemoved: + notification_act = "Game cartridge inserted or removed"; + break; + default: + notification_act = "Unknown Notification ID"; + break; + } + + cmd_buff[1] = RESULT_SUCCESS.raw; // No error + + LOG_WARNING(Service_HID, "(STUBBED) called NotificationID=0x%08X , NotificationAct: %s ", notification_id, notification_act.c_str()); +} + + const Interface::FunctionInfo FunctionTable[] = { - {0x00010002, Initialize, "Initialize"}, - {0x00020000, GetProcSemaphore, "GetProcSemaphore"}, + {0x00010002, RegisterClient, "RegisterClient"}, + {0x00020000, EnableNotification, "EnableNotification"}, {0x00030100, nullptr, "RegisterService"}, {0x000400C0, nullptr, "UnregisterService"}, {0x00050100, GetServiceHandle, "GetServiceHandle"}, {0x000600C2, nullptr, "RegisterHandle"}, - {0x00090040, nullptr, "Subscribe"}, + {0x000700C0, nullptr, "UnregisterPort" }, + {0x00080100, nullptr, "GetPort" }, + {0x00090040, Subscribe, "Subscribe"}, + {0x000A0040, nullptr, "Unsubscribe" }, {0x000B0000, nullptr, "ReceiveNotification"}, {0x000C0080, nullptr, "PublishToSubscriber"}, + {0x000D0040, nullptr, "PublishAndGetSubscriber" }, + {0x000E00C0, nullptr, "IsServiceRegistered" } }; //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/hle/service/srv.h b/src/core/hle/service/srv.h index 96c89b025..f8fee9c3e 100644 --- a/src/core/hle/service/srv.h +++ b/src/core/hle/service/srv.h @@ -9,6 +9,33 @@ namespace SRV { +enum class NotificationID : u32 +{ + Terminate = 0x100, + EnterSleepMode = 0x104, + ExitSleepMode = 0x105, + ErrorAtBoot = 0x108, + LaunchFlags0 = 0x110, + LaunchFlags1 = 0x111, + LaunchFlags2 = 0x112, + LaunchFlags3 = 0x113, + LaunchFlags4 = 0x114, + LaunchFlags5 = 0x115, + LaunchFlags6 = 0x116, + LaunchFlags7 = 0x117, + LaunchFlagsF = 0x11F, + PowerButtonPressed = 0x202, + PowerButtonHeldLong = 0x203, + HomeButtonPressed = 0x204, + HomeButtonReleased = 0x205, + WirelessEnabled = 0x206, + SDCardInserted = 0x207, + GameCartInserted = 0x208, + SDCardRemoved = 0x209, + GameCartRemoved = 0x20A, + GameCartInsertOrRemoved = 0x20B +}; + /// Interface to "srv:" service class Interface : public Service::Interface { public: diff --git a/src/core/hle/service/y2r_u.cpp b/src/core/hle/service/y2r_u.cpp index bbead9344..7f6d2c500 100644 --- a/src/core/hle/service/y2r_u.cpp +++ b/src/core/hle/service/y2r_u.cpp @@ -91,6 +91,15 @@ static void SetInputFormat(Service::Interface* self) { cmd_buff[1] = RESULT_SUCCESS.raw; } +static void GetInputFormat(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + LOG_DEBUG(Service_Y2R, "Get input_format=%hhu", conversion.input_format); + + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = static_cast(conversion.input_format); +} + static void SetOutputFormat(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); @@ -100,6 +109,15 @@ static void SetOutputFormat(Service::Interface* self) { cmd_buff[1] = RESULT_SUCCESS.raw; } +static void GetOutputFormat(Service::Interface* self) { + u32* cmd_buff = Kernel::GetCommandBuffer(); + + LOG_DEBUG(Service_Y2R, "Get output_format=%hhu", conversion.output_format); + + cmd_buff[1] = RESULT_SUCCESS.raw; + cmd_buff[2] = static_cast(conversion.output_format); +} + static void SetRotation(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); @@ -375,9 +393,9 @@ static void DriverFinalize(Service::Interface* self) { const Interface::FunctionInfo FunctionTable[] = { {0x00010040, SetInputFormat, "SetInputFormat"}, - {0x00020000, nullptr, "GetInputFormat"}, + {0x00020000, GetInputFormat, "GetInputFormat"}, {0x00030040, SetOutputFormat, "SetOutputFormat"}, - {0x00040000, nullptr, "GetOutputFormat"}, + {0x00040000, GetOutputFormat, "GetOutputFormat"}, {0x00050040, SetRotation, "SetRotation"}, {0x00060000, nullptr, "GetRotation"}, {0x00070040, SetBlockAlignment, "SetBlockAlignment"},