//------------------------------------------------------------------------------ void SdoDialog::startRead() { eObdType obdType; int size = 0; tOplkError ret; enableFields(false); readFields(); obdType = pDataTypeBox->itemData(pDataTypeBox->currentIndex()).value<eObdType>(); switch (obdType) { case kObdTypeUInt8: case kObdTypeInt8: size = 1; break; case kObdTypeUInt16: case kObdTypeInt16: size = 2; break; case kObdTypeUInt32: case kObdTypeInt32: size = 4; break; case kObdTypeUInt64: case kObdTypeInt64: size = 8; break; case kObdTypeVString: case kObdTypeDomain: size = 4096*1024; break; } data.resize(size); ret = oplk_postUserEvent(readButton); if (ret != kErrorOk) { enableFields(true); } }
//------------------------------------------------------------------------------ void SdoDialog::startWrite() { eObdType obdType; int size = 0; tOplkError ret; this->enableFields(false); this->readFields(); obdType = this->pDataTypeBox->itemData(this->pDataTypeBox->currentIndex()).value<eObdType>(); switch (obdType) { case kObdTypeVString: this->data = this->pDataEdit->text().toLatin1(); break; case kObdTypeDomain: this->data = QByteArray::fromHex(this->pDataEdit->text().toLatin1()); break; default: QStringList list = this->pDataEdit->text().split(QRegExp("[^0-9a-fA-Fx]+"), QString::SkipEmptyParts); if (list.count() < 1) { QMessageBox::critical(this, "Data invalid", "The specified data field does not consist of one number. Please correct and try again."); this->enableFields(true); return; } bool fConvOk = false; quint64 uval; qint64 val; switch (obdType) { case kObdTypeUInt8: case kObdTypeUInt16: case kObdTypeUInt32: case kObdTypeUInt64: uval = list[0].toULongLong(&fConvOk, 0); if (!fConvOk) { QMessageBox::critical(this, "Data invalid", "The specified data format is not an unsigned integer. Please correct and try again."); this->enableFields(true); return; } this->data.resize(8); qToLittleEndian<quint64>(uval, (uchar*)this->data.data()); break; case kObdTypeInt8: case kObdTypeInt16: case kObdTypeInt32: case kObdTypeInt64: val = list[0].toLongLong(&fConvOk, 0); if (!fConvOk) { QMessageBox::critical(this, "Data invalid", "The specified data format is not a signed integer. Please correct and try again."); this->enableFields(true); return; } this->data.resize(8); qToLittleEndian<qint64>(val, (uchar*)this->data.data()); break; } switch (obdType) { case kObdTypeUInt8: case kObdTypeInt8: size = 1; break; case kObdTypeUInt16: case kObdTypeInt16: size = 2; break; case kObdTypeUInt32: case kObdTypeInt32: size = 4; break; case kObdTypeUInt64: case kObdTypeInt64: size = 8; break; } this->data.resize(size); } ret = oplk_postUserEvent(this->writeButton); if (ret != kErrorOk) this->enableFields(true); }