73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
#ifndef ADCCLUSTER_DEVICE_H
|
|
#define ADCCLUSTER_DEVICE_H
|
|
|
|
#include <QTime>
|
|
#include <QQueue>
|
|
#include <QJsonObject>
|
|
#include <QJsonArray>
|
|
|
|
#include "singlestack.h"
|
|
#include "clusterstack.h"
|
|
#include "adc.h"
|
|
#include "hw/gtl_hw_device.h"
|
|
#include "rrdstack.h"
|
|
|
|
class ADCCluster_device : public gtl::hw::device
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit ADCCluster_device(QObject *parent = nullptr);
|
|
~ADCCluster_device();
|
|
|
|
// HW API
|
|
virtual void restart() override;
|
|
virtual bool start(QString id, qreal rate) override;
|
|
virtual bool stop() override;
|
|
virtual QString type() const override { return "ADCCluster"; }
|
|
virtual int channels() { return 1; }
|
|
virtual qreal max_amplitude() const { return 10; }
|
|
virtual void ai_iepe_changed() override;
|
|
virtual void ai_coupling_changed() override;
|
|
// HW API
|
|
|
|
signals:
|
|
void newADCCreated(ADC * newAdc);
|
|
|
|
private:
|
|
ADC * _initSingleADC(uint16_t sn);
|
|
ADC * _initMasterADC(QList<int> * adcSNs);
|
|
|
|
ADC * _initSlaveADC(uint16_t sn, int adcNo);
|
|
void _runSingleMode();
|
|
void _runClusterMode();
|
|
|
|
void _stopSlaves();
|
|
void _destroySlaves();
|
|
void _debugPrintADCParams(ADC * adc);
|
|
|
|
void _stateChanged(gtl::hw::device::ADCState state);
|
|
|
|
// HW API
|
|
void run() override;
|
|
std::vector<double> _buffer_read;
|
|
void send_data();
|
|
// HW API
|
|
|
|
ADC * _singleADC;
|
|
ADC * _masterADC;
|
|
QList<ADC *> * _slavesADC;
|
|
QMap<int, ADC *> * _adcs;
|
|
QJsonObject * _config;
|
|
ADCCluster_ns::clusterState _state;
|
|
RRDStack * _rrdStack;
|
|
bool _isMasterAllreadyInited;
|
|
|
|
singleStack * _currentSingleStack;
|
|
QQueue<singleStack *> * _singleQueue;
|
|
QQueue<clusterStack *> * _clusterQueue;
|
|
bool _singleMode;
|
|
bool _initError;
|
|
};
|
|
|
|
#endif // ADCCLUSTER_DEVICE_H
|