5 changed files with 215 additions and 137 deletions
-
50src/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