mirror of https://github.com/EspoTek/Labrador.git
Librador Beta ready.
This commit is contained in:
parent
494b0f2a36
commit
83bc540fe6
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -238,3 +238,26 @@ void MainWindow::plot_from_librador(std::vector<double> *from_librador, double s
|
||||||
graph->setData(xaxis, yaxis);
|
graph->setData(xaxis, yaxis);
|
||||||
ui->widget->replot();
|
ui->widget->replot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_pushButton_15_clicked()
|
||||||
|
{
|
||||||
|
double sampleRate = 3000000;
|
||||||
|
if((current_channel == 1) || (current_channel == 2)){
|
||||||
|
std::vector<uint8_t> *from_librador_uint8 = (librador_get_digital_data(current_channel, 1, sampleRate, 0.1));
|
||||||
|
if(from_librador_uint8 != NULL){
|
||||||
|
std::vector<double> from_librador(from_librador_uint8->begin(), from_librador_uint8->end());
|
||||||
|
plot_from_librador(&from_librador, sampleRate, ui->widget->graph(0));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
std::vector<uint8_t> *from_librador_ch1_uint8 = (librador_get_digital_data(1, 1, sampleRate, 0.1));
|
||||||
|
std::vector<uint8_t> *from_librador_ch2_uint8 = (librador_get_digital_data(2, 1, sampleRate, 0.1));
|
||||||
|
if(from_librador_ch1_uint8 != NULL){
|
||||||
|
std::vector<double> from_librador_ch1(from_librador_ch1_uint8->begin(), from_librador_ch1_uint8->end());
|
||||||
|
plot_from_librador(&from_librador_ch1, sampleRate, ui->widget->graph(0));
|
||||||
|
}
|
||||||
|
if(from_librador_ch2_uint8 != NULL){
|
||||||
|
std::vector<double> from_librador_ch2(from_librador_ch2_uint8->begin(), from_librador_ch2_uint8->end());
|
||||||
|
plot_from_librador(&from_librador_ch2, sampleRate, ui->widget->graph(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -64,6 +64,8 @@ private slots:
|
||||||
|
|
||||||
void on_pushButton_14_clicked();
|
void on_pushButton_14_clicked();
|
||||||
|
|
||||||
|
void on_pushButton_15_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
};
|
};
|
|
@ -293,6 +293,13 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_15">
|
||||||
|
<property name="text">
|
||||||
|
<string>Get Digital (1s)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="pushButton_14">
|
<widget class="QPushButton" name="pushButton_14">
|
||||||
<property name="text">
|
<property name="text">
|
|
@ -21,8 +21,8 @@ QT_BEGIN_MOC_NAMESPACE
|
||||||
QT_WARNING_PUSH
|
QT_WARNING_PUSH
|
||||||
QT_WARNING_DISABLE_DEPRECATED
|
QT_WARNING_DISABLE_DEPRECATED
|
||||||
struct qt_meta_stringdata_MainWindow_t {
|
struct qt_meta_stringdata_MainWindow_t {
|
||||||
QByteArrayData data[25];
|
QByteArrayData data[26];
|
||||||
char stringdata0[538];
|
char stringdata0[563];
|
||||||
};
|
};
|
||||||
#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, \
|
||||||
|
@ -55,7 +55,8 @@ QT_MOC_LITERAL(20, 415, 23), // "on_comboBox_2_activated"
|
||||||
QT_MOC_LITERAL(21, 439, 23), // "on_comboBox_3_activated"
|
QT_MOC_LITERAL(21, 439, 23), // "on_comboBox_3_activated"
|
||||||
QT_MOC_LITERAL(22, 463, 24), // "on_pushButton_12_clicked"
|
QT_MOC_LITERAL(22, 463, 24), // "on_pushButton_12_clicked"
|
||||||
QT_MOC_LITERAL(23, 488, 24), // "on_pushButton_13_clicked"
|
QT_MOC_LITERAL(23, 488, 24), // "on_pushButton_13_clicked"
|
||||||
QT_MOC_LITERAL(24, 513, 24) // "on_pushButton_14_clicked"
|
QT_MOC_LITERAL(24, 513, 24), // "on_pushButton_14_clicked"
|
||||||
|
QT_MOC_LITERAL(25, 538, 24) // "on_pushButton_15_clicked"
|
||||||
|
|
||||||
},
|
},
|
||||||
"MainWindow\0on_pushButton_clicked\0\0"
|
"MainWindow\0on_pushButton_clicked\0\0"
|
||||||
|
@ -73,7 +74,8 @@ QT_MOC_LITERAL(24, 513, 24) // "on_pushButton_14_clicked"
|
||||||
"on_comboBox_2_activated\0on_comboBox_3_activated\0"
|
"on_comboBox_2_activated\0on_comboBox_3_activated\0"
|
||||||
"on_pushButton_12_clicked\0"
|
"on_pushButton_12_clicked\0"
|
||||||
"on_pushButton_13_clicked\0"
|
"on_pushButton_13_clicked\0"
|
||||||
"on_pushButton_14_clicked"
|
"on_pushButton_14_clicked\0"
|
||||||
|
"on_pushButton_15_clicked"
|
||||||
};
|
};
|
||||||
#undef QT_MOC_LITERAL
|
#undef QT_MOC_LITERAL
|
||||||
|
|
||||||
|
@ -83,7 +85,7 @@ static const uint qt_meta_data_MainWindow[] = {
|
||||||
7, // revision
|
7, // revision
|
||||||
0, // classname
|
0, // classname
|
||||||
0, 0, // classinfo
|
0, 0, // classinfo
|
||||||
21, 14, // methods
|
22, 14, // methods
|
||||||
0, 0, // properties
|
0, 0, // properties
|
||||||
0, 0, // enums/sets
|
0, 0, // enums/sets
|
||||||
0, 0, // constructors
|
0, 0, // constructors
|
||||||
|
@ -91,27 +93,28 @@ static const uint qt_meta_data_MainWindow[] = {
|
||||||
0, // signalCount
|
0, // signalCount
|
||||||
|
|
||||||
// slots: name, argc, parameters, tag, flags
|
// slots: name, argc, parameters, tag, flags
|
||||||
1, 0, 119, 2, 0x08 /* Private */,
|
1, 0, 124, 2, 0x08 /* Private */,
|
||||||
3, 0, 120, 2, 0x08 /* Private */,
|
3, 0, 125, 2, 0x08 /* Private */,
|
||||||
4, 0, 121, 2, 0x08 /* Private */,
|
4, 0, 126, 2, 0x08 /* Private */,
|
||||||
5, 0, 122, 2, 0x08 /* Private */,
|
5, 0, 127, 2, 0x08 /* Private */,
|
||||||
6, 0, 123, 2, 0x08 /* Private */,
|
6, 0, 128, 2, 0x08 /* Private */,
|
||||||
7, 0, 124, 2, 0x08 /* Private */,
|
7, 0, 129, 2, 0x08 /* Private */,
|
||||||
8, 0, 125, 2, 0x08 /* Private */,
|
8, 0, 130, 2, 0x08 /* Private */,
|
||||||
9, 0, 126, 2, 0x08 /* Private */,
|
9, 0, 131, 2, 0x08 /* Private */,
|
||||||
10, 0, 127, 2, 0x08 /* Private */,
|
10, 0, 132, 2, 0x08 /* Private */,
|
||||||
11, 1, 128, 2, 0x08 /* Private */,
|
11, 1, 133, 2, 0x08 /* Private */,
|
||||||
13, 1, 131, 2, 0x08 /* Private */,
|
13, 1, 136, 2, 0x08 /* Private */,
|
||||||
14, 1, 134, 2, 0x08 /* Private */,
|
14, 1, 139, 2, 0x08 /* Private */,
|
||||||
15, 1, 137, 2, 0x08 /* Private */,
|
15, 1, 142, 2, 0x08 /* Private */,
|
||||||
16, 1, 140, 2, 0x08 /* Private */,
|
16, 1, 145, 2, 0x08 /* Private */,
|
||||||
18, 0, 143, 2, 0x08 /* Private */,
|
18, 0, 148, 2, 0x08 /* Private */,
|
||||||
19, 0, 144, 2, 0x08 /* Private */,
|
19, 0, 149, 2, 0x08 /* Private */,
|
||||||
20, 1, 145, 2, 0x08 /* Private */,
|
20, 1, 150, 2, 0x08 /* Private */,
|
||||||
21, 1, 148, 2, 0x08 /* Private */,
|
21, 1, 153, 2, 0x08 /* Private */,
|
||||||
22, 0, 151, 2, 0x08 /* Private */,
|
22, 0, 156, 2, 0x08 /* Private */,
|
||||||
23, 0, 152, 2, 0x08 /* Private */,
|
23, 0, 157, 2, 0x08 /* Private */,
|
||||||
24, 0, 153, 2, 0x08 /* Private */,
|
24, 0, 158, 2, 0x08 /* Private */,
|
||||||
|
25, 0, 159, 2, 0x08 /* Private */,
|
||||||
|
|
||||||
// slots: parameters
|
// slots: parameters
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
|
@ -134,6 +137,7 @@ static const uint qt_meta_data_MainWindow[] = {
|
||||||
QMetaType::Void, QMetaType::Int, 17,
|
QMetaType::Void, QMetaType::Int, 17,
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
|
QMetaType::Void,
|
||||||
QMetaType::Void,
|
QMetaType::Void,
|
||||||
|
|
||||||
0 // eod
|
0 // eod
|
||||||
|
@ -166,6 +170,7 @@ void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
|
||||||
case 18: _t->on_pushButton_12_clicked(); break;
|
case 18: _t->on_pushButton_12_clicked(); break;
|
||||||
case 19: _t->on_pushButton_13_clicked(); break;
|
case 19: _t->on_pushButton_13_clicked(); break;
|
||||||
case 20: _t->on_pushButton_14_clicked(); break;
|
case 20: _t->on_pushButton_14_clicked(); break;
|
||||||
|
case 21: _t->on_pushButton_15_clicked(); break;
|
||||||
default: ;
|
default: ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -196,13 +201,13 @@ int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||||
if (_id < 0)
|
if (_id < 0)
|
||||||
return _id;
|
return _id;
|
||||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||||
if (_id < 21)
|
if (_id < 22)
|
||||||
qt_static_metacall(this, _c, _id, _a);
|
qt_static_metacall(this, _c, _id, _a);
|
||||||
_id -= 21;
|
_id -= 22;
|
||||||
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||||
if (_id < 21)
|
if (_id < 22)
|
||||||
*reinterpret_cast<int*>(_a[0]) = -1;
|
*reinterpret_cast<int*>(_a[0]) = -1;
|
||||||
_id -= 21;
|
_id -= 22;
|
||||||
}
|
}
|
||||||
return _id;
|
return _id;
|
||||||
}
|
}
|
|
@ -65,6 +65,7 @@ public:
|
||||||
QComboBox *comboBox_3;
|
QComboBox *comboBox_3;
|
||||||
QVBoxLayout *verticalLayout_8;
|
QVBoxLayout *verticalLayout_8;
|
||||||
QPushButton *pushButton_5;
|
QPushButton *pushButton_5;
|
||||||
|
QPushButton *pushButton_15;
|
||||||
QPushButton *pushButton_14;
|
QPushButton *pushButton_14;
|
||||||
QHBoxLayout *horizontalLayout_7;
|
QHBoxLayout *horizontalLayout_7;
|
||||||
QVBoxLayout *verticalLayout_3;
|
QVBoxLayout *verticalLayout_3;
|
||||||
|
@ -270,6 +271,11 @@ public:
|
||||||
|
|
||||||
verticalLayout_8->addWidget(pushButton_5);
|
verticalLayout_8->addWidget(pushButton_5);
|
||||||
|
|
||||||
|
pushButton_15 = new QPushButton(centralWidget);
|
||||||
|
pushButton_15->setObjectName(QStringLiteral("pushButton_15"));
|
||||||
|
|
||||||
|
verticalLayout_8->addWidget(pushButton_15);
|
||||||
|
|
||||||
pushButton_14 = new QPushButton(centralWidget);
|
pushButton_14 = new QPushButton(centralWidget);
|
||||||
pushButton_14->setObjectName(QStringLiteral("pushButton_14"));
|
pushButton_14->setObjectName(QStringLiteral("pushButton_14"));
|
||||||
|
|
||||||
|
@ -442,6 +448,7 @@ public:
|
||||||
comboBox_3->setItemText(2, QApplication::translate("MainWindow", "Both", nullptr));
|
comboBox_3->setItemText(2, QApplication::translate("MainWindow", "Both", nullptr));
|
||||||
|
|
||||||
pushButton_5->setText(QApplication::translate("MainWindow", "Get Scope Data (1s)", nullptr));
|
pushButton_5->setText(QApplication::translate("MainWindow", "Get Scope Data (1s)", nullptr));
|
||||||
|
pushButton_15->setText(QApplication::translate("MainWindow", "Get Digital (1s)", nullptr));
|
||||||
pushButton_14->setText(QApplication::translate("MainWindow", "Get Scope Data (SinceLast)", nullptr));
|
pushButton_14->setText(QApplication::translate("MainWindow", "Get Scope Data (SinceLast)", nullptr));
|
||||||
label_4->setText(QApplication::translate("MainWindow", "Frequency (Hz)", nullptr));
|
label_4->setText(QApplication::translate("MainWindow", "Frequency (Hz)", nullptr));
|
||||||
label_6->setText(QApplication::translate("MainWindow", "Amplitude (V)", nullptr));
|
label_6->setText(QApplication::translate("MainWindow", "Amplitude (V)", nullptr));
|
|
@ -80,6 +80,27 @@ std::vector<double> * librador_get_analog_data(int channel, double timeWindow_se
|
||||||
return internal_librador_object->usb_driver->getMany_double(channel, numToGet, interval_samples, delay_samples, filter_mode);
|
return internal_librador_object->usb_driver->getMany_double(channel, numToGet, interval_samples, delay_samples, filter_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<uint8_t> * librador_get_digital_data(int channel, double timeWindow_seconds, double sample_rate_hz, double delay_seconds){
|
||||||
|
VECTOR_API_INIT_CHECK
|
||||||
|
VECTOR_USB_INIT_CHECK
|
||||||
|
|
||||||
|
double subsamples_per_second = internal_librador_object->usb_driver->get_samples_per_second() * 8;
|
||||||
|
|
||||||
|
if(subsamples_per_second == 0){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int interval_subsamples = round(subsamples_per_second / sample_rate_hz);
|
||||||
|
int delay_subsamples = round(delay_seconds * subsamples_per_second);
|
||||||
|
int numToGet = round(timeWindow_seconds * subsamples_per_second)/interval_subsamples;
|
||||||
|
|
||||||
|
printf("interval_subsamples = %d\ndelay_subsamples = %d\nnumToGet=%d\n", interval_subsamples, delay_subsamples, numToGet);
|
||||||
|
|
||||||
|
return internal_librador_object->usb_driver->getMany_singleBit(channel, numToGet, interval_subsamples, delay_subsamples);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<double> * librador_get_analog_data_sincelast(int channel, double timeWindow_max_seconds, double sample_rate_hz, double delay_seconds, int filter_mode){
|
std::vector<double> * librador_get_analog_data_sincelast(int channel, double timeWindow_max_seconds, double sample_rate_hz, double delay_seconds, int filter_mode){
|
||||||
|
|
||||||
VECTOR_API_INIT_CHECK
|
VECTOR_API_INIT_CHECK
|
|
@ -39,6 +39,9 @@ uint8_t LIBRADORSHARED_EXPORT librador_get_device_firmware_variant();
|
||||||
|
|
||||||
std::vector<double> * LIBRADORSHARED_EXPORT librador_get_analog_data(int channel, double timeWindow_seconds, double sample_rate_hz, double delay_seconds, int filter_mode);
|
std::vector<double> * LIBRADORSHARED_EXPORT librador_get_analog_data(int channel, double timeWindow_seconds, double sample_rate_hz, double delay_seconds, int filter_mode);
|
||||||
std::vector<double> * LIBRADORSHARED_EXPORT librador_get_analog_data_sincelast(int channel, double timeWindow_max_seconds, double sample_rate_hz, double delay_seconds, int filter_mode);
|
std::vector<double> * LIBRADORSHARED_EXPORT librador_get_analog_data_sincelast(int channel, double timeWindow_max_seconds, double sample_rate_hz, double delay_seconds, int filter_mode);
|
||||||
|
std::vector<uint8_t> * librador_get_digital_data(int channel, double timeWindow_seconds, double sample_rate_hz, double delay_seconds);
|
||||||
|
|
||||||
|
//TODO: flashFirmware();
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
|
@ -7,7 +7,7 @@
|
||||||
#define LABRADOR_PID 0xba94
|
#define LABRADOR_PID 0xba94
|
||||||
|
|
||||||
#define CHECK_API_INITIALISED if(internal_librador_object == NULL) return -420;
|
#define CHECK_API_INITIALISED if(internal_librador_object == NULL) return -420;
|
||||||
#define CHECK_USB_INITIALISED if(!internal_librador_object->usb_driver->connected) return -420420;
|
#define CHECK_USB_INITIALISED if(!internal_librador_object->usb_driver->connected) return -421;
|
||||||
|
|
||||||
#define VECTOR_API_INIT_CHECK if(internal_librador_object == NULL) return NULL;
|
#define VECTOR_API_INIT_CHECK if(internal_librador_object == NULL) return NULL;
|
||||||
#define VECTOR_USB_INIT_CHECK if(!internal_librador_object->usb_driver->connected) return NULL;
|
#define VECTOR_USB_INIT_CHECK if(!internal_librador_object->usb_driver->connected) return NULL;
|
|
@ -1,6 +1,7 @@
|
||||||
#include "o1buffer.h"
|
#include "o1buffer.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
//o1buffer is an object that has o(1) access times for its elements.
|
//o1buffer is an object that has o(1) access times for its elements.
|
||||||
|
@ -15,6 +16,17 @@ o1buffer::~o1buffer(){
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int o1buffer::reset(bool hard){
|
||||||
|
mostRecentAddress = 0;
|
||||||
|
stream_index_at_last_call = 0;
|
||||||
|
if(hard){
|
||||||
|
for (int i=0; i<NUM_SAMPLES_PER_CHANNEL; i++){
|
||||||
|
buffer[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void o1buffer::add(int value, int address){
|
void o1buffer::add(int value, int address){
|
||||||
//Ensure that the address is not too high.
|
//Ensure that the address is not too high.
|
||||||
|
@ -106,6 +118,31 @@ std::vector<double> *o1buffer::getMany_double(int numToGet, int interval_samples
|
||||||
return &convertedStream_double;
|
return &convertedStream_double;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Reads each int as 8 bools. Upper 3 bytes are ignored.
|
||||||
|
std::vector<uint8_t> *o1buffer::getMany_singleBit(int numToGet, int interval_subsamples, int delay_subsamples){
|
||||||
|
//Resize the vector
|
||||||
|
convertedStream_digital.resize(numToGet);
|
||||||
|
|
||||||
|
//Copy raw samples out.
|
||||||
|
int tempAddress;
|
||||||
|
int subsample_current_delay;
|
||||||
|
uint8_t mask;
|
||||||
|
uint8_t *data = convertedStream_digital.data();
|
||||||
|
int tempInt;
|
||||||
|
|
||||||
|
for(int i=0;i<numToGet;i++){
|
||||||
|
subsample_current_delay = delay_subsamples + (interval_subsamples * i);
|
||||||
|
tempAddress = mostRecentAddress - subsample_current_delay / 8;
|
||||||
|
mask = 0x01 << (subsample_current_delay % 8);
|
||||||
|
if(tempAddress < 0){
|
||||||
|
tempAddress += NUM_SAMPLES_PER_CHANNEL;
|
||||||
|
}
|
||||||
|
tempInt = get(tempAddress);
|
||||||
|
data[i] = (((uint8_t)tempInt) & mask) ? 1 : 0;
|
||||||
|
}
|
||||||
|
return &convertedStream_digital;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<double> *o1buffer::getSinceLast(int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode, double scope_gain, bool AC, bool twelve_bit_multimeter){
|
std::vector<double> *o1buffer::getSinceLast(int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode, double scope_gain, bool AC, bool twelve_bit_multimeter){
|
||||||
|
|
||||||
//Calculate what sample the feasible window begins at
|
//Calculate what sample the feasible window begins at
|
|
@ -2,6 +2,7 @@
|
||||||
#define O1BUFFER_H
|
#define O1BUFFER_H
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#define NUM_SAMPLES_PER_CHANNEL (375000 * 60) //1 minute of samples at 375ksps!
|
#define NUM_SAMPLES_PER_CHANNEL (375000 * 60) //1 minute of samples at 375ksps!
|
||||||
#define MULTIMETER_INVERT
|
#define MULTIMETER_INVERT
|
||||||
|
@ -11,6 +12,7 @@ class o1buffer
|
||||||
public:
|
public:
|
||||||
explicit o1buffer();
|
explicit o1buffer();
|
||||||
~o1buffer();
|
~o1buffer();
|
||||||
|
int reset(bool hard);
|
||||||
void add(int value, int address);
|
void add(int value, int address);
|
||||||
int addVector(int *firstElement, int numElements);
|
int addVector(int *firstElement, int numElements);
|
||||||
int addVector(char *firstElement, int numElements);
|
int addVector(char *firstElement, int numElements);
|
||||||
|
@ -21,6 +23,7 @@ public:
|
||||||
int stream_index_at_last_call = 0;
|
int stream_index_at_last_call = 0;
|
||||||
int distanceFromMostRecentAddress(int index);
|
int distanceFromMostRecentAddress(int index);
|
||||||
std::vector<double> *getMany_double(int numToGet, int interval_samples, int delay_sample, int filter_mode, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
std::vector<double> *getMany_double(int numToGet, int interval_samples, int delay_sample, int filter_mode, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
||||||
|
std::vector<uint8_t> *getMany_singleBit(int numToGet, int interval_subsamples, int delay_subsamples);
|
||||||
std::vector<double> *getSinceLast(int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
std::vector<double> *getSinceLast(int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
||||||
double vcc = 3.3;
|
double vcc = 3.3;
|
||||||
double frontendGain = (75.0/1075.0);
|
double frontendGain = (75.0/1075.0);
|
||||||
|
@ -28,6 +31,7 @@ public:
|
||||||
private:
|
private:
|
||||||
int *buffer;
|
int *buffer;
|
||||||
std::vector<double> convertedStream_double;
|
std::vector<double> convertedStream_double;
|
||||||
|
std::vector<uint8_t> convertedStream_digital;
|
||||||
void updateMostRecentAddress(int newAddress);
|
void updateMostRecentAddress(int newAddress);
|
||||||
double get_filtered_sample(int index, int filter_type, int filter_size, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
double get_filtered_sample(int index, int filter_type, int filter_size, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
||||||
double sampleConvert(int sample, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
double sampleConvert(int sample, double scope_gain, bool AC, bool twelve_bit_multimeter);
|
|
@ -318,14 +318,32 @@ buffer_read_write_mutex.lock();
|
||||||
case 7:
|
case 7:
|
||||||
if(channel == 1) temp_to_return = internal_o1_buffer_375_CH1->getMany_double(numToGet, interval_samples, delay_sample, filter_mode, current_scope_gain, current_AC_setting, true);
|
if(channel == 1) temp_to_return = internal_o1_buffer_375_CH1->getMany_double(numToGet, interval_samples, delay_sample, filter_mode, current_scope_gain, current_AC_setting, true);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
buffer_read_write_mutex.unlock();
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
buffer_read_write_mutex.unlock();
|
buffer_read_write_mutex.unlock();
|
||||||
return temp_to_return;
|
return temp_to_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<uint8_t> * usbCallHandler::getMany_singleBit(int channel, int numToGet, int interval_subsamples, int delay_subsamples){
|
||||||
|
std::vector<uint8_t>* temp_to_return = NULL;
|
||||||
|
|
||||||
|
buffer_read_write_mutex.lock();
|
||||||
|
switch(deviceMode){
|
||||||
|
case 1:
|
||||||
|
if(channel == 1) temp_to_return = internal_o1_buffer_375_CH2->getMany_singleBit(numToGet, interval_subsamples, delay_subsamples);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if(channel == 1) temp_to_return = internal_o1_buffer_375_CH1->getMany_singleBit(numToGet, interval_subsamples, delay_subsamples);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if(channel == 1) temp_to_return = internal_o1_buffer_375_CH1->getMany_singleBit(numToGet, interval_subsamples, delay_subsamples);
|
||||||
|
else if (channel == 2) temp_to_return = internal_o1_buffer_375_CH2->getMany_singleBit(numToGet, interval_subsamples, delay_subsamples);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
buffer_read_write_mutex.unlock();
|
||||||
|
return temp_to_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<double> *usbCallHandler::getMany_sincelast(int channel, int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode){
|
std::vector<double> *usbCallHandler::getMany_sincelast(int channel, int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode){
|
||||||
std::vector<double>* temp_to_return = NULL;
|
std::vector<double>* temp_to_return = NULL;
|
||||||
buffer_read_write_mutex.lock();
|
buffer_read_write_mutex.lock();
|
||||||
|
@ -346,9 +364,6 @@ std::vector<double> *usbCallHandler::getMany_sincelast(int channel, int feasible
|
||||||
case 7:
|
case 7:
|
||||||
if(channel == 1) temp_to_return = internal_o1_buffer_375_CH1->getSinceLast(feasible_window_begin, feasible_window_end, interval_samples, filter_mode, current_scope_gain, current_AC_setting, false);
|
if(channel == 1) temp_to_return = internal_o1_buffer_375_CH1->getSinceLast(feasible_window_begin, feasible_window_end, interval_samples, filter_mode, current_scope_gain, current_AC_setting, false);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
buffer_read_write_mutex.unlock();
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
buffer_read_write_mutex.unlock();
|
buffer_read_write_mutex.unlock();
|
||||||
return temp_to_return;
|
return temp_to_return;
|
||||||
|
@ -370,6 +385,11 @@ int usbCallHandler::set_device_mode(int mode){
|
||||||
|
|
||||||
send_function_gen_settings(1);
|
send_function_gen_settings(1);
|
||||||
send_function_gen_settings(2);
|
send_function_gen_settings(2);
|
||||||
|
|
||||||
|
internal_o1_buffer_375_CH1->reset(false);
|
||||||
|
internal_o1_buffer_375_CH2->reset(false);
|
||||||
|
internal_o1_buffer_750->reset(false);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -526,6 +546,10 @@ double usbCallHandler::get_samples_per_second(){
|
||||||
return (double)(375000.0);
|
return (double)(375000.0);
|
||||||
case 2:
|
case 2:
|
||||||
return (double)(375000.0);
|
return (double)(375000.0);
|
||||||
|
case 3:
|
||||||
|
return (double)(375000.0);
|
||||||
|
case 4:
|
||||||
|
return (double)(375000.0);
|
||||||
case 6:
|
case 6:
|
||||||
return (double)(750000.0);
|
return (double)(750000.0);
|
||||||
case 7:
|
case 7:
|
|
@ -66,6 +66,7 @@ public:
|
||||||
int send_device_reset();
|
int send_device_reset();
|
||||||
double get_samples_per_second();
|
double get_samples_per_second();
|
||||||
std::vector<double> *getMany_double(int channel, int numToGet, int interval_samples, int delay_sample, int filter_mode);
|
std::vector<double> *getMany_double(int channel, int numToGet, int interval_samples, int delay_sample, int filter_mode);
|
||||||
|
std::vector<uint8_t> * getMany_singleBit(int channel, int numToGet, int interval_subsamples, int delay_subsamples);
|
||||||
std::vector<double> *getMany_sincelast(int channel, int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode);
|
std::vector<double> *getMany_sincelast(int channel, int feasible_window_begin, int feasible_window_end, int interval_samples, int filter_mode);
|
||||||
bool connected;
|
bool connected;
|
||||||
//Control Commands
|
//Control Commands
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue