c++ - Serial Hexa 对话框(C++/Qt 5.0 的 python 代码)

标签 c++ qt qt5 qextserialport qtserialport

我需要在 RS232 端口(串行)上使用指纹进行对话。我有一个非常有用的 python 代码:

import serial
import time

ser = serial.Serial('/dev/ttyUSB0', 9600, parity='N', timeout=2)
print ser
ser.open()

ser.write(chr(0x00)) # channel 1 byte (alway the same)
ser.write(chr(0x05)) # command 1 byte

ser.write(chr(0x00)) # param1 2 bytes (byte low)
ser.write(chr(0x00)) # param1 2 bytes (byte hight)

ser.write(chr(0x00)) # param2 2 bytes (byte low)
ser.write(chr(0x00)) # param2 2 bytes (byte hight)

ser.write(chr(0x00)) # lwExtraData 2 bytes (byte low)
ser.write(chr(0x00)) # lwExtraData 2 bytes (byte hight)

ser.write(chr(0x00)) # hwExtraData 2 bytes (byte low)
ser.write(chr(0x00)) # hwExtraData 2 bytes (byte hight)

ser.write(chr(0x00)) # ErrorCode 1 byte

sum = 0x05 % 256

ser.write(chr(sum)) # Checksum (modulo 256) 1 byte

print "\nRespuesta Secugen :\n"

cadena = ser.read(12)

for i in range(12):
    print(hex(ord(cadena[i]))),


ser.close()

但我需要为 C++/Qt 转换此代码。我不明白我需要使用什么功能。

我试过这个:

serial = new QextSerialPort(serialPort);

    serial->setBaudRate(BAUD9600);
    serial->setFlowControl(FLOW_OFF);
    serial->setParity(PAR_NONE);
    serial->setDataBits(DATA_8);
    serial->setStopBits(STOP_1);
    serial->setTimeout(2);

res = serial->open(QIODevice::ReadWrite);

    if(res)
    {

        QByteArray zero = QByteArray::fromHex("\x00");

       serial->write(zero);

        [...]

      qDebug() << "byte a lire : " << serial->bytesAvailable();
      QByteArray test = serial->readAll();
    }

如果可能,我想使用 QextSerialPort 扩展。我努力了 但没有成功。我想我不明白我需要做什么转换。

-- 编辑--

我的问题不是关于管理串行端口的类,抱歉我的问题不是很清楚。我不知道重现与 python 代码相同的代码的解决方案是什么:将一个字符发送到 RS232 中的 hexa。

最佳答案

QextSerialPort 很久以前就没有更新了。 我用 QSerialPort .

Serial.h

class Serial : public QSerialPort{
void openPort(const QString &, const int &, const DataBits &, const  Parity &, const StopBits &, const FlowControl &);

}

Serial.cpp

void Serial::openPort(const QString &serialPort, const int &baudRate, const DataBits &dataBits, const Parity &parity, const StopBits &stopBits, const FlowControl &flowControl) {

            this->serialPort = serialPort;
            this->baudRate = baudRate;
            this->dataBits = dataBits;
            this->parity = parity;
            this->stopBits = stopBits;
            this->flowControl = flowControl;

            this->setPortName(this->serialPort);

            if (this->open(QIODevice::ReadWrite)) {
            } else {
                qDebug() << "\n Can't open port | " << this->errorString();
            }

             if (
                    this->setBaudRate(this->baudRate)
                    && this->setDataBits(this->dataBits)
                    && this->setParity(this->parity)
                    && this->setStopBits(this->stopBits)
                    && this->setFlowControl(this->flowControl)) {
                qDebug() << "\n[ info ]        Port settings successfully";
            } else {
                qDebug() << "\n[ error ]        Port settings failed";
            }
}

您可以在其他类中使用类 Serial:

Serial *serialPort = new Serial();

 if (serialPort->write(data)) {
                qDebug() << "\n[ info ]        data: " << data.toHex() << "         | wrote";
            } else {
                qDebug() << "\n[ error ]        error write data";
            };

关于c++ - Serial Hexa 对话框(C++/Qt 5.0 的 python 代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472278/

相关文章:

c++ - 对类型安全的好处感到困惑

c++ - 如何在英特尔 C++ 编译器上将 __FILE__ 作为绝对路径

c++ - 有序 QVector 中的二进制搜索

python - PyQt:获取当前的QTreeWidget项

java - 如何使用 JNI 在 C++ 中创建 Java 对象?

c++ - 无法链接到qt中的boost文件系统

c++ - 是否 libc+ +'s implementation of ` std::make_heap` 不一致

c++ - Qt5上的静态库 : Undefined symbols for architecture x86_64:

c++ - 为支持 OpenSSL 的 Windows Phone 8.1 编译 Qt 5.5 的问题

c++ - 删除 QNetworkReply 的最佳方法是什么?