/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2015 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #include "xenia/kernel/xam/apps/xlivebase_app.h" #include "xenia/base/logging.h" #include "xenia/base/threading.h" namespace xe { namespace kernel { namespace xam { namespace apps { XLiveBaseApp::XLiveBaseApp(KernelState* kernel_state) : App(kernel_state, 0xFC) {} // http://mb.mirage.org/bugzilla/xliveless/main.c X_RESULT XLiveBaseApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr, uint32_t buffer_length) { // NOTE: buffer_length may be zero or valid. auto buffer = memory_->TranslateVirtual(buffer_ptr); switch (message) { case 0x00058004: { // Called on startup, seems to just return a bool in the buffer. assert_true(!buffer_length || buffer_length == 4); XELOGD("XLiveBaseGetLogonId(%.8X)", buffer_ptr); xe::store_and_swap(buffer + 0, 1); // ? return X_ERROR_SUCCESS; } case 0x00058020: { // 0x00058004 is called right before this. // We should create a XamEnumerate-able empty list here, but I'm not // sure of the format. // buffer_length seems to be the same ptr sent to 0x00058004. XELOGD("XLiveBaseFriendsCreateEnumerator(%.8X, %.8X) unimplemented", buffer_ptr, buffer_length); return X_STATUS_UNSUCCESSFUL; } case 0x00058023: { XELOGD("XliveBaseUnk58023(%.8X, %.8X) unimplemented", buffer_ptr, buffer_length); return X_STATUS_UNSUCCESSFUL; } } XELOGE( "Unimplemented XLIVEBASE message app=%.8X, msg=%.8X, arg1=%.8X, " "arg2=%.8X", app_id(), message, buffer_ptr, buffer_length); return X_STATUS_UNSUCCESSFUL; } } // namespace apps } // namespace xam } // namespace kernel } // namespace xe