summaryrefslogtreecommitdiff
path: root/src/input_common/input_poller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/input_poller.cpp')
-rw-r--r--src/input_common/input_poller.cpp72
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
705private:
706 const PadIdentifier identifier;
707 int callback_key;
708 InputEngine* input_engine;
709};
710
711class InputFromNfc final : public Common::Input::InputDevice {
712public:
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
730private: 785private:
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
1036std::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
981InputFactory::InputFactory(std::shared_ptr<InputEngine> input_engine_) 1048InputFactory::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 }