summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nfc/nfc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/service/nfc/nfc.cpp')
-rw-r--r--src/core/hle/service/nfc/nfc.cpp159
1 files changed, 112 insertions, 47 deletions
diff --git a/src/core/hle/service/nfc/nfc.cpp b/src/core/hle/service/nfc/nfc.cpp
index 6595e34ed..30ae989b9 100644
--- a/src/core/hle/service/nfc/nfc.cpp
+++ b/src/core/hle/service/nfc/nfc.cpp
@@ -6,14 +6,115 @@
#include "common/logging/log.h"
#include "common/settings.h"
#include "core/hle/service/ipc_helpers.h"
-#include "core/hle/service/nfc/mifare_user.h"
#include "core/hle/service/nfc/nfc.h"
-#include "core/hle/service/nfc/nfc_user.h"
+#include "core/hle/service/nfc/nfc_interface.h"
#include "core/hle/service/server_manager.h"
#include "core/hle/service/service.h"
namespace Service::NFC {
+class IUser final : public NfcInterface {
+public:
+ explicit IUser(Core::System& system_) : NfcInterface(system_, "NFC::IUser", BackendType::Nfc) {
+ // clang-format off
+ static const FunctionInfo functions[] = {
+ {0, &NfcInterface::Initialize, "InitializeOld"},
+ {1, &NfcInterface::Finalize, "FinalizeOld"},
+ {2, &NfcInterface::GetState, "GetStateOld"},
+ {3, &NfcInterface::IsNfcEnabled, "IsNfcEnabledOld"},
+ {400, &NfcInterface::Initialize, "Initialize"},
+ {401, &NfcInterface::Finalize, "Finalize"},
+ {402, &NfcInterface::GetState, "GetState"},
+ {403, &NfcInterface::IsNfcEnabled, "IsNfcEnabled"},
+ {404, &NfcInterface::ListDevices, "ListDevices"},
+ {405, &NfcInterface::GetDeviceState, "GetDeviceState"},
+ {406, &NfcInterface::GetNpadId, "GetNpadId"},
+ {407, &NfcInterface::AttachAvailabilityChangeEvent, "AttachAvailabilityChangeEvent"},
+ {408, &NfcInterface::StartDetection, "StartDetection"},
+ {409, &NfcInterface::StopDetection, "StopDetection"},
+ {410, &NfcInterface::GetTagInfo, "GetTagInfo"},
+ {411, &NfcInterface::AttachActivateEvent, "AttachActivateEvent"},
+ {412, &NfcInterface::AttachDeactivateEvent, "AttachDeactivateEvent"},
+ {1000, &NfcInterface::ReadMifare, "ReadMifare"},
+ {1001, &NfcInterface::WriteMifare ,"WriteMifare"},
+ {1300, &NfcInterface::SendCommandByPassThrough, "SendCommandByPassThrough"},
+ {1301, nullptr, "KeepPassThroughSession"},
+ {1302, nullptr, "ReleasePassThroughSession"},
+ };
+ // clang-format on
+
+ RegisterHandlers(functions);
+ }
+};
+
+class ISystem final : public NfcInterface {
+public:
+ explicit ISystem(Core::System& system_)
+ : NfcInterface{system_, "NFC::ISystem", BackendType::Nfc} {
+ // clang-format off
+ static const FunctionInfo functions[] = {
+ {0, &NfcInterface::Initialize, "InitializeOld"},
+ {1, &NfcInterface::Finalize, "FinalizeOld"},
+ {2, &NfcInterface::GetState, "GetStateOld"},
+ {3, &NfcInterface::IsNfcEnabled, "IsNfcEnabledOld"},
+ {100, nullptr, "SetNfcEnabledOld"},
+ {400, &NfcInterface::Initialize, "Initialize"},
+ {401, &NfcInterface::Finalize, "Finalize"},
+ {402, &NfcInterface::GetState, "GetState"},
+ {403, &NfcInterface::IsNfcEnabled, "IsNfcEnabled"},
+ {404, &NfcInterface::ListDevices, "ListDevices"},
+ {405, &NfcInterface::GetDeviceState, "GetDeviceState"},
+ {406, &NfcInterface::GetNpadId, "GetNpadId"},
+ {407, &NfcInterface::AttachAvailabilityChangeEvent, "AttachAvailabilityChangeEvent"},
+ {408, &NfcInterface::StartDetection, "StartDetection"},
+ {409, &NfcInterface::StopDetection, "StopDetection"},
+ {410, &NfcInterface::GetTagInfo, "GetTagInfo"},
+ {411, &NfcInterface::AttachActivateEvent, "AttachActivateEvent"},
+ {412, &NfcInterface::AttachDeactivateEvent, "AttachDeactivateEvent"},
+ {500, nullptr, "SetNfcEnabled"},
+ {510, nullptr, "OutputTestWave"},
+ {1000, &NfcInterface::ReadMifare, "ReadMifare"},
+ {1001, &NfcInterface::WriteMifare, "WriteMifare"},
+ {1300, &NfcInterface::SendCommandByPassThrough, "SendCommandByPassThrough"},
+ {1301, nullptr, "KeepPassThroughSession"},
+ {1302, nullptr, "ReleasePassThroughSession"},
+ };
+ // clang-format on
+
+ RegisterHandlers(functions);
+ }
+};
+
+// MFInterface has an unique interface but it's identical to NfcInterface so we can keep the code
+// simpler
+using MFInterface = NfcInterface;
+class MFIUser final : public MFInterface {
+public:
+ explicit MFIUser(Core::System& system_)
+ : MFInterface{system_, "NFC::MFInterface", BackendType::Mifare} {
+ // clang-format off
+ static const FunctionInfoTyped<MFIUser> functions[] = {
+ {0, &MFIUser::Initialize, "Initialize"},
+ {1, &MFIUser::Finalize, "Finalize"},
+ {2, &MFIUser::ListDevices, "ListDevices"},
+ {3, &MFIUser::StartDetection, "StartDetection"},
+ {4, &MFIUser::StopDetection, "StopDetection"},
+ {5, &MFIUser::ReadMifare, "Read"},
+ {6, &MFIUser::WriteMifare, "Write"},
+ {7, &MFIUser::GetTagInfo, "GetTagInfo"},
+ {8, &MFIUser::AttachActivateEvent, "GetActivateEventHandle"},
+ {9, &MFIUser::AttachDeactivateEvent, "GetDeactivateEventHandle"},
+ {10, &MFIUser::GetState, "GetState"},
+ {11, &MFIUser::GetDeviceState, "GetDeviceState"},
+ {12, &MFIUser::GetNpadId, "GetNpadId"},
+ {13, &MFIUser::AttachAvailabilityChangeEvent, "GetAvailabilityChangeEventHandle"},
+ };
+ // clang-format on
+
+ RegisterHandlers(functions);
+ }
+};
+
class IAm final : public ServiceFramework<IAm> {
public:
explicit IAm(Core::System& system_) : ServiceFramework{system_, "NFC::IAm"} {
@@ -34,7 +135,7 @@ public:
explicit NFC_AM(Core::System& system_) : ServiceFramework{system_, "nfc:am"} {
// clang-format off
static const FunctionInfo functions[] = {
- {0, &NFC_AM::CreateAmInterface, "CreateAmInterface"},
+ {0, &NFC_AM::CreateAmNfcInterface, "CreateAmNfcInterface"},
};
// clang-format on
@@ -42,7 +143,7 @@ public:
}
private:
- void CreateAmInterface(HLERequestContext& ctx) {
+ void CreateAmNfcInterface(HLERequestContext& ctx) {
LOG_DEBUG(Service_NFC, "called");
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
@@ -56,7 +157,7 @@ public:
explicit NFC_MF_U(Core::System& system_) : ServiceFramework{system_, "nfc:mf:u"} {
// clang-format off
static const FunctionInfo functions[] = {
- {0, &NFC_MF_U::CreateUserInterface, "CreateUserInterface"},
+ {0, &NFC_MF_U::CreateUserNfcInterface, "CreateUserNfcInterface"},
};
// clang-format on
@@ -64,7 +165,7 @@ public:
}
private:
- void CreateUserInterface(HLERequestContext& ctx) {
+ void CreateUserNfcInterface(HLERequestContext& ctx) {
LOG_DEBUG(Service_NFC, "called");
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
@@ -78,7 +179,7 @@ public:
explicit NFC_U(Core::System& system_) : ServiceFramework{system_, "nfc:user"} {
// clang-format off
static const FunctionInfo functions[] = {
- {0, &NFC_U::CreateUserInterface, "CreateUserInterface"},
+ {0, &NFC_U::CreateUserNfcInterface, "CreateUserNfcInterface"},
};
// clang-format on
@@ -86,7 +187,7 @@ public:
}
private:
- void CreateUserInterface(HLERequestContext& ctx) {
+ void CreateUserNfcInterface(HLERequestContext& ctx) {
LOG_DEBUG(Service_NFC, "called");
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
@@ -95,49 +196,12 @@ private:
}
};
-class ISystem final : public ServiceFramework<ISystem> {
-public:
- explicit ISystem(Core::System& system_) : ServiceFramework{system_, "ISystem"} {
- // clang-format off
- static const FunctionInfo functions[] = {
- {0, nullptr, "Initialize"},
- {1, nullptr, "Finalize"},
- {2, nullptr, "GetStateOld"},
- {3, nullptr, "IsNfcEnabledOld"},
- {100, nullptr, "SetNfcEnabledOld"},
- {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"},
- {510, nullptr, "OutputTestWave"},
- {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(Core::System& system_) : ServiceFramework{system_, "nfc:sys"} {
// clang-format off
static const FunctionInfo functions[] = {
- {0, &NFC_SYS::CreateSystemInterface, "CreateSystemInterface"},
+ {0, &NFC_SYS::CreateSystemNfcInterface, "CreateSystemNfcInterface"},
};
// clang-format on
@@ -145,7 +209,7 @@ public:
}
private:
- void CreateSystemInterface(HLERequestContext& ctx) {
+ void CreateSystemNfcInterface(HLERequestContext& ctx) {
LOG_DEBUG(Service_NFC, "called");
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
@@ -161,6 +225,7 @@ void LoopProcess(Core::System& system) {
server_manager->RegisterNamedService("nfc:mf:u", std::make_shared<NFC_MF_U>(system));
server_manager->RegisterNamedService("nfc:user", std::make_shared<NFC_U>(system));
server_manager->RegisterNamedService("nfc:sys", std::make_shared<NFC_SYS>(system));
+
ServerManager::RunServer(std::move(server_manager));
}