|
|
|
@ -705,6 +705,47 @@ private:
|
|
|
|
|
InputEngine* input_engine;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class InputFromNfc final : public Common::Input::InputDevice {
|
|
|
|
|
public:
|
|
|
|
|
explicit InputFromNfc(PadIdentifier identifier_, InputEngine* input_engine_)
|
|
|
|
|
: identifier(identifier_), input_engine(input_engine_) {
|
|
|
|
|
UpdateCallback engine_callback{[this]() { OnChange(); }};
|
|
|
|
|
const InputIdentifier input_identifier{
|
|
|
|
|
.identifier = identifier,
|
|
|
|
|
.type = EngineInputType::Nfc,
|
|
|
|
|
.index = 0,
|
|
|
|
|
.callback = engine_callback,
|
|
|
|
|
};
|
|
|
|
|
callback_key = input_engine->SetCallback(input_identifier);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
~InputFromNfc() override {
|
|
|
|
|
input_engine->DeleteCallback(callback_key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Common::Input::NfcStatus GetStatus() const {
|
|
|
|
|
return input_engine->GetNfc(identifier);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ForceUpdate() override {
|
|
|
|
|
OnChange();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OnChange() {
|
|
|
|
|
const Common::Input::CallbackStatus status{
|
|
|
|
|
.type = Common::Input::InputType::Nfc,
|
|
|
|
|
.nfc_status = GetStatus(),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TriggerOnChange(status);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
const PadIdentifier identifier;
|
|
|
|
|
int callback_key;
|
|
|
|
|
InputEngine* input_engine;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OutputFromIdentifier final : public Common::Input::OutputDevice {
|
|
|
|
|
public:
|
|
|
|
|
explicit OutputFromIdentifier(PadIdentifier identifier_, InputEngine* input_engine_)
|
|
|
|
@ -727,6 +768,14 @@ public:
|
|
|
|
|
return input_engine->SetCameraFormat(identifier, camera_format);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Common::Input::NfcState SupportsNfc() override {
|
|
|
|
|
return input_engine->SupportsNfc(identifier);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Common::Input::NfcState WriteNfcData(const std::vector<u8>& data) override {
|
|
|
|
|
return input_engine->WriteNfcData(identifier, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
const PadIdentifier identifier;
|
|
|
|
|
InputEngine* input_engine;
|
|
|
|
@ -978,6 +1027,18 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateCameraDevice(
|
|
|
|
|
return std::make_unique<InputFromCamera>(identifier, input_engine.get());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateNfcDevice(
|
|
|
|
|
const Common::ParamPackage& params) {
|
|
|
|
|
const PadIdentifier identifier = {
|
|
|
|
|
.guid = Common::UUID{params.Get("guid", "")},
|
|
|
|
|
.port = static_cast<std::size_t>(params.Get("port", 0)),
|
|
|
|
|
.pad = static_cast<std::size_t>(params.Get("pad", 0)),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
input_engine->PreSetController(identifier);
|
|
|
|
|
return std::make_unique<InputFromNfc>(identifier, input_engine.get());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InputFactory::InputFactory(std::shared_ptr<InputEngine> input_engine_)
|
|
|
|
|
: input_engine(std::move(input_engine_)) {}
|
|
|
|
|
|
|
|
|
@ -989,6 +1050,9 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::Create(
|
|
|
|
|
if (params.Has("camera")) {
|
|
|
|
|
return CreateCameraDevice(params);
|
|
|
|
|
}
|
|
|
|
|
if (params.Has("nfc")) {
|
|
|
|
|
return CreateNfcDevice(params);
|
|
|
|
|
}
|
|
|
|
|
if (params.Has("button") && params.Has("axis")) {
|
|
|
|
|
return CreateTriggerDevice(params);
|
|
|
|
|
}
|
|
|
|
|