mirror of https://github.com/EspoTek/Labrador.git
73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
#ifndef macUsbDriver_H
|
|
#define macUsbDriver_H
|
|
|
|
#include <QWidget>
|
|
#include <QThread>
|
|
#include <QMutex>
|
|
#include <QDateTime>
|
|
|
|
#include "genericusbdriver.h"
|
|
#include "libusb.h"
|
|
|
|
#define RECOVERY_PERIOD 250
|
|
|
|
typedef struct tcBlock{
|
|
int number;
|
|
bool completed;
|
|
qint64 timeReceived;
|
|
} tcBlock;
|
|
|
|
extern QMutex tcBlockMutex;
|
|
|
|
class worker : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
worker(){};
|
|
~worker(){};
|
|
libusb_context *ctx;
|
|
public slots:
|
|
void handle(){
|
|
qDebug() << "SUB THREAD ID" << QThread::currentThreadId();
|
|
while(1){
|
|
if(libusb_event_handling_ok(ctx)){
|
|
libusb_handle_events(ctx);
|
|
//qDebug() << "HANDLED";
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
class macUsbDriver : public genericUsbDriver
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit macUsbDriver(QWidget *parent = 0);
|
|
~macUsbDriver();
|
|
void usbSendControl(uint8_t RequestType, uint8_t Request, uint16_t Value, uint16_t Index, uint16_t Length, unsigned char *LDATA);
|
|
char *isoRead(unsigned int *newLength);
|
|
private:
|
|
//USB Vars
|
|
libusb_context *ctx;
|
|
libusb_device_handle *handle = NULL;
|
|
QTimer *recoveryTimer;
|
|
//USBIso Vars
|
|
libusb_transfer *isoCtx[NUM_FUTURE_CTX];
|
|
tcBlock transferCompleted[NUM_FUTURE_CTX];
|
|
unsigned char dataBuffer[NUM_FUTURE_CTX][ISO_PACKET_SIZE*ISO_PACKETS_PER_CTX];
|
|
worker *isoHandler;
|
|
QThread *workerThread;
|
|
//Generic Functions
|
|
unsigned char usbInit(unsigned long VIDin, unsigned long PIDin);
|
|
unsigned char usbIsoInit(void);
|
|
signals:
|
|
public slots:
|
|
void isoTimerTick(void);
|
|
void recoveryTick(void);
|
|
};
|
|
|
|
static void LIBUSB_CALL isoCallback(struct libusb_transfer *transfer);
|
|
|
|
#endif // macUsbDriver_H
|