commit
0191a1e526
|
@ -177,6 +177,7 @@ void FileBackend::Write(const Entry& entry) {
|
||||||
SUB(Service, LDN) \
|
SUB(Service, LDN) \
|
||||||
SUB(Service, LM) \
|
SUB(Service, LM) \
|
||||||
SUB(Service, MM) \
|
SUB(Service, MM) \
|
||||||
|
SUB(Service, NFC) \
|
||||||
SUB(Service, NFP) \
|
SUB(Service, NFP) \
|
||||||
SUB(Service, NIFM) \
|
SUB(Service, NIFM) \
|
||||||
SUB(Service, NS) \
|
SUB(Service, NS) \
|
||||||
|
|
|
@ -64,6 +64,7 @@ enum class Class : ClassType {
|
||||||
Service_LDN, ///< The LDN (Local domain network) service
|
Service_LDN, ///< The LDN (Local domain network) service
|
||||||
Service_LM, ///< The LM (Logger) service
|
Service_LM, ///< The LM (Logger) service
|
||||||
Service_MM, ///< The MM (Multimedia) service
|
Service_MM, ///< The MM (Multimedia) service
|
||||||
|
Service_NFC, ///< The NFC (Near-field communication) service
|
||||||
Service_NFP, ///< The NFP service
|
Service_NFP, ///< The NFP service
|
||||||
Service_NIFM, ///< The NIFM (Network interface) service
|
Service_NIFM, ///< The NIFM (Network interface) service
|
||||||
Service_NS, ///< The NS services
|
Service_NS, ///< The NS services
|
||||||
|
|
|
@ -176,6 +176,8 @@ add_library(core STATIC
|
||||||
hle/service/lm/lm.h
|
hle/service/lm/lm.h
|
||||||
hle/service/mm/mm_u.cpp
|
hle/service/mm/mm_u.cpp
|
||||||
hle/service/mm/mm_u.h
|
hle/service/mm/mm_u.h
|
||||||
|
hle/service/nfc/nfc.cpp
|
||||||
|
hle/service/nfc/nfc.h
|
||||||
hle/service/nfp/nfp.cpp
|
hle/service/nfp/nfp.cpp
|
||||||
hle/service/nfp/nfp.h
|
hle/service/nfp/nfp.h
|
||||||
hle/service/nfp/nfp_user.cpp
|
hle/service/nfp/nfp_user.cpp
|
||||||
|
|
|
@ -0,0 +1,222 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "common/logging/log.h"
|
||||||
|
#include "core/hle/ipc_helpers.h"
|
||||||
|
#include "core/hle/kernel/hle_ipc.h"
|
||||||
|
#include "core/hle/service/nfc/nfc.h"
|
||||||
|
#include "core/hle/service/service.h"
|
||||||
|
#include "core/hle/service/sm/sm.h"
|
||||||
|
|
||||||
|
namespace Service::NFC {
|
||||||
|
|
||||||
|
class IAm final : public ServiceFramework<IAm> {
|
||||||
|
public:
|
||||||
|
explicit IAm() : ServiceFramework{"IAm"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "Initialize"},
|
||||||
|
{1, nullptr, "Finalize"},
|
||||||
|
{2, nullptr, "NotifyForegroundApplet"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class NFC_AM final : public ServiceFramework<NFC_AM> {
|
||||||
|
public:
|
||||||
|
explicit NFC_AM() : ServiceFramework{"nfc:am"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &NFC_AM::CreateAmInterface, "CreateAmInterface"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CreateAmInterface(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<IAm>();
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_NFC, "called");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class MFIUser final : public ServiceFramework<MFIUser> {
|
||||||
|
public:
|
||||||
|
explicit MFIUser() : ServiceFramework{"IUser"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "Initialize"},
|
||||||
|
{1, nullptr, "Finalize"},
|
||||||
|
{2, nullptr, "ListDevices"},
|
||||||
|
{3, nullptr, "StartDetection"},
|
||||||
|
{4, nullptr, "StopDetection"},
|
||||||
|
{5, nullptr, "Read"},
|
||||||
|
{6, nullptr, "Write"},
|
||||||
|
{7, nullptr, "GetTagInfo"},
|
||||||
|
{8, nullptr, "GetActivateEventHandle"},
|
||||||
|
{9, nullptr, "GetDeactivateEventHandle"},
|
||||||
|
{10, nullptr, "GetState"},
|
||||||
|
{11, nullptr, "GetDeviceState"},
|
||||||
|
{12, nullptr, "GetNpadId"},
|
||||||
|
{13, nullptr, "GetAvailabilityChangeEventHandle"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class NFC_MF_U final : public ServiceFramework<NFC_MF_U> {
|
||||||
|
public:
|
||||||
|
explicit NFC_MF_U() : ServiceFramework{"nfc:mf:u"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &NFC_MF_U::CreateUserInterface, "CreateUserInterface"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CreateUserInterface(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<MFIUser>();
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_NFC, "called");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class IUser final : public ServiceFramework<IUser> {
|
||||||
|
public:
|
||||||
|
explicit IUser() : ServiceFramework{"IUser"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "Initialize"},
|
||||||
|
{1, nullptr, "Finalize"},
|
||||||
|
{2, nullptr, "GetState"},
|
||||||
|
{3, nullptr, "IsNfcEnabled"},
|
||||||
|
{400, nullptr, "Initialize"},
|
||||||
|
{401, nullptr, "Finalize"},
|
||||||
|
{402, nullptr, "GetState"},
|
||||||
|
{403, nullptr, "IsNfcEnabled"},
|
||||||
|
{404, nullptr, "ListDevices"},
|
||||||
|
{405, nullptr, "GetDeviceState"},
|
||||||
|
{406, nullptr, "GetNpadId"},
|
||||||
|
{407, nullptr, "AttachAvailabilityChangeEvent"},
|
||||||
|
{408, nullptr, "StartDetection"},
|
||||||
|
{409, nullptr, "StopDetection"},
|
||||||
|
{410, nullptr, "GetTagInfo"},
|
||||||
|
{411, nullptr, "AttachActivateEvent"},
|
||||||
|
{412, nullptr, "AttachDeactivateEvent"},
|
||||||
|
{1000, nullptr, "ReadMifare"},
|
||||||
|
{1001, nullptr, "WriteMifare"},
|
||||||
|
{1300, nullptr, "SendCommandByPassThrough"},
|
||||||
|
{1301, nullptr, "KeepPassThroughSession"},
|
||||||
|
{1302, nullptr, "ReleasePassThroughSession"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class NFC_U final : public ServiceFramework<NFC_U> {
|
||||||
|
public:
|
||||||
|
explicit NFC_U() : ServiceFramework{"nfc:u"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &NFC_U::CreateUserInterface, "CreateUserInterface"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CreateUserInterface(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<IUser>();
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_NFC, "called");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ISystem final : public ServiceFramework<ISystem> {
|
||||||
|
public:
|
||||||
|
explicit ISystem() : ServiceFramework{"ISystem"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "Initialize"},
|
||||||
|
{1, nullptr, "Finalize"},
|
||||||
|
{2, nullptr, "GetState"},
|
||||||
|
{3, nullptr, "IsNfcEnabled"},
|
||||||
|
{100, nullptr, "SetNfcEnabled"},
|
||||||
|
{400, nullptr, "InitializeSystem"},
|
||||||
|
{401, nullptr, "FinalizeSystem"},
|
||||||
|
{402, nullptr, "GetState"},
|
||||||
|
{403, nullptr, "IsNfcEnabled"},
|
||||||
|
{404, nullptr, "ListDevices"},
|
||||||
|
{405, nullptr, "GetDeviceState"},
|
||||||
|
{406, nullptr, "GetNpadId"},
|
||||||
|
{407, nullptr, "AttachAvailabilityChangeEvent"},
|
||||||
|
{408, nullptr, "StartDetection"},
|
||||||
|
{409, nullptr, "StopDetection"},
|
||||||
|
{410, nullptr, "GetTagInfo"},
|
||||||
|
{411, nullptr, "AttachActivateEvent"},
|
||||||
|
{412, nullptr, "AttachDeactivateEvent"},
|
||||||
|
{500, nullptr, "SetNfcEnabled"},
|
||||||
|
{1000, nullptr, "ReadMifare"},
|
||||||
|
{1001, nullptr, "WriteMifare"},
|
||||||
|
{1300, nullptr, "SendCommandByPassThrough"},
|
||||||
|
{1301, nullptr, "KeepPassThroughSession"},
|
||||||
|
{1302, nullptr, "ReleasePassThroughSession"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class NFC_SYS final : public ServiceFramework<NFC_SYS> {
|
||||||
|
public:
|
||||||
|
explicit NFC_SYS() : ServiceFramework{"nfc:sys"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &NFC_SYS::CreateSystemInterface, "CreateSystemInterface"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CreateSystemInterface(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<ISystem>();
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_NFC, "called");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void InstallInterfaces(SM::ServiceManager& sm) {
|
||||||
|
std::make_shared<NFC_AM>()->InstallAsService(sm);
|
||||||
|
std::make_shared<NFC_MF_U>()->InstallAsService(sm);
|
||||||
|
std::make_shared<NFC_U>()->InstallAsService(sm);
|
||||||
|
std::make_shared<NFC_SYS>()->InstallAsService(sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Service::NFC
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Service::SM {
|
||||||
|
class ServiceManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Service::NFC {
|
||||||
|
|
||||||
|
void InstallInterfaces(SM::ServiceManager& sm);
|
||||||
|
|
||||||
|
} // namespace Service::NFC
|
|
@ -35,6 +35,7 @@
|
||||||
#include "core/hle/service/ldr/ldr.h"
|
#include "core/hle/service/ldr/ldr.h"
|
||||||
#include "core/hle/service/lm/lm.h"
|
#include "core/hle/service/lm/lm.h"
|
||||||
#include "core/hle/service/mm/mm_u.h"
|
#include "core/hle/service/mm/mm_u.h"
|
||||||
|
#include "core/hle/service/nfc/nfc.h"
|
||||||
#include "core/hle/service/nfp/nfp.h"
|
#include "core/hle/service/nfp/nfp.h"
|
||||||
#include "core/hle/service/nifm/nifm.h"
|
#include "core/hle/service/nifm/nifm.h"
|
||||||
#include "core/hle/service/nim/nim.h"
|
#include "core/hle/service/nim/nim.h"
|
||||||
|
@ -211,6 +212,7 @@ void Init(std::shared_ptr<SM::ServiceManager>& sm) {
|
||||||
LDR::InstallInterfaces(*sm);
|
LDR::InstallInterfaces(*sm);
|
||||||
LM::InstallInterfaces(*sm);
|
LM::InstallInterfaces(*sm);
|
||||||
MM::InstallInterfaces(*sm);
|
MM::InstallInterfaces(*sm);
|
||||||
|
NFC::InstallInterfaces(*sm);
|
||||||
NFP::InstallInterfaces(*sm);
|
NFP::InstallInterfaces(*sm);
|
||||||
NIFM::InstallInterfaces(*sm);
|
NIFM::InstallInterfaces(*sm);
|
||||||
NIM::InstallInterfaces(*sm);
|
NIM::InstallInterfaces(*sm);
|
||||||
|
|
Reference in New Issue