예제 #1
0
//------------------------------------------------------------------------------
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);
    }
}
예제 #2
0
//------------------------------------------------------------------------------
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);
}