#include "gtl_hw_device.h" namespace gtl { namespace hw { device::device(QObject *parent) : QThread(parent) // , _default_iepe(false) , _is_created_success(true) , _rate(0) , _state(IDLE) { _uuid = QUuid::createUuid(); _device = new gtl::device(NULL); connect(_device, >l::device::get_type, this, &device::type); connect(_device, >l::device::start, this, &device::start); connect(_device, >l::device::stop, this, &device::stop); connect(_device, >l::device::restart, this, &device::restart); connect(_device, >l::device::save_device, this, &device::save); connect(_device, >l::device::load_device, this, &device::load); connect(this, &device::received_data, _device, >l::device::recieved_data); connect(_device, >l::device::get_device_parameter, this, &device::get_parameter); connect(_device, >l::device::set_device_parameter, this, &device::set_parameter); connect(this, &QThread::started, _device, >l::device::started); connect(this, &QThread::finished, _device, >l::device::stopped); } device::~device() { stop(); delete _device; } qreal device::rate() const { return _rate; } QString device::id() const { return _id; } analog_input *device::ai(int idx) { gtl::analog_data* input = _device->ai(idx); if(input == NULL) return NULL; return static_cast(input); } gtl::device *device::gtl_device() const { return _device; } void device::set_config(const QJsonValue &config) { _config = config; emit config_changed(); } const QJsonValue &device::config() const { return _config; } device::ADCState device::state() const { return _state; } void device::get_parameter(int idx, QVariant &value) { } void device::set_parameter(int /*idx*/, const QVariant &/*value*/) { } void device::clear_ai() { _device->clear(); } void device::set_ai() { if(count_ai() != _device->count_ai()) { clear_ai(); for(int i = 0; i < count_ai(); i++) { analog_input* ai_ = create_ai(i); // ai_->set_iepe(_default_iepe); connect(ai_, &analog_input::iepe_changed, this, &device::ai_iepe_changed); connect(ai_, &analog_input::coupling_changed, this, &device::ai_coupling_changed); _device->add_ai(ai_); } } for(int i = 0; i < _device->count_ai(); i++) _device->ai(i)->set_rate(_rate); } void device::set_ai_data(qreal *data, int size) { _device->lock_ai(); for(int i = 0; i < _device->count_ai(); i++) ai(i)->set_data(data, size, i, _device->count_ai()); _device->unlock_ai(); } analog_input *device::create_ai(int idx) { return new analog_input(_rate, tr("intput") + " " + QString::number(idx), _device); } bool device::stop() { if(_is_continue) { _is_continue = false; wait(); } return true; } void device::restart() { // if(!isRunning()) // return; stop(); start(_id, _rate); } void device::save(QDomElement &root_element) { root_element.setAttribute("type", type()); root_element.setAttribute("id", _id); root_element.setAttribute("rate", _rate); root_element.setAttribute("is_running", isRunning()); root_element.setAttribute("count_ai", _count_ai); root_element.setAttribute("uuid", _uuid.toString()); } void device::load(const QDomElement &root_element) { _count_ai = root_element.attribute("count_ai", QString::number(_count_ai)).toInt(); _uuid = QUuid::fromString(root_element.attribute("uuid", _uuid.toString())); } } }