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