aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/hle/service/service.cpp
diff options
context:
space:
mode:
authorGravatar bunnei <ericbunnie@gmail.com>2014-04-15 22:40:19 -0400
committerGravatar bunnei <ericbunnie@gmail.com>2014-04-15 22:40:19 -0400
commit7ec5950bc4c8e4a786df1f4c3392d7b5332d1613 (patch)
tree7d7046dcced5ce635921ebdadabf1a1aa8b0647f /src/core/hle/service/service.cpp
parentcb504e236bb21816b5794a14c4dc57d93766e5a8 (diff)
- extracted srv: calls from service.cpp and put in its own module
- added function tables for service calls - lots of refactoring
Diffstat (limited to 'src/core/hle/service/service.cpp')
-rw-r--r--src/core/hle/service/service.cpp84
1 files changed, 4 insertions, 80 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 44c7c862..799dbe90 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -4,10 +4,12 @@
#include "common/common.h"
#include "common/log.h"
+#include "common/string_util.h"
#include "core/hle/hle.h"
#include "core/hle/service/service.h"
#include "core/hle/service/apt.h"
+#include "core/hle/service/srv.h"
namespace Service {
@@ -64,84 +66,6 @@ Interface* Manager::FetchFromPortName(std::string port_name) {
return FetchFromUID(itr->second);
}
-////////////////////////////////////////////////////////////////////////////////////////////////////
-// Interface to "SRV" service
-
-class SRV : public Interface {
-
-public:
-
- SRV() {
- }
-
- ~SRV() {
- }
-
- enum {
- CMD_OFFSET = 0x80,
- CMD_HEADER_INIT = 0x10002, ///< Command header to initialize SRV service
- CMD_HEADER_GET_HANDLE = 0x50100, ///< Command header to get handle of other services
- };
-
- /**
- * Gets the string name used by CTROS for a service
- * @return String name of service
- */
- std::string GetName() const {
- return "ServiceManager";
- }
-
- /**
- * 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() {
- Syscall::Result res = 0;
- u32* cmd_buff = (u32*)HLE::GetPointer(HLE::CMD_BUFFER_ADDR + CMD_OFFSET);
-
- switch (cmd_buff[0]) {
-
- case CMD_HEADER_INIT:
- NOTICE_LOG(OSHLE, "SRV::Sync - Initialize");
- break;
-
- case CMD_HEADER_GET_HANDLE:
- {
- const char* port_name = (const char*)&cmd_buff[1];
- Interface* 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;
- }
- break;
- }
-
- default:
- ERROR_LOG(OSHLE, "SRV::Sync - Unknown command 0x%08X", cmd_buff[0]);
- res = -1;
- break;
- }
-
- cmd_buff[1] = res;
-
- return res;
- }
-
-};
////////////////////////////////////////////////////////////////////////////////////////////////////
// Module interface
@@ -149,8 +73,8 @@ public:
/// Initialize ServiceManager
void Init() {
g_manager = new Manager;
- g_manager->AddService(new SRV);
- g_manager->AddService(new APT);
+ g_manager->AddService(new SRV::Interface);
+ g_manager->AddService(new APT_U);
NOTICE_LOG(HLE, "Services initialized OK");
}