service: Add nfc services

3dbrew was used for the command information.
This commit is contained in:
Lioncash 2016-12-08 02:43:27 -05:00
parent 43558dc40a
commit e8a960f6a1
8 changed files with 199 additions and 30 deletions

View file

@ -107,6 +107,9 @@ set(SRCS
hle/service/mic_u.cpp hle/service/mic_u.cpp
hle/service/ndm/ndm.cpp hle/service/ndm/ndm.cpp
hle/service/ndm/ndm_u.cpp hle/service/ndm/ndm_u.cpp
hle/service/nfc/nfc.cpp
hle/service/nfc/nfc_m.cpp
hle/service/nfc/nfc_u.cpp
hle/service/news/news.cpp hle/service/news/news.cpp
hle/service/news/news_s.cpp hle/service/news/news_s.cpp
hle/service/news/news_u.cpp hle/service/news/news_u.cpp
@ -258,6 +261,9 @@ set(HEADERS
hle/service/mic_u.h hle/service/mic_u.h
hle/service/ndm/ndm.h hle/service/ndm/ndm.h
hle/service/ndm/ndm_u.h hle/service/ndm/ndm_u.h
hle/service/nfc/nfc.h
hle/service/nfc/nfc_m.h
hle/service/nfc/nfc_u.h
hle/service/news/news.h hle/service/news/news.h
hle/service/news/news_s.h hle/service/news/news_s.h
hle/service/news/news_u.h hle/service/news/news_u.h

View file

@ -0,0 +1,18 @@
// Copyright 2016 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include "core/hle/service/nfc/nfc.h"
#include "core/hle/service/nfc/nfc_m.h"
#include "core/hle/service/nfc/nfc_u.h"
namespace Service {
namespace NFC {
void Init() {
AddService(new NFC_M());
AddService(new NFC_U());
}
} // namespace NFC
} // namespace Service

View file

@ -0,0 +1,14 @@
// Copyright 2016 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
namespace Service {
namespace NFC {
/// Initialize all NFC services.
void Init();
} // namespace NFC
} // namespace Service

View file

@ -0,0 +1,44 @@
// Copyright 2016 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include "core/hle/service/nfc/nfc_m.h"
namespace Service {
namespace NFC {
const Interface::FunctionInfo FunctionTable[] = {
// clang-format off
// nfc:u shared commands
{0x00010040, nullptr, "Initialize"},
{0x00020040, nullptr, "Shutdown"},
{0x00030000, nullptr, "StartCommunication"},
{0x00040000, nullptr, "StopCommunication"},
{0x00050040, nullptr, "StartTagScanning"},
{0x00060000, nullptr, "StopTagScanning"},
{0x00070000, nullptr, "LoadAmiiboData"},
{0x00080000, nullptr, "ResetTagScanState"},
{0x00090002, nullptr, "UpdateStoredAmiiboData"},
{0x000D0000, nullptr, "GetTagState"},
{0x000F0000, nullptr, "CommunicationGetStatus"},
{0x00100000, nullptr, "GetTagInfo2"},
{0x00110000, nullptr, "GetTagInfo"},
{0x00120000, nullptr, "CommunicationGetResult"},
{0x00130040, nullptr, "OpenAppData"},
{0x00140384, nullptr, "InitializeWriteAppData"},
{0x00150040, nullptr, "ReadAppData"},
{0x00160242, nullptr, "WriteAppData"},
{0x00170000, nullptr, "GetAmiiboSettings"},
{0x00180000, nullptr, "GetAmiiboConfig"},
{0x00190000, nullptr, "GetAppDataInitStruct"},
// nfc:m
{0x04040A40, nullptr, "SetAmiiboSettings"}
// clang-format on
};
NFC_M::NFC_M() {
Register(FunctionTable);
}
} // namespace NFC
} // namespace Service

View file

@ -0,0 +1,22 @@
// Copyright 2016 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 NFC {
class NFC_M final : public Interface {
public:
NFC_M();
std::string GetPortName() const override {
return "nfc:m";
}
};
} // namespace NFC
} // namespace Service

View file

@ -0,0 +1,41 @@
// Copyright 2016 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include "core/hle/service/nfc/nfc_u.h"
namespace Service {
namespace NFC {
const Interface::FunctionInfo FunctionTable[] = {
// clang-format off
{0x00010040, nullptr, "Initialize"},
{0x00020040, nullptr, "Shutdown"},
{0x00030000, nullptr, "StartCommunication"},
{0x00040000, nullptr, "StopCommunication"},
{0x00050040, nullptr, "StartTagScanning"},
{0x00060000, nullptr, "StopTagScanning"},
{0x00070000, nullptr, "LoadAmiiboData"},
{0x00080000, nullptr, "ResetTagScanState"},
{0x00090002, nullptr, "UpdateStoredAmiiboData"},
{0x000D0000, nullptr, "GetTagState"},
{0x000F0000, nullptr, "CommunicationGetStatus"},
{0x00100000, nullptr, "GetTagInfo2"},
{0x00110000, nullptr, "GetTagInfo"},
{0x00120000, nullptr, "CommunicationGetResult"},
{0x00130040, nullptr, "OpenAppData"},
{0x00140384, nullptr, "InitializeWriteAppData"},
{0x00150040, nullptr, "ReadAppData"},
{0x00160242, nullptr, "WriteAppData"},
{0x00170000, nullptr, "GetAmiiboSettings"},
{0x00180000, nullptr, "GetAmiiboConfig"},
{0x00190000, nullptr, "GetAppDataInitStruct"},
// clang-format on
};
NFC_U::NFC_U() {
Register(FunctionTable);
}
} // namespace NFC
} // namespace Service

View file

@ -0,0 +1,22 @@
// Copyright 2016 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 NFC {
class NFC_U final : public Interface {
public:
NFC_U();
std::string GetPortName() const override {
return "nfc:u";
}
};
} // namespace NFC
} // namespace Service

View file

@ -28,6 +28,7 @@
#include "core/hle/service/mic_u.h" #include "core/hle/service/mic_u.h"
#include "core/hle/service/ndm/ndm.h" #include "core/hle/service/ndm/ndm.h"
#include "core/hle/service/news/news.h" #include "core/hle/service/news/news.h"
#include "core/hle/service/nfc/nfc.h"
#include "core/hle/service/nim/nim.h" #include "core/hle/service/nim/nim.h"
#include "core/hle/service/ns_s.h" #include "core/hle/service/ns_s.h"
#include "core/hle/service/nwm_uds.h" #include "core/hle/service/nwm_uds.h"
@ -109,21 +110,22 @@ void Init() {
AddNamedPort(new SRV::Interface); AddNamedPort(new SRV::Interface);
AddNamedPort(new ERR_F::Interface); AddNamedPort(new ERR_F::Interface);
Service::FS::ArchiveInit(); FS::ArchiveInit();
Service::AM::Init(); AM::Init();
Service::APT::Init(); APT::Init();
Service::BOSS::Init(); BOSS::Init();
Service::CAM::Init(); CAM::Init();
Service::CECD::Init(); CECD::Init();
Service::CFG::Init(); CFG::Init();
Service::DLP::Init(); DLP::Init();
Service::FRD::Init(); FRD::Init();
Service::HID::Init(); HID::Init();
Service::IR::Init(); IR::Init();
Service::NEWS::Init(); NDM::Init();
Service::NDM::Init(); NEWS::Init();
Service::NIM::Init(); NFC::Init();
Service::PTM::Init(); NIM::Init();
PTM::Init();
AddService(new AC_U::Interface); AddService(new AC_U::Interface);
AddService(new ACT_A::Interface); AddService(new ACT_A::Interface);
@ -148,21 +150,21 @@ void Init() {
/// Shutdown ServiceManager /// Shutdown ServiceManager
void Shutdown() { void Shutdown() {
Service::PTM::Shutdown(); PTM::Shutdown();
Service::NDM::Shutdown(); NIM::Shutdown();
Service::NIM::Shutdown(); NEWS::Shutdown();
Service::NEWS::Shutdown(); NDM::Shutdown();
Service::IR::Shutdown(); IR::Shutdown();
Service::HID::Shutdown(); HID::Shutdown();
Service::FRD::Shutdown(); FRD::Shutdown();
Service::DLP::Shutdown(); DLP::Shutdown();
Service::CFG::Shutdown(); CFG::Shutdown();
Service::CECD::Shutdown(); CECD::Shutdown();
Service::CAM::Shutdown(); CAM::Shutdown();
Service::BOSS::Shutdown(); BOSS::Shutdown();
Service::APT::Shutdown(); APT::Shutdown();
Service::AM::Shutdown(); AM::Shutdown();
Service::FS::ArchiveShutdown(); FS::ArchiveShutdown();
g_srv_services.clear(); g_srv_services.clear();
g_kernel_named_ports.clear(); g_kernel_named_ports.clear();