test_sdk/hw/ADCCluster/adccluster_device.h

73 lines
1.7 KiB
C
Raw Permalink Normal View History

#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