mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge pull request #676 from purpasmart96/ir_service_refc
IR: Move The IR services to their own folder and implement "GetHandles"
This commit is contained in:
		
						commit
						e630fd2a95
					
				
					 11 changed files with 188 additions and 59 deletions
				
			
		|  | @ -61,8 +61,10 @@ set(SRCS | |||
|             hle/service/hid/hid_spvr.cpp | ||||
|             hle/service/gsp_lcd.cpp | ||||
|             hle/service/http_c.cpp | ||||
|             hle/service/ir_rst.cpp | ||||
|             hle/service/ir_u.cpp | ||||
|             hle/service/ir/ir.cpp | ||||
|             hle/service/ir/ir_rst.cpp | ||||
|             hle/service/ir/ir_u.cpp | ||||
|             hle/service/ir/ir_user.cpp | ||||
|             hle/service/ldr_ro.cpp | ||||
|             hle/service/mic_u.cpp | ||||
|             hle/service/ndm_u.cpp | ||||
|  | @ -170,8 +172,10 @@ set(HEADERS | |||
|             hle/service/hid/hid_user.h | ||||
|             hle/service/gsp_lcd.h | ||||
|             hle/service/http_c.h | ||||
|             hle/service/ir_rst.h | ||||
|             hle/service/ir_u.h | ||||
|             hle/service/ir/ir.h | ||||
|             hle/service/ir/ir_rst.h | ||||
|             hle/service/ir/ir_u.h | ||||
|             hle/service/ir/ir_user.h | ||||
|             hle/service/ldr_ro.h | ||||
|             hle/service/mic_u.h | ||||
|             hle/service/ndm_u.h | ||||
|  |  | |||
							
								
								
									
										48
									
								
								src/core/hle/service/ir/ir.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/core/hle/service/ir/ir.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | |||
| // Copyright 2015 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "core/hle/service/service.h" | ||||
| #include "core/hle/service/ir/ir.h" | ||||
| #include "core/hle/service/ir/ir_rst.h" | ||||
| #include "core/hle/service/ir/ir_u.h" | ||||
| #include "core/hle/service/ir/ir_user.h" | ||||
| 
 | ||||
| #include "core/hle/hle.h" | ||||
| #include "core/hle/kernel/event.h" | ||||
| #include "core/hle/kernel/shared_memory.h" | ||||
| 
 | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| static Kernel::SharedPtr<Kernel::Event> handle_event = nullptr; | ||||
| static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory = nullptr; | ||||
| 
 | ||||
| void GetHandles(Service::Interface* self) { | ||||
|     u32* cmd_buff = Kernel::GetCommandBuffer(); | ||||
| 
 | ||||
|     cmd_buff[1] = RESULT_SUCCESS.raw; | ||||
|     cmd_buff[2] = 0x4000000; | ||||
|     cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::shared_memory).MoveFrom(); | ||||
|     cmd_buff[4] = Kernel::g_handle_table.Create(Service::IR::handle_event).MoveFrom(); | ||||
| } | ||||
| 
 | ||||
| void Init() { | ||||
|     using namespace Kernel; | ||||
| 
 | ||||
|     AddService(new IR_RST_Interface); | ||||
|     AddService(new IR_U_Interface); | ||||
|     AddService(new IR_User_Interface); | ||||
| 
 | ||||
|     shared_memory = SharedMemory::Create("IR:SharedMemory"); | ||||
| 
 | ||||
|     // Create event handle(s)
 | ||||
|     handle_event  = Event::Create(RESETTYPE_ONESHOT, "IR:HandleEvent"); | ||||
| } | ||||
| 
 | ||||
| void Shutdown() { | ||||
| } | ||||
| 
 | ||||
| } // namespace IR
 | ||||
| 
 | ||||
| } // namespace Service
 | ||||
							
								
								
									
										30
									
								
								src/core/hle/service/ir/ir.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/core/hle/service/ir/ir.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| // Copyright 2015 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| /**
 | ||||
|  * IR::GetHandles service function | ||||
|  *  Outputs: | ||||
|  *      1 : Result of function, 0 on success, otherwise error code | ||||
|  *      2 : Translate header, used by the ARM11-kernel | ||||
|  *      3 : Shared memory handle | ||||
|  *      4 : Event handle | ||||
|  */ | ||||
| void GetHandles(Interface* self); | ||||
| 
 | ||||
| /// Initialize IR service
 | ||||
| void Init(); | ||||
| 
 | ||||
| /// Shutdown IR service
 | ||||
| void Shutdown(); | ||||
| 
 | ||||
| } // namespace IR
 | ||||
| } // namespace Service
 | ||||
							
								
								
									
										24
									
								
								src/core/hle/service/ir/ir_rst.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/core/hle/service/ir/ir_rst.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| // Copyright 2015 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "core/hle/hle.h" | ||||
| #include "core/hle/service/ir/ir.h" | ||||
| #include "core/hle/service/ir/ir_rst.h" | ||||
| 
 | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| const Interface::FunctionInfo FunctionTable[] = { | ||||
|     {0x00010000, GetHandles,              "GetHandles"}, | ||||
|     {0x00020080, nullptr,                 "Initialize"}, | ||||
|     {0x00030000, nullptr,                 "Shutdown"}, | ||||
|     {0x00090000, nullptr,                 "WriteToTwoFields"}, | ||||
| }; | ||||
| 
 | ||||
| IR_RST_Interface::IR_RST_Interface() { | ||||
|     Register(FunctionTable); | ||||
| } | ||||
| 
 | ||||
| } // namespace IR
 | ||||
| } // namespace Service
 | ||||
|  | @ -6,18 +6,17 @@ | |||
| 
 | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // Namespace IR_RST 
 | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| namespace IR_RST { | ||||
| 
 | ||||
| class Interface : public Service::Interface { | ||||
| class IR_RST_Interface : public Service::Interface { | ||||
| public: | ||||
|     Interface(); | ||||
|     IR_RST_Interface(); | ||||
| 
 | ||||
|     std::string GetPortName() const override { | ||||
|         return "ir:rst"; | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| } // namespace
 | ||||
| } // namespace IR
 | ||||
| } // namespace Service
 | ||||
|  | @ -3,12 +3,11 @@ | |||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "core/hle/hle.h" | ||||
| #include "core/hle/service/ir_u.h" | ||||
| #include "core/hle/service/ir/ir.h" | ||||
| #include "core/hle/service/ir/ir_u.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // Namespace IR_U
 | ||||
| 
 | ||||
| namespace IR_U { | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| const Interface::FunctionInfo FunctionTable[] = { | ||||
|     {0x00010000, nullptr,                 "Initialize"}, | ||||
|  | @ -31,11 +30,9 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
|     {0x00120040, nullptr,                 "SetSleepModeState"}, | ||||
| }; | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // Interface class
 | ||||
| 
 | ||||
| Interface::Interface() { | ||||
| IR_U_Interface::IR_U_Interface() { | ||||
|     Register(FunctionTable); | ||||
| } | ||||
| 
 | ||||
| } // namespace
 | ||||
| } // namespace IR
 | ||||
| } // namespace Service
 | ||||
|  | @ -6,18 +6,17 @@ | |||
| 
 | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // Namespace IR_U
 | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| namespace IR_U { | ||||
| 
 | ||||
| class Interface : public Service::Interface { | ||||
| class IR_U_Interface : public Service::Interface { | ||||
| public: | ||||
|     Interface(); | ||||
|     IR_U_Interface(); | ||||
| 
 | ||||
|     std::string GetPortName() const override { | ||||
|         return "ir:u"; | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| } // namespace
 | ||||
| } // namespace IR
 | ||||
| } // namespace Service
 | ||||
							
								
								
									
										34
									
								
								src/core/hle/service/ir/ir_user.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/core/hle/service/ir/ir_user.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| // Copyright 2015 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "core/hle/hle.h" | ||||
| #include "core/hle/service/ir/ir.h" | ||||
| #include "core/hle/service/ir/ir_user.h" | ||||
| 
 | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| const Interface::FunctionInfo FunctionTable[] = { | ||||
|     {0x00010182, nullptr,                 "InitializeIrNop"}, | ||||
|     {0x00020000, nullptr,                 "FinalizeIrNop"}, | ||||
|     {0x00030000, nullptr,                 "ClearReceiveBuffer"}, | ||||
|     {0x00040000, nullptr,                 "ClearSendBuffer"}, | ||||
|     {0x00060040, nullptr,                 "RequireConnection"}, | ||||
|     {0x00090000, nullptr,                 "Disconnect"}, | ||||
|     {0x000A0000, nullptr,                 "GetReceiveEvent"}, | ||||
|     {0x000B0000, nullptr,                 "GetSendEvent"}, | ||||
|     {0x000C0000, nullptr,                 "GetConnectionStatusEvent"}, | ||||
|     {0x000D0042, nullptr,                 "SendIrNop"}, | ||||
|     {0x000E0042, nullptr,                 "SendIrNopLarge"}, | ||||
|     {0x00180182, nullptr,                 "InitializeIrNopShared"}, | ||||
|     {0x00190040, nullptr,                 "ReleaseReceivedData"}, | ||||
|     {0x001A0040, nullptr,                 "SetOwnMachineId"}, | ||||
| }; | ||||
| 
 | ||||
| IR_User_Interface::IR_User_Interface() { | ||||
|     Register(FunctionTable); | ||||
| } | ||||
| 
 | ||||
| } // namespace IR
 | ||||
| } // namespace Service
 | ||||
							
								
								
									
										22
									
								
								src/core/hle/service/ir/ir_user.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/core/hle/service/ir/ir_user.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| // Copyright 2015 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| namespace Service { | ||||
| namespace IR { | ||||
| 
 | ||||
| class IR_User_Interface : public Service::Interface { | ||||
| public: | ||||
|     IR_User_Interface(); | ||||
| 
 | ||||
|     std::string GetPortName() const override { | ||||
|         return "ir:USER"; | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| } // namespace IR
 | ||||
| } // namespace Service
 | ||||
|  | @ -1,27 +0,0 @@ | |||
| // Copyright 2014 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "core/hle/hle.h" | ||||
| #include "core/hle/service/ir_rst.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // Namespace IR_RST
 | ||||
| 
 | ||||
| namespace IR_RST { | ||||
| 
 | ||||
| const Interface::FunctionInfo FunctionTable[] = { | ||||
|     {0x00010000, nullptr,                 "GetHandles"}, | ||||
|     {0x00020080, nullptr,                 "Initialize"}, | ||||
|     {0x00030000, nullptr,                 "Shutdown"}, | ||||
|     {0x00090000, nullptr,                 "WriteToTwoFields"}, | ||||
| }; | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| // Interface class
 | ||||
| 
 | ||||
| Interface::Interface() { | ||||
|     Register(FunctionTable); | ||||
| } | ||||
| 
 | ||||
| } // namespace
 | ||||
|  | @ -24,8 +24,6 @@ | |||
| #include "core/hle/service/gsp_gpu.h" | ||||
| #include "core/hle/service/gsp_lcd.h" | ||||
| #include "core/hle/service/http_c.h" | ||||
| #include "core/hle/service/ir_rst.h" | ||||
| #include "core/hle/service/ir_u.h" | ||||
| #include "core/hle/service/ldr_ro.h" | ||||
| #include "core/hle/service/mic_u.h" | ||||
| #include "core/hle/service/ndm_u.h" | ||||
|  | @ -45,6 +43,7 @@ | |||
| #include "core/hle/service/fs/archive.h" | ||||
| #include "core/hle/service/cfg/cfg.h" | ||||
| #include "core/hle/service/hid/hid.h" | ||||
| #include "core/hle/service/ir/ir.h" | ||||
| #include "core/hle/service/ptm/ptm.h" | ||||
| 
 | ||||
| namespace Service { | ||||
|  | @ -73,6 +72,7 @@ void Init() { | |||
|     Service::APT::Init(); | ||||
|     Service::PTM::Init(); | ||||
|     Service::HID::Init(); | ||||
|     Service::IR::Init(); | ||||
| 
 | ||||
|     AddService(new AC_U::Interface); | ||||
|     AddService(new ACT_U::Interface); | ||||
|  | @ -91,8 +91,6 @@ void Init() { | |||
|     AddService(new GSP_GPU::Interface); | ||||
|     AddService(new GSP_LCD::Interface); | ||||
|     AddService(new HTTP_C::Interface); | ||||
|     AddService(new IR_RST::Interface); | ||||
|     AddService(new IR_U::Interface); | ||||
|     AddService(new LDR_RO::Interface); | ||||
|     AddService(new MIC_U::Interface); | ||||
|     AddService(new NDM_U::Interface); | ||||
|  | @ -112,6 +110,7 @@ void Init() { | |||
| 
 | ||||
| /// Shutdown ServiceManager
 | ||||
| void Shutdown() { | ||||
|     Service::IR::Shutdown(); | ||||
|     Service::HID::Shutdown(); | ||||
|     Service::PTM::Shutdown(); | ||||
|     Service::APT::Shutdown(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue