mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-06-11 16:49:28 +02:00
Linux: Add an evdev based controller backend, to replace SDL.
This commit is contained in:
86
Source/Core/InputCommon/ControllerInterface/evdev/evdev.h
Normal file
86
Source/Core/InputCommon/ControllerInterface/evdev/evdev.h
Normal file
@ -0,0 +1,86 @@
|
||||
// Copyright 2015 Dolphin Emulator Project
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <libevdev/libevdev.h>
|
||||
|
||||
#include "InputCommon/ControllerInterface/Device.h"
|
||||
|
||||
namespace ciface
|
||||
{
|
||||
namespace evdev
|
||||
{
|
||||
|
||||
void Init(std::vector<Core::Device*>& devices);
|
||||
|
||||
class evdevDevice : public Core::Device
|
||||
{
|
||||
private:
|
||||
class Button : public Core::Device::Input
|
||||
{
|
||||
public:
|
||||
std::string GetName() const override;
|
||||
Button(u8 index, u16 code, libevdev* dev) : m_index(index), m_code(code), m_dev(dev) {}
|
||||
ControlState GetState() const override;
|
||||
private:
|
||||
const u8 m_index;
|
||||
const u16 m_code;
|
||||
libevdev* m_dev;
|
||||
};
|
||||
|
||||
class Axis : public Core::Device::Input
|
||||
{
|
||||
public:
|
||||
std::string GetName() const override;
|
||||
Axis(u8 index, u16 code, bool upper, libevdev* dev);
|
||||
ControlState GetState() const override;
|
||||
private:
|
||||
const u16 m_code;
|
||||
const u8 m_index;
|
||||
const bool m_upper;
|
||||
int m_range;
|
||||
libevdev* m_dev;
|
||||
};
|
||||
|
||||
class ForceFeedback : public Core::Device::Output
|
||||
{
|
||||
public:
|
||||
std::string GetName() const override;
|
||||
ForceFeedback(u16 type, libevdev* dev) : m_type(type), m_dev(dev), m_id(-1) { m_fd = libevdev_get_fd(dev); }
|
||||
void SetState(ControlState state) override;
|
||||
private:
|
||||
const u16 m_type;
|
||||
libevdev* m_dev;
|
||||
int m_fd;
|
||||
int m_id;
|
||||
};
|
||||
|
||||
public:
|
||||
void UpdateInput() override;
|
||||
|
||||
evdevDevice(const std::string &devnode, int id);
|
||||
~evdevDevice();
|
||||
|
||||
std::string GetName() const override { return m_name; }
|
||||
int GetId() const override { return m_id; }
|
||||
std::string GetSource() const override { return "evdev"; }
|
||||
|
||||
bool IsInteresting() const { return m_initialized && m_interesting; }
|
||||
|
||||
private:
|
||||
const std::string m_devfile;
|
||||
int m_fd;
|
||||
libevdev* m_dev;
|
||||
std::string m_name;
|
||||
const int m_id;
|
||||
bool m_initialized;
|
||||
bool m_interesting;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user