我需要在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 :) –