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