add joysick support and state feedback

This commit is contained in:
2022-02-01 19:54:07 +01:00
parent 840cec975d
commit 1f36522492
21 changed files with 2940 additions and 32 deletions

47
src/trainjs.h Normal file
View File

@ -0,0 +1,47 @@
#ifndef TRAINJS_H
#define TRAINJS_H
#include <QObject>
#include <QTimer>
#include <memory>
#include <vector>
#include "items/item.h"
#include "QJoysticks.h"
class TrainJs: public QObject
{
Q_OBJECT
private:
static constexpr char JOYSTICK_NAME[] = "UVOS UsbJoy";
static constexpr int LONGPRESS_TIME = 500;
inline static std::vector<std::shared_ptr<TrainJs>> js_;
int id_ = -1;
int axis_ = -1;
QTimer longpressTimer_;
bool handleRelease = false;
std::weak_ptr<Item> item_;
TrainJs(int id, int axis);
TrainJs() = default;
private slots:
void axisChanged(const int id, const int axis, const qreal value);
void buttonChanged(const int id, const int button, const bool pressed);
void longpressTimeout();
signals:
void reqNewItem();
public:
~TrainJs();
static std::vector<std::shared_ptr<TrainJs>> getJsDevices();
static void init();
std::weak_ptr<Item> getItem();
void setItem(std::weak_ptr<Item>);
bool itemIsSet();
};
#endif // TRAINJS_H