Files

149 lines
5.8 KiB
C++

#include "Common.h"
#include "LncUtil.h"
int LncUtil::GetAppStatus(AppStatus* Status)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
MonoClass* AppStatus = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil/AppStatus");
MonoObject* AppStatus_Instance = Mono::New_Object(AppStatus);
if (AppStatus_Instance)
{
Mono::Invoke<void>(Mono::platform_dll, AppStatus, (MonoObject*)mono_object_unbox(AppStatus_Instance), ".ctor", Status->appId, Status->launchRequestAppId, Status->appType);
int res = Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "GetAppStatus", mono_object_unbox(AppStatus_Instance));
memcpy(Status, (void*)mono_object_unbox(AppStatus_Instance), sizeof(AppStatus));
return res;
}
return 0;
}
//int SuspendApp(int appId, Flag flag = Flag_None);
//int ResumeApp(int appId, Flag flag = Flag_None);
//static int SetControllerFocus(int appId);
//static int SetAppFocus(int appId, Flag flag = Flag_None);
char* LncUtil::GetAppTitleId(int appId)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "Util");
auto titleId = Mono::Invoke<MonoString*>(Mono::platform_dll, LncUtil_Class, nullptr, "GetTitleId", appId, Mono::New_String("N/A"));
return mono_string_to_utf8(titleId);
}
int LncUtil::GetAppId(const char* titleId)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
return Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "GetAppId", Mono::New_String(titleId));
}
int LncUtil::LaunchApp(const char* titleId, char* args, int argsSize, LaunchAppParam* param)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
//
// Init Launch Param
//
MonoClass* LaunchAppParam_class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil/LaunchAppParam");
MonoObject* LaunchAppParam_Instance = Mono::New_Object(LaunchAppParam_class);
MonoObject* LaunchAppParam_Instance_real = (MonoObject*)mono_object_unbox(LaunchAppParam_Instance);
Mono::Set_Field(LaunchAppParam_Instance, "size", param->size);
Mono::Set_Field(LaunchAppParam_Instance, "userId", param->userId);
Mono::Set_Field(LaunchAppParam_Instance, "appAttr", param->appAttr);
Mono::Set_Field(LaunchAppParam_Instance, "enableCrashReport", param->enableCrashReport);
Mono::Set_Field(LaunchAppParam_Instance, "checkFlag", param->checkFlag);
//LaunchAppParam* p = (LaunchAppParam*)mono_object_unbox(LaunchAppParam_Instance);
//memcpy(p, param, sizeof(LaunchAppParam));
//
// Init Byte Class.
//
MonoArray* Array = Mono::New_Array(mono_get_byte_class(), argsSize);
char* Array_addr = mono_array_addr_with_size(Array, sizeof(char), 0);
if(args && argsSize > 0)
memcpy(Array_addr, args, argsSize);
klog("Calling Launch...\n");
return Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "LaunchApp", Mono::New_String(titleId), Array, argsSize, LaunchAppParam_Instance_real);
}
int LncUtil::KillApp(int appId, int userId)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
return Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "KillApp", appId, userId, 0, 0);
}
//static int ForceKillApp(int appId, int userId = -1);
int LncUtil::GetLocalProcessStatusList(LocalProcessStatus List[], unsigned int numEntries, unsigned int* outEntries)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
MonoClass* LocalProcessStatusClass = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil/LocalProcessStatus");
auto Array = Mono::New_Array(LocalProcessStatusClass, numEntries);
auto result = Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "GetLocalProcessStatusList", Array, numEntries, outEntries);
for (int i = 0; i < *outEntries; i++)
{
List[i] = mono_array_get(Array, LocalProcessStatus, i);
}
return result;
}
int LncUtil::GetAppStatusListForShellUIReboot(AppStatusForShellUIReboot outStatusList[], unsigned int numEntries, unsigned int* outEntries)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
MonoClass* AppStatusForShellUIRebootClass = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil/AppStatusForShellUIReboot");
auto Array = Mono::New_Array(AppStatusForShellUIRebootClass, numEntries);
auto result = Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "GetAppStatusListForShellUIReboot", Array, numEntries, outEntries);
for (int i = 0; i < *outEntries; i++)
{
outStatusList[i] = mono_array_get(Array, AppStatusForShellUIReboot, i);
}
return result;
}
int LncUtil::KillLocalProcess(int appId, int appLocalPid)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
return Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "KillLocalProcess", appId, appLocalPid);
}
int LncUtil::ForceKillLocalProcess(int appId, int appLocalPid)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
return Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "ForceKillLocalProcess", appId, appLocalPid);
}
void LncUtil::SystemShutdown(Boot flag)
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "SystemShutdown", flag);
}
void LncUtil::SystemReboot()
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "SystemReboot");
}
void LncUtil::SystemSuspend()
{
MonoClass* LncUtil_Class = Mono::Get_Class(Mono::platform_dll, "Sce.Vsh.ShellUI.Lnc", "LncUtil");
Mono::Invoke<int>(Mono::platform_dll, LncUtil_Class, nullptr, "SystemSuspend");
}