#ifndef HW_DEVICE_H #define HW_DEVICE_H #include #include #include "hw_global.h" #include "core/gtl_device.h" #include "gtl_analog_input.h" #include "core/gtl_analog_data.h" namespace gtl { namespace hw { class HW_EXPORT device : public QThread { Q_OBJECT public: enum ADCState { IDLE, INIT_IN_PROGRESS, OK, INIT_FAILED, FAILED, DRIVER_NOT_FOUND }; public: device(QObject *parent); ~device(); // virtual bool restart(){ return true; } virtual qreal rate() const; int count_ai() const { return _count_ai; } bool is_created() { return _is_created_success; } QString id() const; analog_input *ai(int idx); gtl::device* gtl_device() const; virtual void set_config(const QJsonValue& config); const QJsonValue& config() const; ADCState state() const; protected: void clear_ai(); void set_ai(); void set_ai_data(qreal *data, int size); virtual analog_input* create_ai(int idx); protected: gtl::device* _device; bool _is_created_success; QString _id; qreal _rate; int _count_ai; bool _is_continue; QJsonValue _config; ADCState _state; QUuid _uuid; public slots: virtual bool start(QString id, qreal rate) = 0; virtual bool stop(); virtual void restart(); virtual void get_parameter(int idx, QVariant &value); virtual void set_parameter(int idx, const QVariant &value); virtual QString type() const = 0; protected slots: virtual void ai_iepe_changed(){}; virtual void ai_coupling_changed(){}; virtual void save(QDomElement& root_element); virtual void load(const QDomElement& root_element); signals : void received_data(); void error(QString title, QString message); void channels_changed(); void remove_channel(int idx); void rate_changed(); void begin_reset(); void end_reset(); void set_channels_sensitivity(qreal); void name_changed(); void status_changed(int); void config_changed(); }; } } #endif // HW_DEVICE_H