#ifndef ADCCLUSTER_DEVICE_H #define ADCCLUSTER_DEVICE_H #include #include #include #include #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 * 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 _buffer_read; void send_data(); // HW API ADC * _singleADC; ADC * _masterADC; QList * _slavesADC; QMap * _adcs; QJsonObject * _config; ADCCluster_ns::clusterState _state; RRDStack * _rrdStack; bool _isMasterAllreadyInited; singleStack * _currentSingleStack; QQueue * _singleQueue; QQueue * _clusterQueue; bool _singleMode; bool _initError; }; #endif // ADCCLUSTER_DEVICE_H