mirror of
https://github.com/citra-emu/citra.git
synced 2024-11-24 20:21:04 +00:00
apt: GetAppletInfo
This commit is contained in:
parent
878562c291
commit
9e4e413d0c
@ -29,6 +29,10 @@ namespace APT {
|
|||||||
// correctly mapping it in Citra, however we still do not understand how the mapping is determined.
|
// correctly mapping it in Citra, however we still do not understand how the mapping is determined.
|
||||||
static const VAddr SHARED_FONT_VADDR = 0x18000000;
|
static const VAddr SHARED_FONT_VADDR = 0x18000000;
|
||||||
|
|
||||||
|
static const u32 TID_HI_APPLET = 0x00040030;
|
||||||
|
|
||||||
|
static const u32 TID_LOW_SWKBD = 0x0000C802;
|
||||||
|
|
||||||
/// Handle to shared memory region designated to for shared system font
|
/// Handle to shared memory region designated to for shared system font
|
||||||
static Kernel::SharedPtr<Kernel::SharedMemory> shared_font_mem;
|
static Kernel::SharedPtr<Kernel::SharedMemory> shared_font_mem;
|
||||||
|
|
||||||
@ -128,7 +132,7 @@ void GetAppletManInfo(Service::Interface* self) {
|
|||||||
u32* cmd_buff = Kernel::GetCommandBuffer();
|
u32* cmd_buff = Kernel::GetCommandBuffer();
|
||||||
u32 unk = cmd_buff[1];
|
u32 unk = cmd_buff[1];
|
||||||
cmd_buff[1] = RESULT_SUCCESS.raw; // No error
|
cmd_buff[1] = RESULT_SUCCESS.raw; // No error
|
||||||
cmd_buff[2] = 0;
|
cmd_buff[2] = static_cast<u32>(AppletAttr::SYS);
|
||||||
cmd_buff[3] = 0;
|
cmd_buff[3] = 0;
|
||||||
cmd_buff[4] = static_cast<u32>(AppletId::HomeMenu); // Home menu AppID
|
cmd_buff[4] = static_cast<u32>(AppletId::HomeMenu); // Home menu AppID
|
||||||
cmd_buff[5] = static_cast<u32>(AppletId::Application); // TODO(purpasmart96): Do this correctly
|
cmd_buff[5] = static_cast<u32>(AppletId::Application); // TODO(purpasmart96): Do this correctly
|
||||||
@ -136,6 +140,33 @@ void GetAppletManInfo(Service::Interface* self) {
|
|||||||
LOG_WARNING(Service_APT, "(STUBBED) called unk=0x%08X", unk);
|
LOG_WARNING(Service_APT, "(STUBBED) called unk=0x%08X", unk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GetAppletInfo(Service::Interface* self) {
|
||||||
|
u32* cmd_buff = Kernel::GetCommandBuffer();
|
||||||
|
|
||||||
|
AppletId app_id = static_cast<AppletId>(cmd_buff[1]);
|
||||||
|
|
||||||
|
cmd_buff[1] = RESULT_SUCCESS.raw; // No error
|
||||||
|
|
||||||
|
switch(app_id) {
|
||||||
|
case AppletId::SoftwareKeyboard2:
|
||||||
|
cmd_buff[2] = TID_LOW_SWKBD;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cmd_buff[2] = 0;
|
||||||
|
LOG_WARNING(Service_APT, "No title ID low for AppletID=0x%08X", app_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_buff[3] = TID_HI_APPLET;
|
||||||
|
cmd_buff[4] = 0; // NAND
|
||||||
|
cmd_buff[5] = true;
|
||||||
|
cmd_buff[6] = true;
|
||||||
|
cmd_buff[7] = static_cast<u32>(AppletAttr::SYS);
|
||||||
|
|
||||||
|
LOG_WARNING(Service_APT, "(STUBBED) called AppletID=0x%08X", app_id);
|
||||||
|
}
|
||||||
|
|
||||||
void IsRegistered(Service::Interface* self) {
|
void IsRegistered(Service::Interface* self) {
|
||||||
u32* cmd_buff = Kernel::GetCommandBuffer();
|
u32* cmd_buff = Kernel::GetCommandBuffer();
|
||||||
u32 app_id = cmd_buff[1];
|
u32 app_id = cmd_buff[1];
|
||||||
|
@ -66,6 +66,14 @@ enum class AppletId : u32 {
|
|||||||
SoftwareKeyboard2 = 0x401,
|
SoftwareKeyboard2 = 0x401,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class AppletAttr : u32 {
|
||||||
|
APP = 0x00,
|
||||||
|
APPLIB = 0x01,
|
||||||
|
SYS = 0x02,
|
||||||
|
SYSLIB = 0x03,
|
||||||
|
RESIDENT = 0x04,
|
||||||
|
};
|
||||||
|
|
||||||
/// Send a parameter to the currently-running application, which will read it via ReceiveParameter
|
/// Send a parameter to the currently-running application, which will read it via ReceiveParameter
|
||||||
void SendParameter(const MessageParameter& parameter);
|
void SendParameter(const MessageParameter& parameter);
|
||||||
|
|
||||||
@ -120,18 +128,33 @@ void GetLockHandle(Service::Interface* self);
|
|||||||
void Enable(Service::Interface* self);
|
void Enable(Service::Interface* self);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APT::GetAppletManInfo service function.
|
* APT::GetAppletManInfo service function.
|
||||||
* Inputs:
|
* Inputs:
|
||||||
* 1 : Unknown
|
* 1 : AppletPos
|
||||||
* Outputs:
|
* Outputs:
|
||||||
* 1 : Result of function, 0 on success, otherwise error code
|
* 1 : Result of function, 0 on success, otherwise error code
|
||||||
* 2 : Unknown u32 value
|
* 2 : AppletPos
|
||||||
* 3 : Unknown u8 value
|
* 3 : Requested AppID
|
||||||
* 4 : Home Menu AppId
|
* 4 : Home Menu AppId
|
||||||
* 5 : AppID of currently active app
|
* 5 : AppID of currently active app
|
||||||
*/
|
*/
|
||||||
void GetAppletManInfo(Service::Interface* self);
|
void GetAppletManInfo(Service::Interface* self);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APT::GetAppletInfo service function.
|
||||||
|
* Inputs:
|
||||||
|
* 1 : AppID
|
||||||
|
* Outputs:
|
||||||
|
* 1 : Result of function, 0 on success, otherwise error code
|
||||||
|
* 2 : TitleID (low 32 bits)
|
||||||
|
* 3 : TitleID (hi 32 bits)
|
||||||
|
* 4 : Media Type
|
||||||
|
* 5 : Registered
|
||||||
|
* 6 : Loaded
|
||||||
|
* 7 : AppletAttr
|
||||||
|
*/
|
||||||
|
void GetAppletInfo(Service::Interface* self);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APT::IsRegistered service function. This returns whether the specified AppID is registered with NS yet.
|
* APT::IsRegistered service function. This returns whether the specified AppID is registered with NS yet.
|
||||||
* An AppID is "registered" once the process associated with the AppID uses APT:Enable. Home Menu uses this
|
* An AppID is "registered" once the process associated with the AppID uses APT:Enable. Home Menu uses this
|
||||||
|
@ -14,7 +14,7 @@ const Interface::FunctionInfo FunctionTable[] = {
|
|||||||
{0x00030040, Enable, "Enable"},
|
{0x00030040, Enable, "Enable"},
|
||||||
{0x00040040, nullptr, "Finalize"},
|
{0x00040040, nullptr, "Finalize"},
|
||||||
{0x00050040, GetAppletManInfo, "GetAppletManInfo"},
|
{0x00050040, GetAppletManInfo, "GetAppletManInfo"},
|
||||||
{0x00060040, nullptr, "GetAppletInfo"},
|
{0x00060040, GetAppletInfo, "GetAppletInfo"},
|
||||||
{0x00070000, nullptr, "GetLastSignaledAppletId"},
|
{0x00070000, nullptr, "GetLastSignaledAppletId"},
|
||||||
{0x00080000, nullptr, "CountRegisteredApplet"},
|
{0x00080000, nullptr, "CountRegisteredApplet"},
|
||||||
{0x00090040, IsRegistered, "IsRegistered"},
|
{0x00090040, IsRegistered, "IsRegistered"},
|
||||||
|
@ -41,7 +41,8 @@ enum class ArchiveIdCode : u32 {
|
|||||||
/// Media types for the archives
|
/// Media types for the archives
|
||||||
enum class MediaType : u32 {
|
enum class MediaType : u32 {
|
||||||
NAND = 0,
|
NAND = 0,
|
||||||
SDMC = 1
|
SDMC = 1,
|
||||||
|
GameCard = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef u64 ArchiveHandle;
|
typedef u64 ArchiveHandle;
|
||||||
|
Loading…
Reference in New Issue
Block a user