mirror of
https://github.com/xenia-project/xenia.git
synced 2025-12-06 07:12:03 +01:00
[XAM/APP] Recording more Xam app messages
- Recording more xam app messages for future reference - Removed mistakes from messenger_app.h - Added missing buffer_ptr, buffer_length to unknown message id logs
This commit is contained in:
parent
60318a5db6
commit
ccf7adf015
|
|
@ -27,15 +27,21 @@ X_RESULT MessengerApp::DispatchMessageSync(uint32_t message,
|
||||||
auto buffer = memory_->TranslateVirtual(buffer_ptr);
|
auto buffer = memory_->TranslateVirtual(buffer_ptr);
|
||||||
switch (message) {
|
switch (message) {
|
||||||
case 0x00200002: {
|
case 0x00200002: {
|
||||||
// Used on start in blades dashboard v5759 (marketplace update) and
|
// Used on start in blades dashboard v5759 (marketplace update) and 6717
|
||||||
// possibly to 6717 with netplay
|
XELOGD("MessengerUnk200002({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
XELOGD("MessengerUnk200002, unimplemented");
|
buffer_length);
|
||||||
|
return X_E_FAIL;
|
||||||
|
}
|
||||||
|
case 0x00200018: {
|
||||||
|
// Used on logging out in blades 6717
|
||||||
|
XELOGD("MessengerUnk200018({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
return X_E_FAIL;
|
return X_E_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XELOGE(
|
XELOGE(
|
||||||
"Unimplemented Messenger message app=%.8X, msg=%.8X, arg1=%.8X, "
|
"Unimplemented Messenger message app={:08X}, msg={:08X}, arg1={:08X}, "
|
||||||
"arg2=%.8X",
|
"arg2={:08X}",
|
||||||
app_id(), message, buffer_ptr, buffer_length);
|
app_id(), message, buffer_ptr, buffer_length);
|
||||||
return X_STATUS_UNSUCCESSFUL;
|
return X_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef XENIA_KERNEL_XAM_APPS_UNKNOWN_F7_APP_H_
|
#ifndef XENIA_KERNEL_XAM_APPS_MESSENGER_APP_H_
|
||||||
#define XENIA_KERNEL_XAM_APPS_UNKNOWN_F7_APP_H_
|
#define XENIA_KERNEL_XAM_APPS_MESSENGER_APP_H_
|
||||||
|
|
||||||
#include "xenia/kernel/kernel_state.h"
|
#include "xenia/kernel/kernel_state.h"
|
||||||
#include "xenia/kernel/xam/app_manager.h"
|
#include "xenia/kernel/xam/app_manager.h"
|
||||||
|
|
@ -31,4 +31,4 @@ class MessengerApp : public App {
|
||||||
} // namespace kernel
|
} // namespace kernel
|
||||||
} // namespace xe
|
} // namespace xe
|
||||||
|
|
||||||
#endif // XENIA_KERNEL_XAM_APPS_UNKNOWN_FE_APP_H_
|
#endif XENIA_KERNEL_XAM_APPS_MESSENGER_APP_H_
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,11 @@
|
||||||
#include "xenia/kernel/kernel_state.h"
|
#include "xenia/kernel/kernel_state.h"
|
||||||
#include "xenia/kernel/xenumerator.h"
|
#include "xenia/kernel/xenumerator.h"
|
||||||
|
|
||||||
|
// Notes:
|
||||||
|
// - Messages ids that start with 0x00021xxx are UI calls
|
||||||
|
// - Messages ids that start with 0x00023xxx are used for the user profile
|
||||||
|
// - Messages ids that start with 0x0002Bxxx are used for the Kinect
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace kernel {
|
namespace kernel {
|
||||||
namespace xam {
|
namespace xam {
|
||||||
|
|
@ -88,10 +93,6 @@ X_HRESULT XamApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
(uint32_t)data->unk_48);
|
(uint32_t)data->unk_48);
|
||||||
return X_E_SUCCESS;
|
return X_E_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x00021012: {
|
|
||||||
XELOGD("XamApp(0x00021012)");
|
|
||||||
return X_E_SUCCESS;
|
|
||||||
}
|
|
||||||
case 0x00022005: {
|
case 0x00022005: {
|
||||||
struct message_data {
|
struct message_data {
|
||||||
xe::be<uint32_t> deployment_type_ptr;
|
xe::be<uint32_t> deployment_type_ptr;
|
||||||
|
|
@ -105,6 +106,13 @@ X_HRESULT XamApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
data->deployment_type_ptr.get(), data->overlapped_ptr.get());
|
data->deployment_type_ptr.get(), data->overlapped_ptr.get());
|
||||||
return X_E_SUCCESS;
|
return X_E_SUCCESS;
|
||||||
}
|
}
|
||||||
|
case 0x0002B003: {
|
||||||
|
// Games used in:
|
||||||
|
// 4D5309C9
|
||||||
|
XELOGD("XamUnk2B003({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
|
return X_E_SUCCESS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
XELOGE(
|
XELOGE(
|
||||||
"Unimplemented XAM message app={:08X}, msg={:08X}, arg1={:08X}, "
|
"Unimplemented XAM message app={:08X}, msg={:08X}, arg1={:08X}, "
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,43 @@ namespace xe {
|
||||||
namespace kernel {
|
namespace kernel {
|
||||||
namespace xam {
|
namespace xam {
|
||||||
namespace apps {
|
namespace apps {
|
||||||
|
/*
|
||||||
|
* Most of the structs below were found in the Source SDK, provided as stubs.
|
||||||
|
* Specifically, they can be found in the Source 2007 SDK and the Alien Swarm
|
||||||
|
* Source SDK. Both are available on Steam for free. A GitHub mirror of the
|
||||||
|
* Alien Swarm SDK can be found here:
|
||||||
|
* https://github.com/NicolasDe/AlienSwarm/blob/master/src/common/xbox/xboxstubs.h
|
||||||
|
*/
|
||||||
|
|
||||||
struct X_XUSER_ACHIEVEMENT {
|
struct X_XUSER_ACHIEVEMENT {
|
||||||
xe::be<uint32_t> user_idx;
|
xe::be<uint32_t> user_idx;
|
||||||
xe::be<uint32_t> achievement_id;
|
xe::be<uint32_t> achievement_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct XUSER_STATS_VIEW {
|
||||||
|
xe::be<uint32_t> ViewId;
|
||||||
|
xe::be<uint32_t> TotalViewRows;
|
||||||
|
xe::be<uint32_t> NumRows;
|
||||||
|
xe::be<uint32_t> pRows;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct XUSER_STATS_COLUMN {
|
||||||
|
xe::be<uint16_t> ColumnId;
|
||||||
|
X_USER_DATA Value;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct XUSER_STATS_RESET {
|
||||||
|
xe::be<uint32_t> user_index;
|
||||||
|
xe::be<uint32_t> view_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct XUSER_ANID {
|
||||||
|
xe::be<uint32_t> user_index;
|
||||||
|
xe::be<uint32_t> cchAnIdBuffer;
|
||||||
|
xe::be<uint32_t> pszAnIdBuffer;
|
||||||
|
xe::be<uint32_t> value_const; // 1
|
||||||
|
};
|
||||||
|
|
||||||
XgiApp::XgiApp(KernelState* kernel_state) : App(kernel_state, 0xFB) {}
|
XgiApp::XgiApp(KernelState* kernel_state) : App(kernel_state, 0xFB) {}
|
||||||
|
|
||||||
// http://mb.mirage.org/bugzilla/xliveless/main.c
|
// http://mb.mirage.org/bugzilla/xliveless/main.c
|
||||||
|
|
@ -108,6 +139,8 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
return X_E_SUCCESS;
|
return X_E_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x000B0010: {
|
case 0x000B0010: {
|
||||||
|
XELOGD("XSessionCreate({:08X}, {:08X}), implemented in netplay",
|
||||||
|
buffer_ptr, buffer_length);
|
||||||
assert_true(!buffer_length || buffer_length == 28);
|
assert_true(!buffer_length || buffer_length == 28);
|
||||||
// Sequence:
|
// Sequence:
|
||||||
// - XamSessionCreateHandle
|
// - XamSessionCreateHandle
|
||||||
|
|
@ -130,8 +163,8 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
return X_E_SUCCESS;
|
return X_E_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x000B0011: {
|
case 0x000B0011: {
|
||||||
// TODO(PermaNull): reverse buffer contents.
|
XELOGD("XGISessionDelete({:08X}, {:08X}), implemented in netplay",
|
||||||
XELOGD("XGISessionDelete");
|
buffer_ptr, buffer_length);
|
||||||
return X_STATUS_SUCCESS;
|
return X_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x000B0012: {
|
case 0x000B0012: {
|
||||||
|
|
@ -150,16 +183,19 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
case 0x000B0014: {
|
case 0x000B0014: {
|
||||||
// Gets 584107FB in game.
|
// Gets 584107FB in game.
|
||||||
// get high score table?
|
// get high score table?
|
||||||
XELOGD("XGI_unknown");
|
XELOGD("XSessionStart({:08X}), implemented in netplay", buffer_ptr);
|
||||||
return X_STATUS_SUCCESS;
|
return X_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x000B0015: {
|
case 0x000B0015: {
|
||||||
// send high scores?
|
// send high scores?
|
||||||
XELOGD("XGI_unknown");
|
XELOGD("XSessionEnd({:08X}, {:08X}), implemented in netplay", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
return X_STATUS_SUCCESS;
|
return X_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x000B0021: {
|
case 0x000B0021: {
|
||||||
struct XLeaderboard {
|
XELOGD("XUserReadStats");
|
||||||
|
|
||||||
|
struct XUserReadStats {
|
||||||
xe::be<uint32_t> titleId;
|
xe::be<uint32_t> titleId;
|
||||||
xe::be<uint32_t> xuids_count;
|
xe::be<uint32_t> xuids_count;
|
||||||
xe::be<uint32_t> xuids_guest_address;
|
xe::be<uint32_t> xuids_guest_address;
|
||||||
|
|
@ -167,7 +203,7 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
xe::be<uint32_t> specs_guest_address;
|
xe::be<uint32_t> specs_guest_address;
|
||||||
xe::be<uint32_t> results_size;
|
xe::be<uint32_t> results_size;
|
||||||
xe::be<uint32_t> results_guest_address;
|
xe::be<uint32_t> results_guest_address;
|
||||||
}* data = reinterpret_cast<XLeaderboard*>(buffer);
|
}* data = reinterpret_cast<XUserReadStats*>(buffer);
|
||||||
|
|
||||||
if (!data->results_guest_address) {
|
if (!data->results_guest_address) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -177,13 +213,16 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
// Called after opening xbox live arcade and clicking on xbox live v5759
|
// Called after opening xbox live arcade and clicking on xbox live v5759
|
||||||
// to 5787 and called after clicking xbox live in the game library from
|
// to 5787 and called after clicking xbox live in the game library from
|
||||||
// v6683 to v6717
|
// v6683 to v6717
|
||||||
XELOGD("XGIUnkB0036, unimplemented");
|
XELOGD("XGIUnkB0036({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
return X_E_FAIL;
|
return X_E_FAIL;
|
||||||
}
|
}
|
||||||
case 0x000B003D: {
|
case 0x000B003D: {
|
||||||
// Games used in:
|
// Used in 5451082A, 5553081E
|
||||||
// - 5451082a (netplay build).
|
|
||||||
XELOGD("XGIUnkB003D, unimplemented");
|
// XUserGetCachedANID
|
||||||
|
XELOGI("XUserGetANID({:08X}, {:08X}), implemented in netplay", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
return X_E_FAIL;
|
return X_E_FAIL;
|
||||||
}
|
}
|
||||||
case 0x000B0041: {
|
case 0x000B0041: {
|
||||||
|
|
@ -209,10 +248,11 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
}
|
}
|
||||||
xe::store_and_swap<uint32_t>(context + 4, value);
|
xe::store_and_swap<uint32_t>(context + 4, value);
|
||||||
}
|
}
|
||||||
return X_E_FAIL;
|
return X_E_SUCCESS;
|
||||||
}
|
}
|
||||||
case 0x000B0071: {
|
case 0x000B0071: {
|
||||||
XELOGD("XGI 0x000B0071, unimplemented");
|
XELOGD("XGIUnkB0071({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
return X_E_SUCCESS;
|
return X_E_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -439,8 +439,9 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
case 0x0007002B: {
|
case 0x0007002B: {
|
||||||
// Called on the NXE and Kinect dashboard after clicking on the picture,
|
// Called on the NXE and Kinect dashboard after clicking on the picture,
|
||||||
// video, and music library
|
// video, and music library
|
||||||
XELOGD("XMPUnk7002B, unimplemented");
|
XELOGD("XMPUnk7002B({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
return X_E_FAIL;
|
buffer_length);
|
||||||
|
return X_E_INVALIDARG;
|
||||||
}
|
}
|
||||||
case 0x0007002E: {
|
case 0x0007002E: {
|
||||||
assert_true(!buffer_length || buffer_length == 12);
|
assert_true(!buffer_length || buffer_length == 12);
|
||||||
|
|
@ -462,8 +463,9 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
}
|
}
|
||||||
case 0x0007002F: {
|
case 0x0007002F: {
|
||||||
// Called on the start up of all dashboard versions before kinect
|
// Called on the start up of all dashboard versions before kinect
|
||||||
XELOGD("XMPUnk7002F, unimplemented");
|
XELOGD("XMPUnk7002F({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
return X_E_FAIL;
|
buffer_length);
|
||||||
|
return X_E_INVALIDARG;
|
||||||
}
|
}
|
||||||
case 0x0007003D: {
|
case 0x0007003D: {
|
||||||
// XMPCaptureOutput
|
// XMPCaptureOutput
|
||||||
|
|
@ -485,16 +487,19 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||||
}
|
}
|
||||||
case 0x00070044: {
|
case 0x00070044: {
|
||||||
// Called on the start up of all dashboard versions before kinect
|
// Called on the start up of all dashboard versions before kinect
|
||||||
// When it returns X_E_FAIL you can access the music player up to version
|
// When it returns X_E_INVALIDARG you can access the music player up to
|
||||||
// 5787
|
// version 5787
|
||||||
XELOGD("XMPUnk70044, unimplemented");
|
XELOGD("XMPUnk70044({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
return X_E_FAIL;
|
buffer_length);
|
||||||
|
return X_E_INVALIDARG;
|
||||||
}
|
}
|
||||||
case 0x00070053: {
|
case 0x00070053: {
|
||||||
// Called on the blades dashboard after clicking on the picture,
|
// Called on the blades dashboard after clicking on the picture,
|
||||||
// video, and music library
|
// video, and music library in rapid succession then freezes
|
||||||
XELOGD("XMPUnk70053, unimplemented");
|
// it only recieves buffer
|
||||||
return X_E_FAIL;
|
XELOGD("XMPUnk70053({:08X}, {:08X}), unimplemented", buffer_ptr,
|
||||||
|
buffer_length);
|
||||||
|
return X_E_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XELOGE(
|
XELOGE(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue