我有一個類Serial
中,我可以通過成員函數Serial::openPort()
打開一個端口與私人QSerialPort serial_stream
:無法寫入使用打開QSerialPort socat
bool Serial::openPort(std::string port)
{
std::string realPort = "/dev/" + port;
if(isOpen()) {
return true;
}
serial_stream.setPortName(QString(realPort.c_str()));
bool loc = serial_stream.open(serial_stream.ReadWrite);
serial_stream.setFlowControl(serial_stream.HardwareControl);
serial_stream.setStopBits(serial_stream.OneStop);
serial_stream.setParity(serial_stream.NoParity);
serial_stream.setDataBits(serial_stream.Data8);
serial_stream.setBaudRate(defaultBaud);
open = loc;
return loc;
}
和方法發送:
bool Serial::send(unsigned char data[])
{
if(!isOpen()) {
return false;
}
int size = BUFFER_SIZE;
char loc[size];
for(int p = 0; p<size; p++) {
loc[p] = data[p];
}
int check = serial_stream.write(loc, size);
if(check != size) {
return false;
}
return true;
}
我打開一個virtual port via socat:
Terminal 1: socat -d -d pty,raw,echo=0 pty,raw,echo=0
Terminal 2: cat < /dev/pts/2
,則在測試功能,我做到以下幾點:
bool b = Serial::instance().openPort("pts/3");
cout << b << endl;//-> "true"
unsigned char data[8] = {'a','b','c','d','e','f','g','h'};
bool sent = Serial::instance().send(data);
所以,我想的是,我可以通過開放與QSerialPort
在Serial
類發送data
到pts/2
端口pts/3
。 b是true
因此QSerialPort
能夠打開該端口。但是,當我想送data
我得到以下信息:
QIODevice::write (QSerialPort): device not open
我認爲這個問題必須是與使用socat錯誤的,因爲我們媒體鏈接與RSR232電纜和另一臺計算機測試的代碼。
會感謝你的幫助。
編輯: 後從code_fodder第一(無)-answer我做了什麼,他告訴我這樣做,在我initTestCase()
添加一個循環:
void tst_serial::initTestCase() {
cout << "Testfälle gestartet" << endl;
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();
cout << "for: " << ports.count() << endl;//-> for: 0
for (int n=0; n > ports.count(); n++)
{
cout << ports[n].portName().toStdString() << ports[n].description().toStdString() << endl;
}
}
像我評論,可用端口的數量是0(預計這是不正確的做法)。但爲什麼Serial::instance().openPort("pts/3");
返回true?
就像我剛纔說的,它必須有一些待辦事項與socat ...
我加入它的問題,謝謝... – goulashsoup