diff options
author | german77 <juangerman-13@hotmail.com> | 2021-06-16 08:03:56 +0200 |
---|---|---|
committer | german77 <juangerman-13@hotmail.com> | 2022-02-07 16:18:22 +0100 |
commit | c001a2af2519d69137b4cb7584daba84964c836c (patch) | |
tree | 3a503de7e3e211654d27fcc659a70d9953b001f9 /src/core/hle/service/nfp/nfp.h | |
parent | nfp: Sort functions by command number (diff) | |
download | yuzu-c001a2af2519d69137b4cb7584daba84964c836c.tar yuzu-c001a2af2519d69137b4cb7584daba84964c836c.tar.gz yuzu-c001a2af2519d69137b4cb7584daba84964c836c.tar.bz2 yuzu-c001a2af2519d69137b4cb7584daba84964c836c.tar.lz yuzu-c001a2af2519d69137b4cb7584daba84964c836c.tar.xz yuzu-c001a2af2519d69137b4cb7584daba84964c836c.tar.zst yuzu-c001a2af2519d69137b4cb7584daba84964c836c.zip |
Diffstat (limited to 'src/core/hle/service/nfp/nfp.h')
-rw-r--r-- | src/core/hle/service/nfp/nfp.h | 102 |
1 files changed, 102 insertions, 0 deletions
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 <vector> #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<u8, 10> 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<u8, 0x8> 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<u8, 11> amiibo_name; + INSERT_PADDING_BYTES(0x99); +}; +// static_assert(sizeof(RegisterInfo) == 0x106, "RegisterInfo is an invalid size"); + +class IUser final : public ServiceFramework<IUser> { +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<Interface> { |