/*! Writes \a newData to the Modbus server map. Returns \c true on success, or \c false if the \a newData range is outside of the map range or the registerType() does not exist. \note Sub-classes that implement writing to a different backing store then default one, also need to implement setMap() and readData(). The dataWritten() signal needs to be emitted from within the functions implementation as well. \sa setMap(), readData(), dataWritten() */ bool QModbusServer::writeData(const QModbusDataUnit &newData) { Q_D(QModbusServer); if (!d->m_modbusDataUnitMap.contains(newData.registerType())) return false; QModbusDataUnit ¤t = d->m_modbusDataUnitMap[newData.registerType()]; if (!current.isValid()) return false; // check range start is within internal map range int internalRangeEndAddress = current.startAddress() + current.valueCount() - 1; if (newData.startAddress() < current.startAddress() || newData.startAddress() > internalRangeEndAddress) { return false; } // check range end is within internal map range int rangeEndAddress = newData.startAddress() + newData.valueCount() - 1; if (rangeEndAddress < current.startAddress() || rangeEndAddress > internalRangeEndAddress) return false; bool changeRequired = false; for (int i = newData.startAddress(); i <= rangeEndAddress; i++) { quint16 newValue = newData.value(i - newData.startAddress()); changeRequired |= (current.value(i) != newValue); current.setValue(i, newValue); } if (changeRequired) emit dataWritten(newData.registerType(), newData.startAddress(), newData.valueCount()); return true; }
void Polyplexer::sendData(QString data) { if ( this->isConnected() ) { //cerr<<"PolySend:"<<data.toStdString()<<endl; data+="\n"; _connector->write( data.toStdString().c_str() ); emit dataWritten(data); } }
MainWindow::MainWindow() : KXmlGuiWindow(), m_closing( false ) { m_view = new PolkaView( this ); setCentralWidget( m_view ); setupActions(); setupGUI(); statusBar()->hide(); menuBar()->hide(); connect( m_view, SIGNAL( dataWritten() ), SLOT( slotDataWritten() ) ); }
HexySerial::HexySerial(QObject *parent) : QObject(parent) , settings(nullptr) , lastPos{0} , dirtyMoveFlags(0xFFFFFFFF) { serial = new QSerialPort(this); settings = new SerialSettingsWidget; if(!connect(serial, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)), OC_CONTYPE)) { qWarning()<<"ERROR: Could not connect"; } if(!connect(serial, SIGNAL(readyRead()), this, SLOT(readData()), OC_CONTYPE)) { qWarning()<<"ERROR: Could not connect"; } if(!connect(serial, SIGNAL(bytesWritten(qint64)), this, SLOT(dataWritten(qint64)), OC_CONTYPE)) { qWarning()<<"ERROR: Could not connect"; } if(!connect(settings,SIGNAL(settingsChanged()), this, SLOT(onSettingsChanged()), OC_CONTYPE)) { qWarning()<<"ERROR: Could not connect"; } }
PolkaView::PolkaView(QWidget *parent) : QWidget( parent ) { m_model = new PolkaModel( this ); connect( m_model, SIGNAL( dataWritten() ), SIGNAL( dataWritten() ) ); QBoxLayout *topLayout = new QVBoxLayout( this ); QBoxLayout *buttonLayout = new QHBoxLayout; topLayout->addLayout( buttonLayout ); // FIXME: Use proper icon m_backButton = new QPushButton( "<" ); buttonLayout->addWidget( m_backButton ); connect( m_backButton, SIGNAL( clicked() ), SLOT( goBack() ) ); m_backButton->setEnabled( false ); buttonLayout->addStretch( 1 ); m_groupNameLabel = new QLabel; buttonLayout->addWidget( m_groupNameLabel ); buttonLayout->addStretch( 1 ); m_searchEdit = new SearchEdit; buttonLayout->addWidget( m_searchEdit ); connect( m_searchEdit, SIGNAL( search( const QString & ) ), SLOT( showSearch( const QString & ) ) ); connect( m_searchEdit, SIGNAL( stopSearch() ), SLOT( stopSearch() ) ); QPushButton *button = new QPushButton( i18n("...") ); buttonLayout->addWidget( button ); connect( button, SIGNAL( clicked() ), SLOT( showOverview() ) ); button->setFocus(); QBoxLayout *viewLayout = new QHBoxLayout; topLayout->addLayout( viewLayout ); m_groupWidget = new QWidget; viewLayout->addWidget( m_groupWidget ); m_listLayout = new QStackedLayout( m_groupWidget ); m_overview = new Overview; m_listLayout->addWidget( m_overview ); connect( m_overview, SIGNAL( showGroupView() ), SLOT( showGroupView() ) ); connect( m_overview, SIGNAL( showListView() ), SLOT( showListView() ) ); connect( m_overview, SIGNAL( showHistory() ), SLOT( showHistory() ) ); m_groupListView = new GroupListView( m_model ); m_listLayout->addWidget( m_groupListView ); connectGroupView( m_groupListView ); m_groupGraphicsView = new GroupGraphicsView( m_model ); m_listLayout->addWidget( m_groupGraphicsView ); connectGroupView( m_groupGraphicsView ); connect( m_groupGraphicsView, SIGNAL( newGroup() ), SLOT( newSubGroup() ) ); connect( m_groupGraphicsView, SIGNAL( removeIdentity( const Polka::Identity &, const Polka::Identity & ) ), SLOT( removeIdentity( const Polka::Identity &, const Polka::Identity & ) ) ); connect( m_groupGraphicsView, SIGNAL( cloneGroup( const Polka::Identity & ) ), SLOT( cloneGroup( const Polka::Identity & ) ) ); connect( m_groupGraphicsView, SIGNAL( removeGroup( const Polka::Identity & ) ), SLOT( removeGroup( const Polka::Identity & ) ) ); connect( m_groupGraphicsView, SIGNAL( morphedToCompact() ), SLOT( finishShowPerson() ) ); connect( m_groupGraphicsView, SIGNAL( closeRequested() ), SLOT( closePersonView() ) ); m_personView = new PersonView( m_model ); viewLayout->addWidget( m_personView ); connect( m_personView, SIGNAL( closeRequested() ), SLOT( closePersonView() ) ); m_historyView = new HistoryView( m_model ); m_listLayout->addWidget( m_historyView ); m_searchResultView = new SearchResultView( m_model ); m_listLayout->addWidget( m_searchResultView ); m_settingsWidget = new SettingsWidget( m_model ); topLayout->addWidget( m_settingsWidget ); connect( m_settingsWidget, SIGNAL( showView() ), SLOT( showView() ) ); m_settingsWidget->hide(); readConfig(); readData(); }
void Connection::finish() { mDone = true; dataWritten(mClient, 0); }