Merge branch '1820' into orange
This commit is contained in:
		@@ -43,6 +43,7 @@ namespace Log {
 | 
			
		||||
        SUB(Service, AM) \
 | 
			
		||||
        SUB(Service, PTM) \
 | 
			
		||||
        SUB(Service, LDR) \
 | 
			
		||||
        SUB(Service, MIC) \
 | 
			
		||||
        SUB(Service, NDM) \
 | 
			
		||||
        SUB(Service, NIM) \
 | 
			
		||||
        SUB(Service, NWM) \
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ enum class Class : ClassType {
 | 
			
		||||
    Service_AM,                 ///< The AM (Application manager) service
 | 
			
		||||
    Service_PTM,                ///< The PTM (Power status & misc.) service
 | 
			
		||||
    Service_LDR,                ///< The LDR (3ds dll loader) service
 | 
			
		||||
    Service_MIC,                ///< The MIC (Microphone) service
 | 
			
		||||
    Service_NDM,                ///< The NDM (Network daemon manager) service
 | 
			
		||||
    Service_NIM,                ///< The NIM (Network interface manager) service
 | 
			
		||||
    Service_NWM,                ///< The NWM (Network wlan manager) service
 | 
			
		||||
 
 | 
			
		||||
@@ -67,6 +67,24 @@ static void IsConnected(Service::Interface* self) {
 | 
			
		||||
    LOG_WARNING(Service_AC, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * AC_U::SetClientVersion service function
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      1 : Used SDK Version
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
static void SetClientVersion(Service::Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    const u32 version = cmd_buff[1];
 | 
			
		||||
    self->SetVersion(version);
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_AC, "(STUBBED) called, version: 0x%08X", version);
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw; // No error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Interface::FunctionInfo FunctionTable[] = {
 | 
			
		||||
    {0x00010000, nullptr,               "CreateDefaultConfig"},
 | 
			
		||||
    {0x00040006, nullptr,               "ConnectAsync"},
 | 
			
		||||
@@ -84,7 +102,7 @@ const Interface::FunctionInfo FunctionTable[] = {
 | 
			
		||||
    {0x00300004, nullptr,               "RegisterDisconnectEvent"},
 | 
			
		||||
    {0x003C0042, nullptr,               "GetAPSSIDList"},
 | 
			
		||||
    {0x003E0042, IsConnected,           "IsConnected"},
 | 
			
		||||
    {0x00400042, nullptr,               "SetClientVersion"},
 | 
			
		||||
    {0x00400042, SetClientVersion,      "SetClientVersion"},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,7 @@ void GetMyFriendKey(Service::Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw; // No error
 | 
			
		||||
    Memory::WriteBlock(cmd_buff[2], &my_friend_key, sizeof(FriendKey));
 | 
			
		||||
    std::memcpy(&cmd_buff[2], &my_friend_key, sizeof(FriendKey));
 | 
			
		||||
    LOG_WARNING(Service_FRD, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -99,6 +99,18 @@ void GetMyScreenName(Service::Interface* self) {
 | 
			
		||||
    LOG_WARNING(Service_FRD, "(STUBBED) called");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SetClientSdkVersion(Service::Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    const u32 version = cmd_buff[1];
 | 
			
		||||
 | 
			
		||||
    self->SetVersion(version);
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_FRD, "(STUBBED) called, version: 0x%08X", version);
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw; // No error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Init() {
 | 
			
		||||
    using namespace Kernel;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -95,6 +95,15 @@ void GetMyFriendKey(Service::Interface* self);
 | 
			
		||||
 */
 | 
			
		||||
void GetMyScreenName(Service::Interface* self);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * FRD::SetClientSdkVersion service function
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      1 : Used SDK Version
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
void SetClientSdkVersion(Service::Interface* self);
 | 
			
		||||
 | 
			
		||||
/// Initialize FRD service(s)
 | 
			
		||||
void Init();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ const Interface::FunctionInfo FunctionTable[] = {
 | 
			
		||||
    {0x002F0040, nullptr,                 "AllowHalfAwake"},
 | 
			
		||||
    {0x00300000, nullptr,                 "GetServerTypes"},
 | 
			
		||||
    {0x00310082, nullptr,                 "GetFriendComment"},
 | 
			
		||||
    {0x00320042, nullptr,                 "SetClientSdkVersion"},
 | 
			
		||||
    {0x00320042, SetClientSdkVersion,     "SetClientSdkVersion"},
 | 
			
		||||
    {0x00330000, nullptr,                 "GetMyApproachContext"},
 | 
			
		||||
    {0x00340046, nullptr,                 "AddFriendWithApproach"},
 | 
			
		||||
    {0x00350082, nullptr,                 "DecryptApproachContext"},
 | 
			
		||||
 
 | 
			
		||||
@@ -705,24 +705,25 @@ static void CreateLegacySystemSaveData(Service::Interface* self) {
 | 
			
		||||
/**
 | 
			
		||||
 * FS_User::InitializeWithSdkVersion service function.
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      0 : 0x08610042
 | 
			
		||||
 *      1 : Unknown
 | 
			
		||||
 *      2 : Unknown
 | 
			
		||||
 *      3 : Unknown
 | 
			
		||||
 *      1 : Used SDK Version
 | 
			
		||||
 *      2 : ProcessId Header
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
static void InitializeWithSdkVersion(Service::Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    u32 unk1 = cmd_buff[1];
 | 
			
		||||
    u32 unk2 = cmd_buff[2];
 | 
			
		||||
    u32 unk3 = cmd_buff[3];
 | 
			
		||||
    const u32 version = cmd_buff[1];
 | 
			
		||||
    self->SetVersion(version);
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_FS, "(STUBBED) called unk1=0x%08X, unk2=0x%08X, unk3=0x%08X",
 | 
			
		||||
                unk1, unk2, unk3);
 | 
			
		||||
    if (cmd_buff[2] == IPC::CallingPidDesc()) {
 | 
			
		||||
        LOG_WARNING(Service_FS, "(STUBBED) called, version: 0x%08X", version);
 | 
			
		||||
        cmd_buff[1] = RESULT_SUCCESS.raw;
 | 
			
		||||
    } else {
 | 
			
		||||
        LOG_ERROR(Service_FS, "ProcessId Header must be 0x20");
 | 
			
		||||
        cmd_buff[1] = ResultCode(ErrorDescription::OS_InvalidBufferDescriptor, ErrorModule::OS,
 | 
			
		||||
                                 ErrorSummary::WrongArgument, ErrorLevel::Permanent).raw;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,8 @@
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include "common/logging/log.h"
 | 
			
		||||
 | 
			
		||||
#include "core/hle/service/mic_u.h"
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@@ -9,6 +11,25 @@
 | 
			
		||||
 | 
			
		||||
namespace MIC_U {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MIC_U::SetClientVersion service function
 | 
			
		||||
 *  Inputs:
 | 
			
		||||
 *      1 : Used SDK Version
 | 
			
		||||
 *  Outputs:
 | 
			
		||||
 *      1 : Result of function, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
static void SetClientVersion(Service::Interface* self) {
 | 
			
		||||
    u32* cmd_buff = Kernel::GetCommandBuffer();
 | 
			
		||||
 | 
			
		||||
    const u32 version = cmd_buff[1];
 | 
			
		||||
    self->SetVersion(version);
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_MIC, "(STUBBED) called, version: 0x%08X", version);
 | 
			
		||||
 | 
			
		||||
    cmd_buff[1] = RESULT_SUCCESS.raw; // No error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const Interface::FunctionInfo FunctionTable[] = {
 | 
			
		||||
    {0x00010042, nullptr,               "MapSharedMem"},
 | 
			
		||||
    {0x00020000, nullptr,               "UnmapSharedMem"},
 | 
			
		||||
@@ -25,7 +46,7 @@ const Interface::FunctionInfo FunctionTable[] = {
 | 
			
		||||
    {0x000D0040, nullptr,               "SetClamp"},
 | 
			
		||||
    {0x000E0000, nullptr,               "GetClamp"},
 | 
			
		||||
    {0x000F0040, nullptr,               "SetAllowShellClosed"},
 | 
			
		||||
    {0x00100040, nullptr,               "unknown_input2"},
 | 
			
		||||
    {0x00100040, SetClientVersion,      "SetClientVersion"},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@ class Interface : public Kernel::Session {
 | 
			
		||||
    // processes.
 | 
			
		||||
public:
 | 
			
		||||
    std::string GetName() const override { return GetPortName(); }
 | 
			
		||||
    virtual void SetVersion(u32 raw_version) { version.raw = raw_version; }
 | 
			
		||||
 | 
			
		||||
    typedef void (*Function)(Interface*);
 | 
			
		||||
 | 
			
		||||
@@ -60,6 +61,14 @@ protected:
 | 
			
		||||
 | 
			
		||||
    void Register(const FunctionInfo* functions, size_t n);
 | 
			
		||||
 | 
			
		||||
    union {
 | 
			
		||||
        u32 raw;
 | 
			
		||||
        BitField< 0, 8, u32> major;
 | 
			
		||||
        BitField< 8, 8, u32> minor;
 | 
			
		||||
        BitField<16, 8, u32> build;
 | 
			
		||||
        BitField<24, 8, u32> revision;
 | 
			
		||||
    } version = {};
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    boost::container::flat_map<u32, FunctionInfo> m_functions;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user