From c001a2af2519d69137b4cb7584daba84964c836c Mon Sep 17 00:00:00 2001 From: german77 Date: Wed, 16 Jun 2021 01:03:56 -0500 Subject: nfp: Move IUser class to header and add missing enum and structs --- src/core/hle/service/nfp/nfp.h | 102 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) (limited to 'src/core/hle/service/nfp/nfp.h') diff --git a/src/core/hle/service/nfp/nfp.h b/src/core/hle/service/nfp/nfp.h index 95c127efb..8d9db880a 100644 --- a/src/core/hle/service/nfp/nfp.h +++ b/src/core/hle/service/nfp/nfp.h @@ -8,6 +8,8 @@ #include #include "core/hle/service/kernel_helpers.h" +#include "core/hle/kernel/k_event.h" +#include "core/hle/service/mii/manager.h" #include "core/hle/service/service.h" namespace Kernel { @@ -16,6 +18,106 @@ class KEvent; namespace Service::NFP { +enum class ServiceType : u32 { + User = 0, + Debug = 1, + System = 2, +}; + +enum class State : u32 { + NonInitialized = 0, + Initialized = 1, +}; + +enum class DeviceState : u32 { + Initialized = 0, + SearchingForTag = 1, + TagFound = 2, + TagRemoved = 3, + TagMounted = 4, + Unaviable = 5, + Finalized = 6 +}; + +enum class MountTarget : u32 { + Rom = 1, + Ram = 2, + All = 3, +}; + +struct TagInfo { + std::array uuid; + u8 uuid_length; + INSERT_PADDING_BYTES(0x15); + u32_le protocol; + u32_le tag_type; + INSERT_PADDING_BYTES(0x2c); +}; +static_assert(sizeof(TagInfo) == 0x54, "TagInfo is an invalid size"); + +struct CommonInfo { + u16_be last_write_year; + u8 last_write_month; + u8 last_write_day; + u16_be write_counter; + u16_be version; + u32_be application_area_size; + INSERT_PADDING_BYTES(0x34); +}; +static_assert(sizeof(CommonInfo) == 0x40, "CommonInfo is an invalid size"); + +struct ModelInfo { + std::array ammibo_id; + INSERT_PADDING_BYTES(0x38); +}; +static_assert(sizeof(ModelInfo) == 0x40, "ModelInfo is an invalid size"); + +struct RegisterInfo { + Service::Mii::MiiInfo mii; + u16_be first_write_year; + u8 first_write_month; + u8 first_write_day; + std::array amiibo_name; + INSERT_PADDING_BYTES(0x99); +}; +// static_assert(sizeof(RegisterInfo) == 0x106, "RegisterInfo is an invalid size"); + +class IUser final : public ServiceFramework { +public: + explicit IUser(Module::Interface& nfp_interface_, Core::System& system_); + +private: + void Initialize(Kernel::HLERequestContext& ctx); + void Finalize(Kernel::HLERequestContext& ctx); + void ListDevices(Kernel::HLERequestContext& ctx); + void StartDetection(Kernel::HLERequestContext& ctx); + void StopDetection(Kernel::HLERequestContext& ctx); + void Mount(Kernel::HLERequestContext& ctx); + void Unmount(Kernel::HLERequestContext& ctx); + void OpenApplicationArea(Kernel::HLERequestContext& ctx); + void GetApplicationArea(Kernel::HLERequestContext& ctx); + void GetTagInfo(Kernel::HLERequestContext& ctx); + void GetRegisterInfo(Kernel::HLERequestContext& ctx); + void GetCommonInfo(Kernel::HLERequestContext& ctx); + void GetModelInfo(Kernel::HLERequestContext& ctx); + void AttachActivateEvent(Kernel::HLERequestContext& ctx); + void AttachDeactivateEvent(Kernel::HLERequestContext& ctx); + void GetState(Kernel::HLERequestContext& ctx); + void GetDeviceState(Kernel::HLERequestContext& ctx); + void GetNpadId(Kernel::HLERequestContext& ctx); + void GetApplicationAreaSize(Kernel::HLERequestContext& ctx); + void AttachAvailabilityChangeEvent(Kernel::HLERequestContext& ctx); + + bool has_attached_handle{}; + const u64 device_handle{0}; // Npad device 1 + const u32 npad_id{0}; // Player 1 controller + State state{State::NonInitialized}; + DeviceState device_state{DeviceState::Initialized}; + Module::Interface& nfp_interface; + Kernel::KEvent deactivate_event; + Kernel::KEvent availability_change_event; +}; + class Module final { public: class Interface : public ServiceFramework { -- cgit v1.2.3