summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Subv2017-07-21 13:01:21 -0500
committerGravatar Subv2017-07-21 14:59:20 -0500
commit5682608df76b614cadff6061cff35dcf100b944b (patch)
tree1ea1058bd5cf0ce3c15b4ec87c0ec21a77fef634 /src
parentMerge pull request #2833 from j-selby/single-header-json (diff)
downloadyuzu-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.cpp46
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;
44static ScreencapPostPermission screen_capture_post_permission; 45static 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
47static MessageParameter next_parameter; 48static boost::optional<MessageParameter> next_parameter;
48 49
49void SendParameter(const MessageParameter& parameter) { 50void 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
807void Shutdown() { 813void 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}