mirror of https://github.com/EspoTek/Labrador.git
Linux version up and running, with autorecover!
Hopefully the Windows compile hasn't been broken. Fingers crossed!
This commit is contained in:
parent
4509c31f55
commit
8b99289369
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.1.0, 2016-10-21T13:09:33. -->
|
<!-- Written by QtCreator 4.1.0, 2016-10-24T11:24:04. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
|
|
|
@ -1166,6 +1166,7 @@ moc_mainwindow.cpp: ../../../Qt/5.7/gcc_64/include/QtWidgets/QMainWindow \
|
||||||
../../../Qt/5.7/gcc_64/include/QtPrintSupport/qtprintsupportversion.h \
|
../../../Qt/5.7/gcc_64/include/QtPrintSupport/qtprintsupportversion.h \
|
||||||
build_linux/platformspecific.h \
|
build_linux/platformspecific.h \
|
||||||
gahnooslashlinuxusbdriver.h \
|
gahnooslashlinuxusbdriver.h \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/QMutex \
|
||||||
genericusbdriver.h \
|
genericusbdriver.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
||||||
|
@ -1173,6 +1174,7 @@ moc_mainwindow.cpp: ../../../Qt/5.7/gcc_64/include/QtWidgets/QMainWindow \
|
||||||
xmega.h \
|
xmega.h \
|
||||||
desktop_settings.h \
|
desktop_settings.h \
|
||||||
buffercontrol.h \
|
buffercontrol.h \
|
||||||
|
build_linux/libusb/libusb.h \
|
||||||
ui_mainwindow.h \
|
ui_mainwindow.h \
|
||||||
scoperangeenterdialog.h \
|
scoperangeenterdialog.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QDialog \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QDialog \
|
||||||
|
@ -3547,6 +3549,9 @@ moc_gahnooslashlinuxusbdriver.cpp: ../../../Qt/5.7/gcc_64/include/QtWidgets/QWid
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qfiledevice.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qfiledevice.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtGui/qvector2d.h \
|
../../../Qt/5.7/gcc_64/include/QtGui/qvector2d.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtGui/qtouchdevice.h \
|
../../../Qt/5.7/gcc_64/include/QtGui/qtouchdevice.h \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/QThread \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/qthread.h \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/QMutex \
|
||||||
genericusbdriver.h \
|
genericusbdriver.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/qlabel.h \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/qlabel.h \
|
||||||
|
@ -3555,8 +3560,6 @@ moc_gahnooslashlinuxusbdriver.cpp: ../../../Qt/5.7/gcc_64/include/QtWidgets/QWid
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qtimer.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qtimer.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qbasictimer.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qbasictimer.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QThread \
|
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qthread.h \
|
|
||||||
functiongencontrol.h \
|
functiongencontrol.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QDir \
|
../../../Qt/5.7/gcc_64/include/QtCore/QDir \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qdir.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qdir.h \
|
||||||
|
@ -3565,6 +3568,7 @@ moc_gahnooslashlinuxusbdriver.cpp: ../../../Qt/5.7/gcc_64/include/QtWidgets/QWid
|
||||||
xmega.h \
|
xmega.h \
|
||||||
desktop_settings.h \
|
desktop_settings.h \
|
||||||
buffercontrol.h \
|
buffercontrol.h \
|
||||||
|
build_linux/libusb/libusb.h \
|
||||||
gahnooslashlinuxusbdriver.h \
|
gahnooslashlinuxusbdriver.h \
|
||||||
../../../Qt/5.7/gcc_64/bin/moc
|
../../../Qt/5.7/gcc_64/bin/moc
|
||||||
/home/esposch/Qt/5.7/gcc_64/bin/moc $(DEFINES) -I/home/esposch/Qt/5.7/gcc_64/mkspecs/linux-g++ -I'/home/esposch/git/Labrador/Desktop Interface' -I'/home/esposch/git/Labrador/Desktop Interface/build_linux' -I'/home/esposch/git/Labrador/Desktop Interface/build_linux/libusb' -I/home/esposch/Qt/5.7/gcc_64/include -I/home/esposch/Qt/5.7/gcc_64/include/QtPrintSupport -I/home/esposch/Qt/5.7/gcc_64/include/QtWidgets -I/home/esposch/Qt/5.7/gcc_64/include/QtGui -I/home/esposch/Qt/5.7/gcc_64/include/QtCore -I/usr/include/c++/5 -I/usr/include/x86_64-linux-gnu/c++/5 -I/usr/include/c++/5/backward -I/usr/lib/gcc/x86_64-linux-gnu/5/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include gahnooslashlinuxusbdriver.h -o moc_gahnooslashlinuxusbdriver.cpp
|
/home/esposch/Qt/5.7/gcc_64/bin/moc $(DEFINES) -I/home/esposch/Qt/5.7/gcc_64/mkspecs/linux-g++ -I'/home/esposch/git/Labrador/Desktop Interface' -I'/home/esposch/git/Labrador/Desktop Interface/build_linux' -I'/home/esposch/git/Labrador/Desktop Interface/build_linux/libusb' -I/home/esposch/Qt/5.7/gcc_64/include -I/home/esposch/Qt/5.7/gcc_64/include/QtPrintSupport -I/home/esposch/Qt/5.7/gcc_64/include/QtWidgets -I/home/esposch/Qt/5.7/gcc_64/include/QtGui -I/home/esposch/Qt/5.7/gcc_64/include/QtCore -I/usr/include/c++/5 -I/usr/include/x86_64-linux-gnu/c++/5 -I/usr/include/c++/5/backward -I/usr/lib/gcc/x86_64-linux-gnu/5/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include gahnooslashlinuxusbdriver.h -o moc_gahnooslashlinuxusbdriver.cpp
|
||||||
|
@ -6086,6 +6090,7 @@ main.o: main.cpp mainwindow.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtPrintSupport/qtprintsupportversion.h \
|
../../../Qt/5.7/gcc_64/include/QtPrintSupport/qtprintsupportversion.h \
|
||||||
build_linux/platformspecific.h \
|
build_linux/platformspecific.h \
|
||||||
gahnooslashlinuxusbdriver.h \
|
gahnooslashlinuxusbdriver.h \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/QMutex \
|
||||||
genericusbdriver.h \
|
genericusbdriver.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
||||||
|
@ -6093,6 +6098,7 @@ main.o: main.cpp mainwindow.h \
|
||||||
xmega.h \
|
xmega.h \
|
||||||
desktop_settings.h \
|
desktop_settings.h \
|
||||||
buffercontrol.h \
|
buffercontrol.h \
|
||||||
|
build_linux/libusb/libusb.h \
|
||||||
ui_mainwindow.h \
|
ui_mainwindow.h \
|
||||||
scoperangeenterdialog.h \
|
scoperangeenterdialog.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QDialog \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QDialog \
|
||||||
|
@ -6586,6 +6592,7 @@ mainwindow.o: mainwindow.cpp mainwindow.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtPrintSupport/qtprintsupportversion.h \
|
../../../Qt/5.7/gcc_64/include/QtPrintSupport/qtprintsupportversion.h \
|
||||||
build_linux/platformspecific.h \
|
build_linux/platformspecific.h \
|
||||||
gahnooslashlinuxusbdriver.h \
|
gahnooslashlinuxusbdriver.h \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/QMutex \
|
||||||
genericusbdriver.h \
|
genericusbdriver.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
||||||
|
@ -6593,6 +6600,7 @@ mainwindow.o: mainwindow.cpp mainwindow.h \
|
||||||
xmega.h \
|
xmega.h \
|
||||||
desktop_settings.h \
|
desktop_settings.h \
|
||||||
buffercontrol.h \
|
buffercontrol.h \
|
||||||
|
build_linux/libusb/libusb.h \
|
||||||
ui_mainwindow.h \
|
ui_mainwindow.h \
|
||||||
scoperangeenterdialog.h \
|
scoperangeenterdialog.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QDialog \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QDialog \
|
||||||
|
@ -9511,6 +9519,9 @@ gahnooslashlinuxusbdriver.o: gahnooslashlinuxusbdriver.cpp gahnooslashlinuxusbdr
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qfiledevice.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qfiledevice.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtGui/qvector2d.h \
|
../../../Qt/5.7/gcc_64/include/QtGui/qvector2d.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtGui/qtouchdevice.h \
|
../../../Qt/5.7/gcc_64/include/QtGui/qtouchdevice.h \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/QThread \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/qthread.h \
|
||||||
|
../../../Qt/5.7/gcc_64/include/QtCore/QMutex \
|
||||||
genericusbdriver.h \
|
genericusbdriver.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/QLabel \
|
||||||
../../../Qt/5.7/gcc_64/include/QtWidgets/qlabel.h \
|
../../../Qt/5.7/gcc_64/include/QtWidgets/qlabel.h \
|
||||||
|
@ -9519,8 +9530,6 @@ gahnooslashlinuxusbdriver.o: gahnooslashlinuxusbdriver.cpp gahnooslashlinuxusbdr
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
../../../Qt/5.7/gcc_64/include/QtCore/QTimer \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qtimer.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qtimer.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qbasictimer.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qbasictimer.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QThread \
|
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qthread.h \
|
|
||||||
functiongencontrol.h \
|
functiongencontrol.h \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QDir \
|
../../../Qt/5.7/gcc_64/include/QtCore/QDir \
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/qdir.h \
|
../../../Qt/5.7/gcc_64/include/QtCore/qdir.h \
|
||||||
|
@ -9528,7 +9537,8 @@ gahnooslashlinuxusbdriver.o: gahnooslashlinuxusbdriver.cpp gahnooslashlinuxusbdr
|
||||||
../../../Qt/5.7/gcc_64/include/QtCore/QFile \
|
../../../Qt/5.7/gcc_64/include/QtCore/QFile \
|
||||||
xmega.h \
|
xmega.h \
|
||||||
desktop_settings.h \
|
desktop_settings.h \
|
||||||
buffercontrol.h
|
buffercontrol.h \
|
||||||
|
build_linux/libusb/libusb.h
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o gahnooslashlinuxusbdriver.o gahnooslashlinuxusbdriver.cpp
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o gahnooslashlinuxusbdriver.o gahnooslashlinuxusbdriver.cpp
|
||||||
|
|
||||||
qrc_resources.o: qrc_resources.cpp
|
qrc_resources.o: qrc_resources.cpp
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,7 @@
|
||||||
#include "gahnooslashlinuxusbdriver.h"
|
#include "gahnooslashlinuxusbdriver.h"
|
||||||
|
|
||||||
|
QMutex tcBlockMutex;
|
||||||
|
|
||||||
gahnooSlashLinuxUsbDriver::gahnooSlashLinuxUsbDriver(QWidget *parent) : genericUsbDriver(parent)
|
gahnooSlashLinuxUsbDriver::gahnooSlashLinuxUsbDriver(QWidget *parent) : genericUsbDriver(parent)
|
||||||
{
|
{
|
||||||
qDebug() << "Making USB Driver invisible!!";
|
qDebug() << "Making USB Driver invisible!!";
|
||||||
|
@ -20,17 +22,24 @@ gahnooSlashLinuxUsbDriver::gahnooSlashLinuxUsbDriver(QWidget *parent) : genericU
|
||||||
newDig(digitalPinState);
|
newDig(digitalPinState);
|
||||||
usbIsoInit();
|
usbIsoInit();
|
||||||
|
|
||||||
|
|
||||||
psuTimer = new QTimer();
|
psuTimer = new QTimer();
|
||||||
psuTimer->setTimerType(Qt::PreciseTimer);
|
psuTimer->setTimerType(Qt::PreciseTimer);
|
||||||
psuTimer->start(PSU_PERIOD);
|
psuTimer->start(PSU_PERIOD);
|
||||||
connect(psuTimer, SIGNAL(timeout()), this, SLOT(psuTick()));
|
|
||||||
|
recoveryTimer = new QTimer();
|
||||||
|
recoveryTimer->setTimerType(Qt::PreciseTimer);
|
||||||
|
recoveryTimer->start(RECOVERY_PERIOD);
|
||||||
|
connect(recoveryTimer, SIGNAL(timeout()), this, SLOT(recoveryTick()));
|
||||||
}
|
}
|
||||||
|
|
||||||
gahnooSlashLinuxUsbDriver::~gahnooSlashLinuxUsbDriver(void){
|
gahnooSlashLinuxUsbDriver::~gahnooSlashLinuxUsbDriver(void){
|
||||||
qDebug() << "\n\ngahnooSlashLinuxUsbDriver destructor ran!";
|
qDebug() << "\n\ngahnooSlashLinuxUsbDriver destructor ran!";
|
||||||
workerThread->quit();
|
workerThread->quit();
|
||||||
workerThread->wait();
|
workerThread->deleteLater();
|
||||||
|
delete(isoHandler);
|
||||||
|
delete(psuTimer);
|
||||||
|
delete(recoveryTimer);
|
||||||
|
delete(isoTimer);
|
||||||
libusb_release_interface(handle, 0);
|
libusb_release_interface(handle, 0);
|
||||||
libusb_exit(ctx);
|
libusb_exit(ctx);
|
||||||
}
|
}
|
||||||
|
@ -73,6 +82,10 @@ void gahnooSlashLinuxUsbDriver::usbSendControl(uint8_t RequestType, uint8_t Requ
|
||||||
if(error){
|
if(error){
|
||||||
qDebug("gahnooSlashLinuxUsbDriver::usbSendControl FAILED with error %s", libusb_error_name(error));
|
qDebug("gahnooSlashLinuxUsbDriver::usbSendControl FAILED with error %s", libusb_error_name(error));
|
||||||
} else qDebug() << "gahnooSlashLinuxUsbDriver::usbSendControl SUCCESS";
|
} else qDebug() << "gahnooSlashLinuxUsbDriver::usbSendControl SUCCESS";
|
||||||
|
if(error == LIBUSB_ERROR_NO_DEVICE){
|
||||||
|
qDebug() << "Device not found. Becoming an hero.";
|
||||||
|
killMe();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +94,9 @@ unsigned char gahnooSlashLinuxUsbDriver::usbIsoInit(void){
|
||||||
|
|
||||||
for(int n=0;n<NUM_FUTURE_CTX;n++){
|
for(int n=0;n<NUM_FUTURE_CTX;n++){
|
||||||
isoCtx[n] = libusb_alloc_transfer(ISO_PACKETS_PER_CTX);
|
isoCtx[n] = libusb_alloc_transfer(ISO_PACKETS_PER_CTX);
|
||||||
libusb_fill_iso_transfer(isoCtx[n], handle, pipeID, dataBuffer[n], ISO_PACKET_SIZE*ISO_PACKETS_PER_CTX, ISO_PACKETS_PER_CTX, isoCallback, (void*)n, 4000);
|
transferCompleted[n].number = n;
|
||||||
|
transferCompleted[n].completed = false;
|
||||||
|
libusb_fill_iso_transfer(isoCtx[n], handle, pipeID, dataBuffer[n], ISO_PACKET_SIZE*ISO_PACKETS_PER_CTX, ISO_PACKETS_PER_CTX, isoCallback, (void*)&transferCompleted[n], 4000);
|
||||||
libusb_set_iso_packet_lengths(isoCtx[n], ISO_PACKET_SIZE);
|
libusb_set_iso_packet_lengths(isoCtx[n], ISO_PACKET_SIZE);
|
||||||
error = libusb_submit_transfer(isoCtx[n]);
|
error = libusb_submit_transfer(isoCtx[n]);
|
||||||
if(error){
|
if(error){
|
||||||
|
@ -102,8 +117,12 @@ unsigned char gahnooSlashLinuxUsbDriver::usbIsoInit(void){
|
||||||
isoHandler->ctx = ctx;
|
isoHandler->ctx = ctx;
|
||||||
isoHandler->moveToThread(workerThread);
|
isoHandler->moveToThread(workerThread);
|
||||||
connect(workerThread, SIGNAL(started()), isoHandler, SLOT(handle()));
|
connect(workerThread, SIGNAL(started()), isoHandler, SLOT(handle()));
|
||||||
//workerThread->start();
|
|
||||||
|
|
||||||
|
workerThread->start();
|
||||||
|
|
||||||
|
qDebug() << "MAIN THREAD ID" << QThread::currentThreadId();
|
||||||
|
//QThread::sleep(1);
|
||||||
|
qDebug() << "Iso Stack initialised!";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,23 +136,75 @@ void gahnooSlashLinuxUsbDriver::isoTimerTick(void){
|
||||||
if((timerCount<20) && (timerCount > 10)) strcpy(subString, "th");
|
if((timerCount<20) && (timerCount > 10)) strcpy(subString, "th");
|
||||||
|
|
||||||
//qDebug("\n\nThis is the %d%s Tick!", timerCount, subString);
|
//qDebug("\n\nThis is the %d%s Tick!", timerCount, subString);
|
||||||
return;
|
|
||||||
|
|
||||||
int n;
|
int n, error, earliest = MAX_OVERLAP;
|
||||||
|
qint64 minFrame = 9223372036854775807; //max value for 64 bit signed
|
||||||
|
|
||||||
|
unsigned int i, packetLength = 0;
|
||||||
|
unsigned char* packetPointer;
|
||||||
|
|
||||||
|
tcBlockMutex.lock();
|
||||||
for (n=0; n<NUM_FUTURE_CTX; n++){
|
for (n=0; n<NUM_FUTURE_CTX; n++){
|
||||||
if(isoCtx[n]->status==LIBUSB_TRANSFER_COMPLETED){
|
if(transferCompleted[n].completed){
|
||||||
qDebug("Transfer %d is complete!!", n);
|
//qDebug("Transfer %d is complete!!", n);
|
||||||
|
if(transferCompleted[n].timeReceived < minFrame){
|
||||||
|
minFrame = transferCompleted[n].timeReceived;
|
||||||
|
earliest = n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (earliest == MAX_OVERLAP){
|
||||||
|
tcBlockMutex.unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Copy iso data into buffer
|
||||||
|
for(i=0;i<isoCtx[earliest]->num_iso_packets;i++){
|
||||||
|
packetPointer = libusb_get_iso_packet_buffer_simple(isoCtx[earliest], i);
|
||||||
|
//qDebug() << packetLength;
|
||||||
|
memcpy(&(outBuffers[currentWriteBuffer][packetLength]), packetPointer, isoCtx[earliest]->iso_packet_desc[i].actual_length);
|
||||||
|
packetLength += isoCtx[earliest]->iso_packet_desc[i].actual_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Control data for isoDriver
|
||||||
|
bufferLengths[currentWriteBuffer] = packetLength;
|
||||||
|
currentWriteBuffer = !currentWriteBuffer;
|
||||||
|
|
||||||
|
//Setup next transfer
|
||||||
|
transferCompleted[earliest].completed = false;
|
||||||
|
error = libusb_submit_transfer(isoCtx[earliest]);
|
||||||
|
if(error){
|
||||||
|
qDebug() << "libusb_submit_transfer FAILED";
|
||||||
|
qDebug() << "ERROR" << libusb_error_name(error);
|
||||||
|
} //else qDebug() << "isoCtx submitted successfully!";
|
||||||
|
tcBlockMutex.unlock();
|
||||||
|
upTick();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *gahnooSlashLinuxUsbDriver::isoRead(unsigned int *newLength){
|
char *gahnooSlashLinuxUsbDriver::isoRead(unsigned int *newLength){
|
||||||
*(newLength) = 0;
|
//*(newLength) = 0;
|
||||||
return (char*) NULL;
|
//return (char*) NULL;
|
||||||
|
qDebug() << "gahnooSlashLinuxUsbDriver::isoRead";
|
||||||
|
*(newLength) = bufferLengths[!currentWriteBuffer];
|
||||||
|
return (char*) outBuffers[(unsigned char) !currentWriteBuffer];
|
||||||
|
}
|
||||||
|
|
||||||
|
void gahnooSlashLinuxUsbDriver::recoveryTick(void){
|
||||||
|
avrDebug();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LIBUSB_CALL isoCallback(struct libusb_transfer * transfer){
|
static void LIBUSB_CALL isoCallback(struct libusb_transfer * transfer){
|
||||||
qDebug() << "CALLBACK" << (long) transfer->user_data;
|
tcBlockMutex.lock();
|
||||||
|
//int number = ((tcBlock *)transfer->user_data)->number;
|
||||||
|
//bool completed = ((tcBlock *)transfer->user_data)->completed;
|
||||||
|
|
||||||
|
//qDebug() << "CALLBACK" << number;
|
||||||
|
//qDebug() << completed;
|
||||||
|
|
||||||
|
((tcBlock *)transfer->user_data)->completed = true;
|
||||||
|
((tcBlock *)transfer->user_data)->timeReceived = QDateTime::currentMSecsSinceEpoch();
|
||||||
|
//qDebug() << ((tcBlock *)transfer->user_data)->timeReceived;
|
||||||
|
tcBlockMutex.unlock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,17 +3,21 @@
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
#include <QMutex>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
#include "genericusbdriver.h"
|
#include "genericusbdriver.h"
|
||||||
#include "libusb.h"
|
#include "libusb.h"
|
||||||
|
|
||||||
/*while(1){
|
#define RECOVERY_PERIOD 250
|
||||||
if(libusb_event_handling_ok(ctx)){
|
|
||||||
libusb_handle_events(ctx);
|
|
||||||
qDebug() << "HANDLED";
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
typedef struct tcBlock{
|
||||||
|
int number;
|
||||||
|
bool completed;
|
||||||
|
qint64 timeReceived;
|
||||||
|
} tcBlock;
|
||||||
|
|
||||||
|
extern QMutex tcBlockMutex;
|
||||||
|
|
||||||
class worker : public QObject
|
class worker : public QObject
|
||||||
{
|
{
|
||||||
|
@ -25,7 +29,13 @@ public:
|
||||||
libusb_context *ctx;
|
libusb_context *ctx;
|
||||||
public slots:
|
public slots:
|
||||||
void handle(){
|
void handle(){
|
||||||
while(1);
|
qDebug() << "SUB THREAD ID" << QThread::currentThreadId();
|
||||||
|
while(1){
|
||||||
|
if(libusb_event_handling_ok(ctx)){
|
||||||
|
libusb_handle_events(ctx);
|
||||||
|
//qDebug() << "HANDLED";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -42,8 +52,10 @@ private:
|
||||||
libusb_context *ctx;
|
libusb_context *ctx;
|
||||||
libusb_device_handle *handle = NULL;
|
libusb_device_handle *handle = NULL;
|
||||||
unsigned char pipeID = 0x83;
|
unsigned char pipeID = 0x83;
|
||||||
|
QTimer *recoveryTimer;
|
||||||
//USBIso Vars
|
//USBIso Vars
|
||||||
libusb_transfer *isoCtx[NUM_FUTURE_CTX];
|
libusb_transfer *isoCtx[NUM_FUTURE_CTX];
|
||||||
|
tcBlock transferCompleted[NUM_FUTURE_CTX];
|
||||||
unsigned char dataBuffer[NUM_FUTURE_CTX][ISO_PACKET_SIZE*ISO_PACKETS_PER_CTX];
|
unsigned char dataBuffer[NUM_FUTURE_CTX][ISO_PACKET_SIZE*ISO_PACKETS_PER_CTX];
|
||||||
QTimer *isoTimer;
|
QTimer *isoTimer;
|
||||||
unsigned char currentWriteBuffer = 0;
|
unsigned char currentWriteBuffer = 0;
|
||||||
|
@ -56,6 +68,7 @@ private:
|
||||||
signals:
|
signals:
|
||||||
public slots:
|
public slots:
|
||||||
void isoTimerTick(void);
|
void isoTimerTick(void);
|
||||||
|
void recoveryTick(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
static void LIBUSB_CALL isoCallback(struct libusb_transfer *transfer);
|
static void LIBUSB_CALL isoCallback(struct libusb_transfer *transfer);
|
||||||
|
|
Binary file not shown.
|
@ -58,7 +58,9 @@ void isoDriver::timerTick(void){
|
||||||
total_read += length;
|
total_read += length;
|
||||||
|
|
||||||
if (length==0){
|
if (length==0){
|
||||||
//free(isoTemp);
|
//Zero length packet means something's gone wrong. Probably a disconnect.
|
||||||
|
//qDebug() << "Zero length iso packet. An hero!";
|
||||||
|
//driver->killMe();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -109,8 +109,8 @@ int worker::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||||
return _id;
|
return _id;
|
||||||
}
|
}
|
||||||
struct qt_meta_stringdata_gahnooSlashLinuxUsbDriver_t {
|
struct qt_meta_stringdata_gahnooSlashLinuxUsbDriver_t {
|
||||||
QByteArrayData data[3];
|
QByteArrayData data[4];
|
||||||
char stringdata0[40];
|
char stringdata0[53];
|
||||||
};
|
};
|
||||||
#define QT_MOC_LITERAL(idx, ofs, len) \
|
#define QT_MOC_LITERAL(idx, ofs, len) \
|
||||||
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
|
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
|
||||||
|
@ -121,11 +121,12 @@ static const qt_meta_stringdata_gahnooSlashLinuxUsbDriver_t qt_meta_stringdata_g
|
||||||
{
|
{
|
||||||
QT_MOC_LITERAL(0, 0, 25), // "gahnooSlashLinuxUsbDriver"
|
QT_MOC_LITERAL(0, 0, 25), // "gahnooSlashLinuxUsbDriver"
|
||||||
QT_MOC_LITERAL(1, 26, 12), // "isoTimerTick"
|
QT_MOC_LITERAL(1, 26, 12), // "isoTimerTick"
|
||||||
QT_MOC_LITERAL(2, 39, 0) // ""
|
QT_MOC_LITERAL(2, 39, 0), // ""
|
||||||
|
QT_MOC_LITERAL(3, 40, 12) // "recoveryTick"
|
||||||
|
|
||||||
},
|
},
|
||||||
"gahnooSlashLinuxUsbDriver\0isoTimerTick\0"
|
"gahnooSlashLinuxUsbDriver\0isoTimerTick\0"
|
||||||
""
|
"\0recoveryTick"
|
||||||
};
|
};
|
||||||
#undef QT_MOC_LITERAL
|
#undef QT_MOC_LITERAL
|
||||||
|
|
||||||
|
@ -135,7 +136,7 @@ static const uint qt_meta_data_gahnooSlashLinuxUsbDriver[] = {
|
||||||
7, // revision
|
7, // revision
|
||||||
0, // classname
|
0, // classname
|
||||||
0, 0, // classinfo
|
0, 0, // classinfo
|
||||||
1, 14, // methods
|
2, 14, // methods
|
||||||
0, 0, // properties
|
0, 0, // properties
|
||||||
0, 0, // enums/sets
|
0, 0, // enums/sets
|
||||||
0, 0, // constructors
|
0, 0, // constructors
|
||||||
|
@ -143,9 +144,11 @@ static const uint qt_meta_data_gahnooSlashLinuxUsbDriver[] = {
|
||||||
0, // signalCount
|
0, // signalCount
|
||||||
|
|
||||||
// slots: name, argc, parameters, tag, flags
|
// slots: name, argc, parameters, tag, flags
|
||||||
1, 0, 19, 2, 0x0a /* Public */,
|
1, 0, 24, 2, 0x0a /* Public */,
|
||||||
|
3, 0, 25, 2, 0x0a /* Public */,
|
||||||
|
|
||||||
// slots: parameters
|
// slots: parameters
|
||||||
|
QMetaType::Void,
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
|
|
||||||
0 // eod
|
0 // eod
|
||||||
|
@ -158,6 +161,7 @@ void gahnooSlashLinuxUsbDriver::qt_static_metacall(QObject *_o, QMetaObject::Cal
|
||||||
Q_UNUSED(_t)
|
Q_UNUSED(_t)
|
||||||
switch (_id) {
|
switch (_id) {
|
||||||
case 0: _t->isoTimerTick(); break;
|
case 0: _t->isoTimerTick(); break;
|
||||||
|
case 1: _t->recoveryTick(); break;
|
||||||
default: ;
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,13 +193,13 @@ int gahnooSlashLinuxUsbDriver::qt_metacall(QMetaObject::Call _c, int _id, void *
|
||||||
if (_id < 0)
|
if (_id < 0)
|
||||||
return _id;
|
return _id;
|
||||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||||
if (_id < 1)
|
if (_id < 2)
|
||||||
qt_static_metacall(this, _c, _id, _a);
|
qt_static_metacall(this, _c, _id, _a);
|
||||||
_id -= 1;
|
_id -= 2;
|
||||||
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||||
if (_id < 1)
|
if (_id < 2)
|
||||||
*reinterpret_cast<int*>(_a[0]) = -1;
|
*reinterpret_cast<int*>(_a[0]) = -1;
|
||||||
_id -= 1;
|
_id -= 2;
|
||||||
}
|
}
|
||||||
return _id;
|
return _id;
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue