diff options
| author | 2017-07-21 13:01:21 -0500 | |
|---|---|---|
| committer | 2017-07-21 14:59:20 -0500 | |
| commit | 5682608df76b614cadff6061cff35dcf100b944b (patch) | |
| tree | 1ea1058bd5cf0ce3c15b4ec87c0ec21a77fef634 /src | |
| parent | Merge pull request #2833 from j-selby/single-header-json (diff) | |
| download | yuzu-5682608df76b614cadff6061cff35dcf100b944b.tar.gz yuzu-5682608df76b614cadff6061cff35dcf100b944b.tar.xz yuzu-5682608df76b614cadff6061cff35dcf100b944b.zip | |
Services/APT: Use boost::optional for the APT parameter structure.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/apt/apt.cpp | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index df4b5cc3f..e4068926a 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <boost/optional.hpp> | ||
| 5 | #include "common/common_paths.h" | 6 | #include "common/common_paths.h" |
| 6 | #include "common/file_util.h" | 7 | #include "common/file_util.h" |
| 7 | #include "common/logging/log.h" | 8 | #include "common/logging/log.h" |
| @@ -44,7 +45,7 @@ static u8 unknown_ns_state_field; | |||
| 44 | static ScreencapPostPermission screen_capture_post_permission; | 45 | static ScreencapPostPermission screen_capture_post_permission; |
| 45 | 46 | ||
| 46 | /// Parameter data to be returned in the next call to Glance/ReceiveParameter | 47 | /// Parameter data to be returned in the next call to Glance/ReceiveParameter |
| 47 | static MessageParameter next_parameter; | 48 | static boost::optional<MessageParameter> next_parameter; |
| 48 | 49 | ||
| 49 | void SendParameter(const MessageParameter& parameter) { | 50 | void SendParameter(const MessageParameter& parameter) { |
| 50 | next_parameter = parameter; | 51 | next_parameter = parameter; |
| @@ -227,18 +228,20 @@ void ReceiveParameter(Service::Interface* self) { | |||
| 227 | buffer_size, static_buff_size); | 228 | buffer_size, static_buff_size); |
| 228 | 229 | ||
| 229 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); | 230 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); |
| 231 | |||
| 230 | rb.Push(RESULT_SUCCESS); // No error | 232 | rb.Push(RESULT_SUCCESS); // No error |
| 231 | rb.Push(next_parameter.sender_id); | 233 | rb.Push(next_parameter->sender_id); |
| 232 | rb.Push(next_parameter.signal); // Signal type | 234 | rb.Push(next_parameter->signal); // Signal type |
| 233 | ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); | 235 | ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !"); |
| 234 | rb.Push(static_cast<u32>(next_parameter.buffer.size())); // Parameter buffer size | 236 | rb.Push(static_cast<u32>(next_parameter->buffer.size())); // Parameter buffer size |
| 235 | 237 | ||
| 236 | rb.PushMoveHandles((next_parameter.object != nullptr) | 238 | rb.PushMoveHandles((next_parameter->object != nullptr) |
| 237 | ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() | 239 | ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() |
| 238 | : 0); | 240 | : 0); |
| 239 | rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter.buffer.size()), 0); | ||
| 240 | 241 | ||
| 241 | Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); | 242 | rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter->buffer.size()), 0); |
| 243 | |||
| 244 | Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); | ||
| 242 | 245 | ||
| 243 | LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); | 246 | LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); |
| 244 | } | 247 | } |
| @@ -258,17 +261,18 @@ void GlanceParameter(Service::Interface* self) { | |||
| 258 | 261 | ||
| 259 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); | 262 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); |
| 260 | rb.Push(RESULT_SUCCESS); // No error | 263 | rb.Push(RESULT_SUCCESS); // No error |
| 261 | rb.Push(next_parameter.sender_id); | 264 | rb.Push(next_parameter->sender_id); |
| 262 | rb.Push(next_parameter.signal); // Signal type | 265 | rb.Push(next_parameter->signal); // Signal type |
| 263 | ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); | 266 | ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !"); |
| 264 | rb.Push(static_cast<u32>(next_parameter.buffer.size())); // Parameter buffer size | 267 | rb.Push(static_cast<u32>(next_parameter->buffer.size())); // Parameter buffer size |
| 265 | 268 | ||
| 266 | rb.PushCopyHandles((next_parameter.object != nullptr) | 269 | rb.PushMoveHandles((next_parameter->object != nullptr) |
| 267 | ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() | 270 | ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() |
| 268 | : 0); | 271 | : 0); |
| 269 | rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter.buffer.size()), 0); | ||
| 270 | 272 | ||
| 271 | Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); | 273 | rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter->buffer.size()), 0); |
| 274 | |||
| 275 | Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); | ||
| 272 | 276 | ||
| 273 | LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); | 277 | LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); |
| 274 | } | 278 | } |
| @@ -800,8 +804,10 @@ void Init() { | |||
| 800 | notification_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Notification"); | 804 | notification_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Notification"); |
| 801 | parameter_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Start"); | 805 | parameter_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Start"); |
| 802 | 806 | ||
| 803 | next_parameter.signal = static_cast<u32>(SignalType::Wakeup); | 807 | // Initialize the parameter to wake up the application. |
| 804 | next_parameter.destination_id = 0x300; | 808 | next_parameter.emplace(); |
| 809 | next_parameter->signal = static_cast<u32>(SignalType::Wakeup); | ||
| 810 | next_parameter->destination_id = static_cast<u32>(AppletId::Application); | ||
| 805 | } | 811 | } |
| 806 | 812 | ||
| 807 | void Shutdown() { | 813 | void Shutdown() { |
| @@ -812,7 +818,7 @@ void Shutdown() { | |||
| 812 | notification_event = nullptr; | 818 | notification_event = nullptr; |
| 813 | parameter_event = nullptr; | 819 | parameter_event = nullptr; |
| 814 | 820 | ||
| 815 | next_parameter.object = nullptr; | 821 | next_parameter = boost::none; |
| 816 | 822 | ||
| 817 | HLE::Applets::Shutdown(); | 823 | HLE::Applets::Shutdown(); |
| 818 | } | 824 | } |