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
					
				@ -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…
	
		Reference in New Issue
	
	Block a user