diff options
Diffstat (limited to 'src/input_common/input_poller.cpp')
| -rw-r--r-- | src/input_common/input_poller.cpp | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/src/input_common/input_poller.cpp b/src/input_common/input_poller.cpp index ffb9b945e..ca33fb4eb 100644 --- a/src/input_common/input_poller.cpp +++ b/src/input_common/input_poller.cpp | |||
| @@ -691,9 +691,56 @@ public: | |||
| 691 | } | 691 | } |
| 692 | 692 | ||
| 693 | void OnChange() { | 693 | void OnChange() { |
| 694 | const auto camera_status = GetStatus(); | ||
| 695 | |||
| 694 | const Common::Input::CallbackStatus status{ | 696 | const Common::Input::CallbackStatus status{ |
| 695 | .type = Common::Input::InputType::IrSensor, | 697 | .type = Common::Input::InputType::IrSensor, |
| 696 | .camera_status = GetStatus(), | 698 | .camera_status = camera_status.format, |
| 699 | .raw_data = camera_status.data, | ||
| 700 | }; | ||
| 701 | |||
| 702 | TriggerOnChange(status); | ||
| 703 | } | ||
| 704 | |||
| 705 | private: | ||
| 706 | const PadIdentifier identifier; | ||
| 707 | int callback_key; | ||
| 708 | InputEngine* input_engine; | ||
| 709 | }; | ||
| 710 | |||
| 711 | class InputFromNfc final : public Common::Input::InputDevice { | ||
| 712 | public: | ||
| 713 | explicit InputFromNfc(PadIdentifier identifier_, InputEngine* input_engine_) | ||
| 714 | : identifier(identifier_), input_engine(input_engine_) { | ||
| 715 | UpdateCallback engine_callback{[this]() { OnChange(); }}; | ||
| 716 | const InputIdentifier input_identifier{ | ||
| 717 | .identifier = identifier, | ||
| 718 | .type = EngineInputType::Nfc, | ||
| 719 | .index = 0, | ||
| 720 | .callback = engine_callback, | ||
| 721 | }; | ||
| 722 | callback_key = input_engine->SetCallback(input_identifier); | ||
| 723 | } | ||
| 724 | |||
| 725 | ~InputFromNfc() override { | ||
| 726 | input_engine->DeleteCallback(callback_key); | ||
| 727 | } | ||
| 728 | |||
| 729 | Common::Input::NfcStatus GetStatus() const { | ||
| 730 | return input_engine->GetNfc(identifier); | ||
| 731 | } | ||
| 732 | |||
| 733 | void ForceUpdate() override { | ||
| 734 | OnChange(); | ||
| 735 | } | ||
| 736 | |||
| 737 | void OnChange() { | ||
| 738 | const auto nfc_status = GetStatus(); | ||
| 739 | |||
| 740 | const Common::Input::CallbackStatus status{ | ||
| 741 | .type = Common::Input::InputType::Nfc, | ||
| 742 | .nfc_status = nfc_status.state, | ||
| 743 | .raw_data = nfc_status.data, | ||
| 697 | }; | 744 | }; |
| 698 | 745 | ||
| 699 | TriggerOnChange(status); | 746 | TriggerOnChange(status); |
| @@ -727,6 +774,14 @@ public: | |||
| 727 | return input_engine->SetCameraFormat(identifier, camera_format); | 774 | return input_engine->SetCameraFormat(identifier, camera_format); |
| 728 | } | 775 | } |
| 729 | 776 | ||
| 777 | Common::Input::NfcState SupportsNfc() const override { | ||
| 778 | return input_engine->SupportsNfc(identifier); | ||
| 779 | } | ||
| 780 | |||
| 781 | Common::Input::NfcState WriteNfcData(const std::vector<u8>& data) override { | ||
| 782 | return input_engine->WriteNfcData(identifier, data); | ||
| 783 | } | ||
| 784 | |||
| 730 | private: | 785 | private: |
| 731 | const PadIdentifier identifier; | 786 | const PadIdentifier identifier; |
| 732 | InputEngine* input_engine; | 787 | InputEngine* input_engine; |
| @@ -978,6 +1033,18 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateCameraDevice( | |||
| 978 | return std::make_unique<InputFromCamera>(identifier, input_engine.get()); | 1033 | return std::make_unique<InputFromCamera>(identifier, input_engine.get()); |
| 979 | } | 1034 | } |
| 980 | 1035 | ||
| 1036 | std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateNfcDevice( | ||
| 1037 | const Common::ParamPackage& params) { | ||
| 1038 | const PadIdentifier identifier = { | ||
| 1039 | .guid = Common::UUID{params.Get("guid", "")}, | ||
| 1040 | .port = static_cast<std::size_t>(params.Get("port", 0)), | ||
| 1041 | .pad = static_cast<std::size_t>(params.Get("pad", 0)), | ||
| 1042 | }; | ||
| 1043 | |||
| 1044 | input_engine->PreSetController(identifier); | ||
| 1045 | return std::make_unique<InputFromNfc>(identifier, input_engine.get()); | ||
| 1046 | } | ||
| 1047 | |||
| 981 | InputFactory::InputFactory(std::shared_ptr<InputEngine> input_engine_) | 1048 | InputFactory::InputFactory(std::shared_ptr<InputEngine> input_engine_) |
| 982 | : input_engine(std::move(input_engine_)) {} | 1049 | : input_engine(std::move(input_engine_)) {} |
| 983 | 1050 | ||
| @@ -989,6 +1056,9 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::Create( | |||
| 989 | if (params.Has("camera")) { | 1056 | if (params.Has("camera")) { |
| 990 | return CreateCameraDevice(params); | 1057 | return CreateCameraDevice(params); |
| 991 | } | 1058 | } |
| 1059 | if (params.Has("nfc")) { | ||
| 1060 | return CreateNfcDevice(params); | ||
| 1061 | } | ||
| 992 | if (params.Has("button") && params.Has("axis")) { | 1062 | if (params.Has("button") && params.Has("axis")) { |
| 993 | return CreateTriggerDevice(params); | 1063 | return CreateTriggerDevice(params); |
| 994 | } | 1064 | } |