wfview/usbcontroller.h

163 wiersze
4.0 KiB
C
Czysty Zwykły widok Historia

2022-04-22 10:11:21 +00:00
#ifndef usbController_H
#define usbController_H
#include <iostream>
#include <QThread>
#include <QCoreApplication>
#include <QTimer>
#include <QDateTime>
#include <QRect>
#include <QGraphicsTextItem>
#include <QColor>
2022-04-25 16:40:41 +00:00
#include <QVector>
2023-01-12 19:39:35 +00:00
#if defined(USB_CONTROLLER) && QT_VERSION < QT_VERSION_CHECK(6,0,0)
2022-10-22 19:55:08 +00:00
#include <QGamepad>
2023-01-12 19:39:35 +00:00
#endif
2022-04-22 10:11:21 +00:00
#if defined(USB_CONTROLLER)
2022-04-22 10:11:21 +00:00
#ifndef Q_OS_WIN
#include "hidapi/hidapi.h"
#else
#include "hidapi.h"
#endif
2023-02-06 17:52:47 +00:00
#ifndef HID_API_MAKE_VERSION
#define HID_API_MAKE_VERSION(mj, mn, p) (((mj) << 24) | ((mn) << 8) | (p))
#endif
#ifndef HID_API_VERSION
#define HID_API_VERSION HID_API_MAKE_VERSION(HID_API_VERSION_MAJOR, HID_API_VERSION_MINOR, HID_API_VERSION_PATCH)
#endif
#if defined(__APPLE__) && HID_API_VERSION >= HID_API_MAKE_VERSION(0, 12, 0)
2023-02-06 15:43:53 +00:00
#include <hidapi/hidapi_darwin.h>
#endif
#if defined(USING_HIDAPI_LIBUSB) && HID_API_VERSION >= HID_API_MAKE_VERSION(0, 12, 0)
#include <hidapi_libusb.h>
#endif
#endif
2022-04-22 10:11:21 +00:00
#ifndef Q_OS_WIN
#include <unistd.h>
#endif
// Include these so we have the various enums
#include "rigidentities.h"
using namespace std;
#define HIDDATALENGTH 64
#define MAX_STR 255
struct COMMAND {
2022-04-26 07:41:58 +00:00
COMMAND() {}
2022-04-25 16:40:41 +00:00
2022-05-17 07:53:24 +00:00
COMMAND(int index, QString text, int command, char suffix) :
index(index), text(text), command(command), suffix(suffix) {}
2023-01-30 12:01:29 +00:00
COMMAND(int index, QString text, int command, availableBands band) :
index(index), text(text), command(command), band(band) {}
2022-09-19 01:03:02 +00:00
COMMAND(int index, QString text, int command, mode_kind mode) :
index(index), text(text), command(command), mode(mode) {}
2022-04-22 10:11:21 +00:00
2023-01-30 12:01:29 +00:00
int index=0;
2022-04-26 07:41:58 +00:00
QString text;
2023-01-30 12:01:29 +00:00
int command=0;
unsigned char suffix=0x0;
availableBands band=bandGen;
mode_kind mode=modeLSB;
2022-04-22 10:11:21 +00:00
};
struct BUTTON {
2022-04-26 07:41:58 +00:00
BUTTON() {}
2022-09-19 00:14:11 +00:00
BUTTON(quint8 dev, int num, QRect pos, const QColor textColour, COMMAND* on, COMMAND* off) :
2022-10-23 17:56:31 +00:00
dev(dev), num(num), name(""), pos(pos), textColour(textColour), onCommand(on), offCommand(off) {}
2022-10-23 17:54:18 +00:00
BUTTON(quint8 dev, QString name, QRect pos, const QColor textColour, COMMAND* on, COMMAND* off) :
2022-10-23 17:56:31 +00:00
dev(dev), num(-1), name(name), pos(pos), textColour(textColour), onCommand(on), offCommand(off) {}
2022-04-22 10:11:21 +00:00
2022-09-18 20:00:44 +00:00
quint8 dev;
int num;
2022-10-23 17:54:18 +00:00
QString name;
2022-04-22 10:11:21 +00:00
QRect pos;
2022-09-18 20:00:44 +00:00
QColor textColour;
2022-04-22 10:11:21 +00:00
int onEvent = 0;
int offEvent = 0;
2022-04-27 11:56:54 +00:00
const COMMAND* onCommand=Q_NULLPTR;
const COMMAND* offCommand=Q_NULLPTR;
2022-04-25 16:40:41 +00:00
QGraphicsTextItem* onText;
QGraphicsTextItem* offText;
2022-09-18 20:00:44 +00:00
2022-04-22 10:11:21 +00:00
};
#if defined(USB_CONTROLLER)
2022-04-22 10:11:21 +00:00
class usbController : public QObject
{
Q_OBJECT
public:
usbController();
~usbController();
public slots:
void init(int sens);
2022-04-22 10:11:21 +00:00
void run();
void runTimer();
void ledControl(bool on, unsigned char num);
2022-09-18 16:42:41 +00:00
void receiveCommands(QVector<COMMAND>*);
2022-09-18 20:00:44 +00:00
void receiveButtons(QVector<BUTTON>*);
2023-02-02 00:03:13 +00:00
void getVersion();
void receiveSensitivity(int val);
2022-04-22 10:11:21 +00:00
signals:
void jogPlus();
void jogMinus();
void sendJog(int counter);
void doShuttle(bool plus, quint8 level);
void setBand(int band);
2022-04-27 11:56:54 +00:00
void button(const COMMAND* cmd);
2022-04-25 16:40:41 +00:00
void newDevice(unsigned char devType, QVector<BUTTON>* but,QVector<COMMAND>* cmd);
void sendSensitivity(int val);
2022-05-17 07:53:24 +00:00
2022-04-22 10:11:21 +00:00
private:
hid_device* handle=NULL;
int hidStatus = 1;
2022-04-22 10:11:21 +00:00
bool isOpen=false;
unsigned int buttons=0;
unsigned char jogpos=0;
unsigned char shutpos=0;
unsigned char shutMult = 0;
int jogCounter = 0;
2022-04-22 10:11:21 +00:00
QTime lastusbController = QTime::currentTime();
2023-02-02 17:45:24 +00:00
QByteArray lastData = QByteArray(8,0x0);
2022-04-22 10:11:21 +00:00
unsigned char lastDialPos=0;
2022-09-18 20:00:44 +00:00
QVector<BUTTON>* buttonList;
2022-09-18 16:42:41 +00:00
QVector<COMMAND>* commands = Q_NULLPTR;
2022-04-27 11:56:54 +00:00
QString product="";
QString manufacturer="";
QString serial="<none>";
2023-02-06 19:51:30 +00:00
QString path = "";
int sensitivity = 1;
2023-01-12 19:39:35 +00:00
#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
2022-10-22 19:55:08 +00:00
QGamepad* gamepad=Q_NULLPTR;
2023-01-12 19:39:35 +00:00
#endif
2022-10-23 17:54:18 +00:00
void buttonState(QString but, bool val);
2022-10-23 18:08:31 +00:00
void buttonState(QString but, double val);
2023-02-02 23:11:49 +00:00
usbDeviceType usbDevice = usbNone;
2023-02-07 16:50:02 +00:00
unsigned short knownUsbDevices[3][3] = {
{shuttleXpress,0x0b33,0x0020},
{shuttlePro2,0x0b33,0x0030},
{RC28,0x0c26,0x001e} };
2022-04-22 10:11:21 +00:00
protected:
};
#endif
2022-04-22 10:11:21 +00:00
#endif