Found bug. All iso packets have length 0.

This commit is contained in:
Chris Esposito 2018-04-01 09:59:35 +11:00
parent 36b9be5837
commit 88ce3aec39
14 changed files with 6826 additions and 1110 deletions

4
.gitignore vendored
View File

@ -42,3 +42,7 @@ Desktop_Interface/bin/Labrador
pinout.png
Matlab_Octave_API/___librador/build-librador-Desktop_Qt_5_10_0_GCC_64bit-Release
Matlab_Octave_API/___librador/build-librador-Desktop_Qt_5_10_0_GCC_64bit-Debug
Matlab_Octave_API/___librador/demo/librademo/Makefile
Matlab_Octave_API/___librador/demo/librademo/librademo

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
#
#-------------------------------------------------
QT += core gui
QT += core gui widgets printsupport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@ -25,10 +25,17 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp
mainwindow.cpp \
../../../../Desktop_Interface/ui_elements/qcp1/qcustomplot.cpp
HEADERS += \
mainwindow.h
mainwindow.h \
../../../../Desktop_Interface/ui_elements/qcp1/qcustomplot.h
INCLUDEPATH += \
../../../../Desktop_Interface/ui_elements/qcp1
FORMS += \
mainwindow.ui
@ -40,14 +47,14 @@ unix:DEPENDPATH += ../../librador
unix:!android:!macx {
#libusb include
LIBS += -L../../../Desktop_Interface/build_linux/libusb -lusb-1.0 ##I suspect the -L here does nothing!
INCLUDEPATH += ../../../Desktop_Interface/build_linux/libusb
DEPENDPATH += ../../../Desktop_Interface/build_linux/libusb
LIBS += -L../../../../Desktop_Interface/build_linux/libusb -lusb-1.0 ##I suspect the -L here does nothing!
INCLUDEPATH += ../../../../Desktop_Interface/build_linux/libusb
DEPENDPATH += ../../../../Desktop_Interface/build_linux/libusb
#libdfuprog include
LIBS += -L../../../Desktop_Interface/build_linux/libdfuprog/lib/x64 -ldfuprog-0.9
INCLUDEPATH += ../../../Desktop_Interface/build_linux/libdfuprog/include
DEPENDPATH += ../../../Desktop_Interface/build_linux/libdfuprog/include
LIBS += -L../../../../Desktop_Interface/build_linux/libdfuprog/lib/x64 -ldfuprog-0.9
INCLUDEPATH += ../../../../Desktop_Interface/build_linux/libdfuprog/include
DEPENDPATH += ../../../../Desktop_Interface/build_linux/libdfuprog/include
#linux defines
DEFINES += \

View File

@ -2,6 +2,7 @@
#include "ui_mainwindow.h"
#include "librador.h"
#include "QDebug"
#include <QVector>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
@ -10,6 +11,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->setupUi(this);
setbuf(stdout, 0);
setbuf(stderr, 0);
initialisePlot();
}
MainWindow::~MainWindow()
@ -17,6 +19,37 @@ MainWindow::~MainWindow()
delete ui;
}
void MainWindow::initialisePlot()
{
ui->widget->addGraph();
ui->widget->addGraph();
ui->widget->yAxis->setAutoTickCount(9);
ui->widget->xAxis->setAutoTickCount(9);
ui->widget->graph(0)->setPen(QPen(Qt::yellow, 1));
ui->widget->graph(1)->setPen(QPen(Qt::cyan, 1));
ui->widget->xAxis->setBasePen(QPen(Qt::white, 1));
ui->widget->yAxis->setBasePen(QPen(Qt::white, 1));
ui->widget->xAxis->setTickPen(QPen(Qt::white, 1));
ui->widget->yAxis->setTickPen(QPen(Qt::white, 1));
ui->widget->xAxis->setSubTickPen(QPen(Qt::white, 1));
ui->widget->yAxis->setSubTickPen(QPen(Qt::white, 1));
ui->widget->xAxis->setTickLength(6);
ui->widget->yAxis->setTickLength(6);
ui->widget->xAxis->setSubTickLength(4);
ui->widget->yAxis->setSubTickLength(4);
ui->widget->xAxis->setTickLabelColor(Qt::white);
ui->widget->yAxis->setTickLabelColor(Qt::white);
ui->widget->setBackground(Qt::black);
ui->widget->replot();
}
void MainWindow::on_pushButton_clicked()
{
qDebug() << librador_init();
@ -36,3 +69,26 @@ void MainWindow::on_pushButton_4_clicked()
{
qDebug() << librador_avr_debug();
}
void MainWindow::on_pushButton_5_clicked()
{
QVector<double> yaxis = QVector<double>::fromStdVector(*(librador_get_iso_data(75000, 1, 750000, 0)));
qDebug() << yaxis;
QVector<double> xaxis;
for (int i=0; i<yaxis.length(); i++){
xaxis.append(i);
}
qDebug() << yaxis.length();
qDebug() << xaxis.length();
ui->widget->yAxis->setRange(0, 255);
ui->widget->xAxis->setRange(0, yaxis.length());
ui->widget->graph(0)->setData(xaxis, yaxis);
ui->widget->replot();
}

View File

@ -14,6 +14,8 @@ class MainWindow : public QMainWindow
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void initialisePlot();
private slots:
void on_pushButton_clicked();
@ -23,6 +25,8 @@ private slots:
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
private:
Ui::MainWindow *ui;
};

View File

@ -6,42 +6,56 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<width>1280</width>
<height>720</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Open API</string>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Open API</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Close API</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Setup USB</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>avrDebug()</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>Get Scope Data</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Close API</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Setup USB</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>avrDebug()</string>
</property>
</widget>
<widget class="QCustomPlot" name="widget" native="true"/>
</item>
</layout>
</widget>
@ -50,7 +64,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<width>1280</width>
<height>22</height>
</rect>
</property>
@ -66,6 +80,14 @@
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>QCustomPlot</class>
<extends>QWidget</extends>
<header>qcustomplot.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -21,8 +21,8 @@ QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_MainWindow_t {
QByteArrayData data[6];
char stringdata0[106];
QByteArrayData data[7];
char stringdata0[130];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
@ -36,12 +36,13 @@ QT_MOC_LITERAL(1, 11, 21), // "on_pushButton_clicked"
QT_MOC_LITERAL(2, 33, 0), // ""
QT_MOC_LITERAL(3, 34, 23), // "on_pushButton_2_clicked"
QT_MOC_LITERAL(4, 58, 23), // "on_pushButton_3_clicked"
QT_MOC_LITERAL(5, 82, 23) // "on_pushButton_4_clicked"
QT_MOC_LITERAL(5, 82, 23), // "on_pushButton_4_clicked"
QT_MOC_LITERAL(6, 106, 23) // "on_pushButton_5_clicked"
},
"MainWindow\0on_pushButton_clicked\0\0"
"on_pushButton_2_clicked\0on_pushButton_3_clicked\0"
"on_pushButton_4_clicked"
"on_pushButton_4_clicked\0on_pushButton_5_clicked"
};
#undef QT_MOC_LITERAL
@ -51,7 +52,7 @@ static const uint qt_meta_data_MainWindow[] = {
7, // revision
0, // classname
0, 0, // classinfo
4, 14, // methods
5, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
@ -59,15 +60,17 @@ static const uint qt_meta_data_MainWindow[] = {
0, // signalCount
// slots: name, argc, parameters, tag, flags
1, 0, 34, 2, 0x08 /* Private */,
3, 0, 35, 2, 0x08 /* Private */,
4, 0, 36, 2, 0x08 /* Private */,
5, 0, 37, 2, 0x08 /* Private */,
1, 0, 39, 2, 0x08 /* Private */,
3, 0, 40, 2, 0x08 /* Private */,
4, 0, 41, 2, 0x08 /* Private */,
5, 0, 42, 2, 0x08 /* Private */,
6, 0, 43, 2, 0x08 /* Private */,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
0 // eod
@ -83,6 +86,7 @@ void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
case 1: _t->on_pushButton_2_clicked(); break;
case 2: _t->on_pushButton_3_clicked(); break;
case 3: _t->on_pushButton_4_clicked(); break;
case 4: _t->on_pushButton_5_clicked(); break;
default: ;
}
}
@ -114,13 +118,13 @@ int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 4)
if (_id < 5)
qt_static_metacall(this, _c, _id, _a);
_id -= 4;
_id -= 5;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 4)
if (_id < 5)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 4;
_id -= 5;
}
return _id;
}

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,7 @@
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
@ -21,6 +22,7 @@
#include <QtWidgets/QToolBar>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
#include "qcustomplot.h"
QT_BEGIN_NAMESPACE
@ -28,11 +30,14 @@ class Ui_MainWindow
{
public:
QWidget *centralWidget;
QHBoxLayout *horizontalLayout;
QVBoxLayout *verticalLayout;
QPushButton *pushButton;
QPushButton *pushButton_2;
QPushButton *pushButton_3;
QPushButton *pushButton_4;
QPushButton *pushButton_5;
QCustomPlot *widget;
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;
@ -41,12 +46,15 @@ public:
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QStringLiteral("MainWindow"));
MainWindow->resize(400, 300);
MainWindow->resize(1280, 720);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QStringLiteral("centralWidget"));
verticalLayout = new QVBoxLayout(centralWidget);
horizontalLayout = new QHBoxLayout(centralWidget);
horizontalLayout->setSpacing(6);
horizontalLayout->setContentsMargins(11, 11, 11, 11);
horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
verticalLayout = new QVBoxLayout();
verticalLayout->setSpacing(6);
verticalLayout->setContentsMargins(11, 11, 11, 11);
verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
pushButton = new QPushButton(centralWidget);
pushButton->setObjectName(QStringLiteral("pushButton"));
@ -68,10 +76,23 @@ public:
verticalLayout->addWidget(pushButton_4);
pushButton_5 = new QPushButton(centralWidget);
pushButton_5->setObjectName(QStringLiteral("pushButton_5"));
verticalLayout->addWidget(pushButton_5);
horizontalLayout->addLayout(verticalLayout);
widget = new QCustomPlot(centralWidget);
widget->setObjectName(QStringLiteral("widget"));
horizontalLayout->addWidget(widget);
MainWindow->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QStringLiteral("menuBar"));
menuBar->setGeometry(QRect(0, 0, 400, 22));
menuBar->setGeometry(QRect(0, 0, 1280, 22));
MainWindow->setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindow);
mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
@ -92,6 +113,7 @@ public:
pushButton_2->setText(QApplication::translate("MainWindow", "Close API", nullptr));
pushButton_3->setText(QApplication::translate("MainWindow", "Setup USB", nullptr));
pushButton_4->setText(QApplication::translate("MainWindow", "avrDebug()", nullptr));
pushButton_5->setText(QApplication::translate("MainWindow", "Get Scope Data", nullptr));
} // retranslateUi
};

View File

@ -2,6 +2,9 @@
#include "librador_internal.h"
#include "usbcallhandler.h"
#include <vector>
#include <QThread>
Librador::Librador()
{
usb_driver = new usbCallHandler(LABRADOR_VID, LABRADOR_PID);
@ -56,3 +59,7 @@ int librador_avr_debug(){
CHECK_API_INITIALISED
return internal_librador_object->usb_driver->avrDebug();
}
std::vector<double> * librador_get_iso_data(int numToGet, int interval_samples, int delay_sample, int filter_mode){
return internal_librador_object->usb_driver->getMany_double(numToGet, interval_samples, delay_sample, filter_mode);
}

View File

@ -7,5 +7,6 @@ int LIBRADORSHARED_EXPORT librador_init();
int LIBRADORSHARED_EXPORT librador_exit();
int LIBRADORSHARED_EXPORT librador_setup_usb();
int LIBRADORSHARED_EXPORT librador_avr_debug();
std::vector<double> * LIBRADORSHARED_EXPORT librador_get_iso_data(int numToGet, int interval_samples, int delay_sample, int filter_mode);
#endif // LIBRADOR_H

View File

@ -15,10 +15,16 @@ static void LIBUSB_CALL isoCallback(struct libusb_transfer * transfer){
//TODO: a switch statement here to handle all the modes.
for(int i=0;i<transfer->num_iso_packets;i++){
unsigned char *packetPointer = libusb_get_iso_packet_buffer_simple(transfer, i);
printf("Expected length is %d\n", transfer->length);
printf("Actual length is %d\n", transfer->actual_length);
for(int k=0; k<transfer->actual_length; k++){
printf("%d ", packetPointer[k]);
}
printf("\n");
internal_o1_buffer->addVector(packetPointer, 375);
}
printf("Re-arm the endpoint...\n");
int error = libusb_submit_transfer(transfer);
int error = 0;//libusb_submit_transfer(transfer);
if(error){
printf("Error re-arming the endpoint!\n");
}
@ -29,8 +35,8 @@ static void LIBUSB_CALL isoCallback(struct libusb_transfer * transfer){
void usb_polling_function(libusb_context *ctx){
printf("usb_polling_function thread spawned\n");
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = ISO_PACKETS_PER_CTX*4000;
tv.tv_sec = 1;
tv.tv_usec = 0;//ISO_PACKETS_PER_CTX*4000;
while(1){
printf("usb_polling_function begin loop\n");
if(libusb_event_handling_ok(ctx)){
@ -93,6 +99,14 @@ int usbCallHandler::setup_usb_control(){
return -3;
} else printf("Interface claimed!\n");
error = libusb_set_interface_alt_setting(handle, 0, 0);
if(error){
printf("libusb_set_interface_alt_setting FAILED\n");
libusb_close(handle);
handle = NULL;
return -4;
} else printf("bAlternateSetting claimed!\n");
connected = true;
return 0;
}
@ -181,3 +195,7 @@ int usbCallHandler::avrDebug(void){
return 0;
}
std::vector<double>* usbCallHandler::getMany_double(int numToGet, int interval_samples, int delay_sample, int filter_mode){
return internal_o1_buffer->getMany_double(numToGet, interval_samples, delay_sample, filter_mode);
}

View File

@ -3,11 +3,12 @@
#include "libusb.h"
#include <thread>
#include <vector>
#define NUM_ISO_ENDPOINTS 1
#define NUM_FUTURE_CTX 4
#define ISO_PACKET_SIZE 750
#define ISO_PACKETS_PER_CTX 33
#define NUM_ISO_ENDPOINTS (1)
#define NUM_FUTURE_CTX (2)
#define ISO_PACKET_SIZE (750)
#define ISO_PACKETS_PER_CTX (125)
//EVERYTHING MUST BE SENT ONE BYTE AT A TIME, HIGH AND LOW BYTES SEPARATE, IN ORDER TO AVOID ISSUES WITH ENDIANNESS.
typedef struct uds{
@ -43,6 +44,7 @@ public:
int setup_usb_iso();
int send_control_transfer(uint8_t RequestType, uint8_t Request, uint16_t Value, uint16_t Index, uint16_t Length, unsigned char *LDATA);
int avrDebug(void);
std::vector<double> *getMany_double(int numToGet, int interval_samples, int delay_sample, int filter_mode);
bool connected;
private:
unsigned short VID, PID;