| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #pragma once
- namespace Input {
- class InputDevice;
- template <typename InputDevice>
- class Factory;
- }; // namespace Input
- namespace InputCommon {
- class InputEngine;
- class OutputFactory final : public Common::Input::Factory<Common::Input::OutputDevice> {
- public:
- explicit OutputFactory(std::shared_ptr<InputEngine> input_engine_);
- /**
- * Creates an output device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "guid" text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique output device with the parameters specified
- */
- std::unique_ptr<Common::Input::OutputDevice> Create(
- const Common::ParamPackage& params) override;
- private:
- std::shared_ptr<InputEngine> input_engine;
- };
- /**
- * An Input factory. It receives input events and forward them to all input devices it created.
- */
- class InputFactory final : public Common::Input::Factory<Common::Input::InputDevice> {
- public:
- explicit InputFactory(std::shared_ptr<InputEngine> input_engine_);
- /**
- * Creates an input device from the parameters given. Identifies the type of input to be
- * returned if it contains the following parameters:
- * - button: Contains "button" or "code"
- * - hat_button: Contains "hat"
- * - analog: Contains "axis"
- * - trigger: Contains "button" and "axis"
- * - stick: Contains "axis_x" and "axis_y"
- * - motion: Contains "axis_x", "axis_y" and "axis_z"
- * - motion: Contains "motion"
- * - touch: Contains "button", "axis_x" and "axis_y"
- * - battery: Contains "battery"
- * - output: Contains "output"
- * @param params contains parameters for creating the device:
- * - "code": the code of the keyboard key to bind with the input
- * - "button": same as "code" but for controller buttons
- * - "hat": similar as "button" but it's a group of hat buttons from SDL
- * - "axis": the axis number of the axis to bind with the input
- * - "motion": the motion number of the motion to bind with the input
- * - "axis_x": same as axis but specifying horizontal direction
- * - "axis_y": same as axis but specifying vertical direction
- * - "axis_z": same as axis but specifying forward direction
- * - "battery": Only used as a placeholder to set the input type
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> Create(const Common::ParamPackage& params) override;
- private:
- /**
- * Creates a button device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "code": the code of the keyboard key to bind with the input
- * - "button": same as "code" but for controller buttons
- * - "toggle": press once to enable, press again to disable
- * - "inverted": inverts the output of the button
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateButtonDevice(
- const Common::ParamPackage& params);
- /**
- * Creates a hat button device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "button": the controller hat id to bind with the input
- * - "direction": the direction id to be detected
- * - "toggle": press once to enable, press again to disable
- * - "inverted": inverts the output of the button
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateHatButtonDevice(
- const Common::ParamPackage& params);
- /**
- * Creates a stick device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "axis_x": the controller horizontal axis id to bind with the input
- * - "axis_y": the controller vertical axis id to bind with the input
- * - "deadzone": the minimum required value to be detected
- * - "range": the maximum value required to reach 100%
- * - "threshold": the minimum required value to considered pressed
- * - "offset_x": the amount of offset in the x axis
- * - "offset_y": the amount of offset in the y axis
- * - "invert_x": inverts the sign of the horizontal axis
- * - "invert_y": inverts the sign of the vertical axis
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateStickDevice(
- const Common::ParamPackage& params);
- /**
- * Creates an analog device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "axis": the controller axis id to bind with the input
- * - "deadzone": the minimum required value to be detected
- * - "range": the maximum value required to reach 100%
- * - "threshold": the minimum required value to considered pressed
- * - "offset": the amount of offset in the axis
- * - "invert": inverts the sign of the axis
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateAnalogDevice(
- const Common::ParamPackage& params);
- /**
- * Creates a trigger device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "button": the controller hat id to bind with the input
- * - "direction": the direction id to be detected
- * - "toggle": press once to enable, press again to disable
- * - "inverted": inverts the output of the button
- * - "axis": the controller axis id to bind with the input
- * - "deadzone": the minimum required value to be detected
- * - "range": the maximum value required to reach 100%
- * - "threshold": the minimum required value to considered pressed
- * - "offset": the amount of offset in the axis
- * - "invert": inverts the sign of the axis
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateTriggerDevice(
- const Common::ParamPackage& params);
- /**
- * Creates a touch device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "button": the controller hat id to bind with the input
- * - "direction": the direction id to be detected
- * - "toggle": press once to enable, press again to disable
- * - "inverted": inverts the output of the button
- * - "axis_x": the controller horizontal axis id to bind with the input
- * - "axis_y": the controller vertical axis id to bind with the input
- * - "deadzone": the minimum required value to be detected
- * - "range": the maximum value required to reach 100%
- * - "threshold": the minimum required value to considered pressed
- * - "offset_x": the amount of offset in the x axis
- * - "offset_y": the amount of offset in the y axis
- * - "invert_x": inverts the sign of the horizontal axis
- * - "invert_y": inverts the sign of the vertical axis
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateTouchDevice(
- const Common::ParamPackage& params);
- /**
- * Creates a battery device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateBatteryDevice(
- const Common::ParamPackage& params);
- /**
- * Creates a motion device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "axis_x": the controller horizontal axis id to bind with the input
- * - "axis_y": the controller vertical axis id to bind with the input
- * - "axis_z": the controller forward axis id to bind with the input
- * - "deadzone": the minimum required value to be detected
- * - "range": the maximum value required to reach 100%
- * - "offset_x": the amount of offset in the x axis
- * - "offset_y": the amount of offset in the y axis
- * - "offset_z": the amount of offset in the z axis
- * - "invert_x": inverts the sign of the horizontal axis
- * - "invert_y": inverts the sign of the vertical axis
- * - "invert_z": inverts the sign of the forward axis
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateMotionDevice(Common::ParamPackage params);
- /**
- * Creates a camera device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateCameraDevice(
- const Common::ParamPackage& params);
- /**
- * Creates a nfc device from the parameters given.
- * @param params contains parameters for creating the device:
- * - "guid": text string for identifying controllers
- * - "port": port of the connected device
- * - "pad": slot of the connected controller
- * @returns a unique input device with the parameters specified
- */
- std::unique_ptr<Common::Input::InputDevice> CreateNfcDevice(const Common::ParamPackage& params);
- std::shared_ptr<InputEngine> input_engine;
- };
- } // namespace InputCommon
|