From 84d43489c5df9f450efb0293cc58161d08e3b882 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Fri, 16 Jun 2023 21:57:21 -0600 Subject: input_common: Implement native mifare support --- src/input_common/helpers/joycon_protocol/nfc.h | 34 +++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'src/input_common/helpers/joycon_protocol/nfc.h') diff --git a/src/input_common/helpers/joycon_protocol/nfc.h b/src/input_common/helpers/joycon_protocol/nfc.h index eb58c427d..0be95e40e 100644 --- a/src/input_common/helpers/joycon_protocol/nfc.h +++ b/src/input_common/helpers/joycon_protocol/nfc.h @@ -25,14 +25,25 @@ public: DriverResult StartNFCPollingMode(); - DriverResult ScanAmiibo(std::vector& data); + DriverResult StopNFCPollingMode(); + + DriverResult GetTagInfo(Joycon::TagInfo& tag_info); + + DriverResult ReadAmiibo(std::vector& data); DriverResult WriteAmiibo(std::span data); + DriverResult ReadMifare(std::span read_request, + std::span out_data); + + DriverResult WriteMifare(std::span write_request); + bool HasAmiibo(); bool IsEnabled() const; + bool IsPolling() const; + private: // Number of times the function will be delayed until it outputs valid data static constexpr std::size_t AMIIBO_UPDATE_DELAY = 15; @@ -51,6 +62,13 @@ private: DriverResult WriteAmiiboData(const TagUUID& tag_uuid, std::span data); + DriverResult GetMifareData(const MifareUUID& tag_uuid, + std::span read_request, + std::span out_data); + + DriverResult WriteMifareData(const MifareUUID& tag_uuid, + std::span write_request); + DriverResult SendStartPollingRequest(MCUCommandResponse& output, bool is_second_attempt = false); @@ -65,17 +83,31 @@ private: DriverResult SendWriteDataAmiiboRequest(MCUCommandResponse& output, u8 block_id, bool is_last_packet, std::span data); + DriverResult SendReadDataMifareRequest(MCUCommandResponse& output, u8 block_id, + bool is_last_packet, std::span data); + std::vector SerializeWritePackage(const NFCWritePackage& package) const; + std::vector SerializeMifareReadPackage(const MifareReadPackage& package) const; + + std::vector SerializeMifareWritePackage(const MifareWritePackage& package) const; + NFCWritePackage MakeAmiiboWritePackage(const TagUUID& tag_uuid, std::span data) const; NFCDataChunk MakeAmiiboChunk(u8 page, u8 size, std::span data) const; + MifareReadPackage MakeMifareReadPackage(const MifareUUID& tag_uuid, + std::span read_request) const; + + MifareWritePackage MakeMifareWritePackage(const MifareUUID& tag_uuid, + std::span read_request) const; + NFCReadBlockCommand GetReadBlockCommand(NFCPages pages) const; TagUUID GetTagUUID(std::span data) const; bool is_enabled{}; + bool is_polling{}; std::size_t update_counter{}; }; -- cgit v1.2.3 From df9685a21c105962e90dbd95133c5a1bcef7886f Mon Sep 17 00:00:00 2001 From: german77 Date: Wed, 28 Jun 2023 00:20:38 -0600 Subject: input_common: Remove duplicated DriverResult enum --- src/input_common/helpers/joycon_protocol/nfc.h | 66 +++++++++++++++----------- 1 file changed, 37 insertions(+), 29 deletions(-) (limited to 'src/input_common/helpers/joycon_protocol/nfc.h') diff --git a/src/input_common/helpers/joycon_protocol/nfc.h b/src/input_common/helpers/joycon_protocol/nfc.h index 0be95e40e..22db95170 100644 --- a/src/input_common/helpers/joycon_protocol/nfc.h +++ b/src/input_common/helpers/joycon_protocol/nfc.h @@ -13,30 +13,34 @@ #include "input_common/helpers/joycon_protocol/common_protocol.h" #include "input_common/helpers/joycon_protocol/joycon_types.h" +namespace Common::Input { +enum class DriverResult; +} + namespace InputCommon::Joycon { class NfcProtocol final : private JoyconCommonProtocol { public: explicit NfcProtocol(std::shared_ptr handle); - DriverResult EnableNfc(); + Common::Input::DriverResult EnableNfc(); - DriverResult DisableNfc(); + Common::Input::DriverResult DisableNfc(); - DriverResult StartNFCPollingMode(); + Common::Input::DriverResult StartNFCPollingMode(); - DriverResult StopNFCPollingMode(); + Common::Input::DriverResult StopNFCPollingMode(); - DriverResult GetTagInfo(Joycon::TagInfo& tag_info); + Common::Input::DriverResult GetTagInfo(Joycon::TagInfo& tag_info); - DriverResult ReadAmiibo(std::vector& data); + Common::Input::DriverResult ReadAmiibo(std::vector& data); - DriverResult WriteAmiibo(std::span data); + Common::Input::DriverResult WriteAmiibo(std::span data); - DriverResult ReadMifare(std::span read_request, - std::span out_data); + Common::Input::DriverResult ReadMifare(std::span read_request, + std::span out_data); - DriverResult WriteMifare(std::span write_request); + Common::Input::DriverResult WriteMifare(std::span write_request); bool HasAmiibo(); @@ -54,37 +58,41 @@ private: TagUUID uuid; }; - DriverResult WaitUntilNfcIs(NFCStatus status); + Common::Input::DriverResult WaitUntilNfcIs(NFCStatus status); - DriverResult IsTagInRange(TagFoundData& data, std::size_t timeout_limit = 1); + Common::Input::DriverResult IsTagInRange(TagFoundData& data, std::size_t timeout_limit = 1); - DriverResult GetAmiiboData(std::vector& data); + Common::Input::DriverResult GetAmiiboData(std::vector& data); - DriverResult WriteAmiiboData(const TagUUID& tag_uuid, std::span data); + Common::Input::DriverResult WriteAmiiboData(const TagUUID& tag_uuid, std::span data); - DriverResult GetMifareData(const MifareUUID& tag_uuid, - std::span read_request, - std::span out_data); + Common::Input::DriverResult GetMifareData(const MifareUUID& tag_uuid, + std::span read_request, + std::span out_data); - DriverResult WriteMifareData(const MifareUUID& tag_uuid, - std::span write_request); + Common::Input::DriverResult WriteMifareData(const MifareUUID& tag_uuid, + std::span write_request); - DriverResult SendStartPollingRequest(MCUCommandResponse& output, - bool is_second_attempt = false); + Common::Input::DriverResult SendStartPollingRequest(MCUCommandResponse& output, + bool is_second_attempt = false); - DriverResult SendStopPollingRequest(MCUCommandResponse& output); + Common::Input::DriverResult SendStopPollingRequest(MCUCommandResponse& output); - DriverResult SendNextPackageRequest(MCUCommandResponse& output, u8 packet_id); + Common::Input::DriverResult SendNextPackageRequest(MCUCommandResponse& output, u8 packet_id); - DriverResult SendReadAmiiboRequest(MCUCommandResponse& output, NFCPages ntag_pages); + Common::Input::DriverResult SendReadAmiiboRequest(MCUCommandResponse& output, + NFCPages ntag_pages); - DriverResult SendWriteAmiiboRequest(MCUCommandResponse& output, const TagUUID& tag_uuid); + Common::Input::DriverResult SendWriteAmiiboRequest(MCUCommandResponse& output, + const TagUUID& tag_uuid); - DriverResult SendWriteDataAmiiboRequest(MCUCommandResponse& output, u8 block_id, - bool is_last_packet, std::span data); + Common::Input::DriverResult SendWriteDataAmiiboRequest(MCUCommandResponse& output, u8 block_id, + bool is_last_packet, + std::span data); - DriverResult SendReadDataMifareRequest(MCUCommandResponse& output, u8 block_id, - bool is_last_packet, std::span data); + Common::Input::DriverResult SendReadDataMifareRequest(MCUCommandResponse& output, u8 block_id, + bool is_last_packet, + std::span data); std::vector SerializeWritePackage(const NFCWritePackage& package) const; -- cgit v1.2.3