nfp.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <array>
  6. #include <vector>
  7. #include "core/hle/service/service.h"
  8. namespace Kernel {
  9. class ReadableEvent;
  10. class WritableEvent;
  11. } // namespace Kernel
  12. namespace Service::NFP {
  13. class Module final {
  14. public:
  15. class Interface : public ServiceFramework<Interface> {
  16. public:
  17. explicit Interface(std::shared_ptr<Module> module, const char* name);
  18. ~Interface() override;
  19. struct ModelInfo {
  20. std::array<u8, 0x8> amiibo_identification_block;
  21. INSERT_PADDING_BYTES(0x38);
  22. };
  23. static_assert(sizeof(ModelInfo) == 0x40, "ModelInfo is an invalid size");
  24. struct AmiiboFile {
  25. std::array<u8, 10> uuid;
  26. INSERT_PADDING_BYTES(0x4a);
  27. ModelInfo model_info;
  28. };
  29. static_assert(sizeof(AmiiboFile) == 0x94, "AmiiboFile is an invalid size");
  30. void CreateUserInterface(Kernel::HLERequestContext& ctx);
  31. bool LoadAmiibo(const std::vector<u8>& buffer);
  32. const Kernel::SharedPtr<Kernel::ReadableEvent>& GetNFCEvent() const;
  33. const AmiiboFile& GetAmiiboBuffer() const;
  34. private:
  35. Kernel::SharedPtr<Kernel::WritableEvent> nfc_tag_load{};
  36. AmiiboFile amiibo{};
  37. protected:
  38. std::shared_ptr<Module> module;
  39. };
  40. };
  41. void InstallInterfaces(SM::ServiceManager& service_manager);
  42. } // namespace Service::NFP