5 changed files with 215 additions and 137 deletions
-
52src/core/hle/service/apt.cpp
-
30src/core/hle/service/apt.h
-
26src/core/hle/service/service.h
-
55src/core/hle/service/srv.cpp
-
39src/core/hle/service/srv.h
@ -0,0 +1,55 @@ |
|||
// Copyright 2014 Citra Emulator Project
|
|||
// Licensed under GPLv2
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include "core/hle/hle.h"
|
|||
#include "core/hle/service/srv.h"
|
|||
#include "core/hle/service/service.h"
|
|||
|
|||
|
|||
namespace SRV { |
|||
|
|||
void Initialize() { |
|||
NOTICE_LOG(OSHLE, "SRV::Sync - Initialize"); |
|||
} |
|||
|
|||
void GetServiceHandle() { |
|||
Syscall::Result res = 0; |
|||
u32* cmd_buff = (u32*)HLE::GetPointer(HLE::CMD_BUFFER_ADDR + Service::kCommandHeaderOffset); |
|||
|
|||
const char* port_name = (const char*)&cmd_buff[1]; |
|||
Service::Interface* service = Service::g_manager->FetchFromPortName(port_name); |
|||
|
|||
NOTICE_LOG(OSHLE, "SRV::Sync - GetHandle - port: %s, handle: 0x%08X", port_name, |
|||
service->GetUID()); |
|||
|
|||
if (NULL != service) { |
|||
cmd_buff[3] = service->GetUID(); |
|||
} else { |
|||
ERROR_LOG(OSHLE, "Service %s does not exist", port_name); |
|||
res = -1; |
|||
} |
|||
cmd_buff[1] = res; |
|||
|
|||
//return res;
|
|||
} |
|||
|
|||
const HLE::FunctionDef FunctionTable[] = { |
|||
{0x00010002, Initialize, "Initialize"}, |
|||
{0x00020000, NULL, "GetProcSemaphore"}, |
|||
{0x00030100, NULL, "RegisterService"}, |
|||
{0x000400C0, NULL, "UnregisterService"}, |
|||
{0x00050100, GetServiceHandle, "GetServiceHandle"}, |
|||
}; |
|||
|
|||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
// Interface class
|
|||
|
|||
Interface::Interface() { |
|||
Register(FunctionTable, ARRAY_SIZE(FunctionTable)); |
|||
} |
|||
|
|||
Interface::~Interface() { |
|||
} |
|||
|
|||
} // namespace
|
|||
@ -0,0 +1,39 @@ |
|||
// Copyright 2014 Citra Emulator Project |
|||
// Licensed under GPLv2 |
|||
// Refer to the license.txt file included. |
|||
|
|||
#include "core/hle/service/service.h" |
|||
|
|||
namespace SRV { |
|||
|
|||
//////////////////////////////////////////////////////////////////////////////////////////////////// |
|||
// Interface to "SRV" service |
|||
|
|||
class Interface : public Service::Interface { |
|||
|
|||
public: |
|||
|
|||
Interface(); |
|||
|
|||
~Interface(); |
|||
|
|||
/** |
|||
* Gets the string name used by CTROS for a service |
|||
* @return Port name of service |
|||
*/ |
|||
std::string GetPortName() const { |
|||
return "srv:"; |
|||
} |
|||
|
|||
/** |
|||
* Called when svcSendSyncRequest is called, loads command buffer and executes comand |
|||
* @return Return result of svcSendSyncRequest passed back to user app |
|||
*/ |
|||
Syscall::Result Sync(); |
|||
|
|||
private: |
|||
|
|||
DISALLOW_COPY_AND_ASSIGN(Interface); |
|||
}; |
|||
|
|||
} // namespace |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue