diff options
Diffstat (limited to 'src/core/hle/service/service.cpp')
| -rw-r--r-- | src/core/hle/service/service.cpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index b0b2b7b35..b2470d814 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | #include "core/hle/hle.h" | 8 | #include "core/hle/hle.h" |
| 9 | #include "core/hle/service/service.h" | 9 | #include "core/hle/service/service.h" |
| 10 | #include "core/hle/service/apt.h" | ||
| 10 | 11 | ||
| 11 | namespace Service { | 12 | namespace Service { |
| 12 | 13 | ||
| @@ -104,19 +105,36 @@ public: | |||
| 104 | */ | 105 | */ |
| 105 | Syscall::Result Sync() { | 106 | Syscall::Result Sync() { |
| 106 | u32 header = 0; | 107 | u32 header = 0; |
| 107 | HLE::Read<u32>(header, (HLE::CMD_BUFFER_ADDR + CMD_OFFSET)); | 108 | Syscall::Result res = 0; |
| 109 | |||
| 110 | u32* cmd_buff = (u32*)HLE::GetPointer(HLE::CMD_BUFFER_ADDR + CMD_OFFSET); | ||
| 111 | |||
| 112 | switch (cmd_buff[0]) { | ||
| 108 | 113 | ||
| 109 | switch (header) { | ||
| 110 | case CMD_HEADER_INIT: | 114 | case CMD_HEADER_INIT: |
| 111 | NOTICE_LOG(HLE, "SRV::Sync - Initialize"); | 115 | NOTICE_LOG(OSHLE, "SRV::Sync - Initialize"); |
| 112 | break; | 116 | break; |
| 113 | 117 | ||
| 114 | case CMD_HEADER_GET_HANDLE: | 118 | case CMD_HEADER_GET_HANDLE: |
| 115 | NOTICE_LOG(HLE, "SRV::Sync - GetHandle, port: %s", HLE::GetCharPointer(HLE::CMD_BUFFER_ADDR + CMD_OFFSET + 4)); | 119 | const char* port_name = (const char*)&cmd_buff[1]; |
| 120 | Interface* service = g_manager->FetchFromPortName(port_name); | ||
| 121 | |||
| 122 | NOTICE_LOG(OSHLE, "SRV::Sync - GetHandle - port: %s, handle: 0x%08X", port_name, | ||
| 123 | service->GetUID()); | ||
| 124 | |||
| 125 | if (NULL != service) { | ||
| 126 | cmd_buff[3] = service->GetUID(); | ||
| 127 | } else { | ||
| 128 | ERROR_LOG(OSHLE, "Service %s does not exist", port_name); | ||
| 129 | res = -1; | ||
| 130 | } | ||
| 131 | |||
| 116 | break; | 132 | break; |
| 117 | } | 133 | } |
| 118 | 134 | ||
| 119 | return 0; | 135 | cmd_buff[1] = res; |
| 136 | |||
| 137 | return res; | ||
| 120 | } | 138 | } |
| 121 | 139 | ||
| 122 | }; | 140 | }; |
| @@ -128,6 +146,7 @@ public: | |||
| 128 | void Init() { | 146 | void Init() { |
| 129 | g_manager = new Manager; | 147 | g_manager = new Manager; |
| 130 | g_manager->AddService(new SRV); | 148 | g_manager->AddService(new SRV); |
| 149 | g_manager->AddService(new APT); | ||
| 131 | NOTICE_LOG(HLE, "Services initialized OK"); | 150 | NOTICE_LOG(HLE, "Services initialized OK"); |
| 132 | } | 151 | } |
| 133 | 152 | ||