diff options
Diffstat (limited to 'src/emu/inputdev.h')
-rw-r--r-- | src/emu/inputdev.h | 106 |
1 files changed, 53 insertions, 53 deletions
diff --git a/src/emu/inputdev.h b/src/emu/inputdev.h index ecae0532be0..8e914094610 100644 --- a/src/emu/inputdev.h +++ b/src/emu/inputdev.h @@ -13,29 +13,13 @@ #pragma once - -//************************************************************************** -// CONSTANTS -//************************************************************************** - -// relative devices return ~512 units per onscreen pixel -constexpr s32 INPUT_RELATIVE_PER_PIXEL = 512; - -// absolute devices return values between -65536 and +65536 -constexpr s32 INPUT_ABSOLUTE_MIN = -65536; -constexpr s32 INPUT_ABSOLUTE_MAX = 65536; - -// invalid memory value for axis polling -constexpr s32 INVALID_AXIS_VALUE = 0x7fffffff; +#include "interface/inputdev.h" //************************************************************************** // TYPE DEFINITIONS //************************************************************************** -// callback for getting the value of an item on a device -typedef s32 (*item_get_state_func)(void *device_internal, void *item_internal); - // ======================> joystick_map // a 9x9 joystick map @@ -87,38 +71,44 @@ private: // a single item on an input device class input_device_item { -protected: - // construction/destruction - input_device_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate, input_item_class itemclass); - public: + using item_get_state_func = osd::input_device::item_get_state_func; + virtual ~input_device_item(); // getters input_device &device() const { return m_device; } input_manager &manager() const; running_machine &machine() const; - const char *name() const { return m_name.c_str(); } + const std::string &name() const { return m_name; } void *internal() const { return m_internal; } input_item_id itemid() const { return m_itemid; } input_item_class itemclass() const { return m_itemclass; } input_code code() const; - const char *token() const { return m_token.c_str(); } + const std::string &token() const { return m_token; } s32 current() const { return m_current; } - s32 memory() const { return m_memory; } // helpers s32 update_value(); - void set_memory(s32 value) { m_memory = value; } - bool check_axis(input_item_modifier modifier); + bool check_axis(input_item_modifier modifier, s32 memory); // readers virtual s32 read_as_switch(input_item_modifier modifier) = 0; virtual s32 read_as_relative(input_item_modifier modifier) = 0; virtual s32 read_as_absolute(input_item_modifier modifier) = 0; - virtual bool item_check_axis(input_item_modifier modifier) = 0; + virtual bool item_check_axis(input_item_modifier modifier, s32 memory) = 0; protected: + // construction/destruction + input_device_item( + input_device &device, + std::string_view name, + std::string_view tokenhint, + void *internal, + input_item_id itemid, + item_get_state_func getstate, + input_item_class itemclass); + // internal state input_device & m_device; // reference to our owning device std::string m_name; // string name of item @@ -130,44 +120,51 @@ protected: // live state s32 m_current; // current raw value - s32 m_memory; // "memory" value, to remember where we started during polling }; // ======================> input_device // a logical device of a given class that can provide input -class input_device +class input_device : public osd::input_device { friend class input_class; public: // construction/destruction - input_device(input_manager &manager, const char *_name, const char *_id, void *_internal); + input_device(input_manager &manager, std::string_view _name, std::string_view _id, void *_internal); virtual ~input_device(); // getters input_manager &manager() const { return m_manager; } running_machine &machine() const { return m_manager.machine(); } input_device_class devclass() const { return device_class(); } - const char *name() const { return m_name.c_str(); } - const char *id() const { return m_id.c_str(); } + const std::string &name() const { return m_name; } + const std::string &id() const { return m_id; } int devindex() const { return m_devindex; } input_device_item *item(input_item_id index) const { return m_item[index].get(); } + const assignment_vector &default_assignments() const { return m_default_assignments; } input_item_id maxitem() const { return m_maxitem; } void *internal() const { return m_internal; } + s32 threshold() const { return m_threshold; } bool steadykey_enabled() const { return m_steadykey_enabled; } bool lightgun_reload_button() const { return m_lightgun_reload_button; } // setters void set_devindex(int devindex) { m_devindex = devindex; } - // item management - input_item_id add_item(const char *name, input_item_id itemid, item_get_state_func getstate, void *internal = nullptr); + // interface for host input device + virtual input_item_id add_item( + std::string_view name, + std::string_view tokenhint, + input_item_id itemid, + item_get_state_func getstate, + void *internal) override; + virtual void set_default_assignments(assignment_vector &&assignments) override; // helpers s32 adjust_absolute(s32 value) const { return adjust_absolute_value(value); } - bool match_device_id(const char *deviceid); + bool match_device_id(std::string_view deviceid) const; protected: // specific overrides @@ -181,11 +178,13 @@ private: std::string m_id; // id of device int m_devindex; // device index of this device std::unique_ptr<input_device_item> m_item[ITEM_ID_ABSOLUTE_MAXIMUM+1]; // array of pointers to items + assignment_vector m_default_assignments; // additional assignments input_item_id m_maxitem; // maximum item index - void * m_internal; // internal callback pointer + void *const m_internal; // internal callback pointer - bool m_steadykey_enabled; // steadykey enabled for keyboards - bool m_lightgun_reload_button; // lightgun reload hack + s32 const m_threshold; // threshold for treating absolute axis as active + bool const m_steadykey_enabled; // steadykey enabled for keyboards + bool const m_lightgun_reload_button; // lightgun reload hack }; @@ -195,7 +194,7 @@ class input_device_keyboard : public input_device { public: // construction/destruction - input_device_keyboard(input_manager &manager, const char *_name, const char *_id, void *_internal); + input_device_keyboard(input_manager &manager, std::string_view _name, std::string_view _id, void *_internal); // helpers void apply_steadykey() const; @@ -212,7 +211,7 @@ class input_device_mouse : public input_device { public: // construction/destruction - input_device_mouse(input_manager &manager, const char *_name, const char *_id, void *_internal); + input_device_mouse(input_manager &manager, std::string_view _name, std::string_view _id, void *_internal); protected: // specific overrides @@ -226,7 +225,7 @@ class input_device_lightgun : public input_device { public: // construction/destruction - input_device_lightgun(input_manager &manager, const char *_name, const char *_id, void *_internal); + input_device_lightgun(input_manager &manager, std::string_view _name, std::string_view _id, void *_internal); protected: // specific overrides @@ -241,7 +240,7 @@ class input_device_joystick : public input_device { public: // construction/destruction - input_device_joystick(input_manager &manager, const char *_name, const char *_id, void *_internal); + input_device_joystick(input_manager &manager, std::string_view _name, std::string_view _id, void *_internal); // getters joystick_map &joymap() { return m_joymap; } @@ -256,9 +255,10 @@ protected: private: // joystick information - joystick_map m_joymap; // joystick map for this device - s32 m_joystick_deadzone; // deadzone for joystick - s32 m_joystick_saturation; // saturation position for joystick + joystick_map m_joymap; // joystick map for this device + s32 const m_deadzone; // deadzone for joystick + s32 const m_saturation; // saturation position for joystick + s64 const m_range; // difference between saturation and deadzone }; @@ -287,8 +287,7 @@ public: void set_multi(bool multi = true) { m_multi = multi; } // device management - input_device *add_device(const char *name, const char *id, void *internal = nullptr); - input_device *add_device(std::unique_ptr<input_device> &&new_device); + input_device &add_device(std::string_view name, std::string_view id, void *internal = nullptr); // misc helpers input_item_class standard_item_class(input_item_id itemid) const; @@ -296,10 +295,11 @@ public: protected: // specific overrides - virtual std::unique_ptr<input_device> make_device(const char *name, const char *id, void *internal) = 0; + virtual std::unique_ptr<input_device> make_device(std::string_view name, std::string_view id, void *internal) = 0; private: - // indexing helpers + // internal helpers + input_device &add_device(std::unique_ptr<input_device> &&new_device); int newindex(input_device &device); // internal state @@ -324,7 +324,7 @@ public: protected: // specific overrides - virtual std::unique_ptr<input_device> make_device(const char *name, const char *id, void *internal) override + virtual std::unique_ptr<input_device> make_device(std::string_view name, std::string_view id, void *internal) override { return std::make_unique<input_device_keyboard>(manager(), name, id, internal); } @@ -346,7 +346,7 @@ public: protected: // specific overrides - virtual std::unique_ptr<input_device> make_device(const char *name, const char *id, void *internal) override + virtual std::unique_ptr<input_device> make_device(std::string_view name, std::string_view id, void *internal) override { return std::make_unique<input_device_mouse>(manager(), name, id, internal); } @@ -364,7 +364,7 @@ public: protected: // specific overrides - virtual std::unique_ptr<input_device> make_device(const char *name, const char *id, void *internal) override + virtual std::unique_ptr<input_device> make_device(std::string_view name, std::string_view id, void *internal) override { return std::make_unique<input_device_lightgun>(manager(), name, id, internal); } @@ -389,7 +389,7 @@ public: protected: // specific overrides - virtual std::unique_ptr<input_device> make_device(const char *name, const char *id, void *internal) override + virtual std::unique_ptr<input_device> make_device(std::string_view name, std::string_view id, void *internal) override { return std::make_unique<input_device_joystick>(manager(), name, id, internal); } |