我需要在RS232端口(串行)上与指纹对话。我有一个Python代码,就像一个魅力:串行十六进制对话框(Python代码到C++/Qt 5.0)
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。
什么是RS323?另外,不要使用QextSerialPort。它正在获得更新,但速度很慢,而且只有很小的一部分。我会建议使用我们写的qtserialport。 – lpapp
感谢您的帮助,但我的问题更多地是在hexa和字符之间进行转换,以便在python脚本中重现对话框。 –
错误:它不是RS323,但RS232 :) –