committed by
GitHub
6 changed files with 243 additions and 0 deletions
-
1src/common/logging/backend.cpp
-
1src/common/logging/log.h
-
2src/core/CMakeLists.txt
-
222src/core/hle/service/nfc/nfc.cpp
-
15src/core/hle/service/nfc/nfc.h
-
2src/core/hle/service/service.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 |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue