Почему QSerialPort в QT перестает собирать байты в буфер?
Вступление:
У меня проблема. перестает собирать байты в буфер, и когда я собираюсь его прочитать, там ничего нет.
На самом деле происходит следующее: когда я следую этим шагам, через определенное время все прекращается.
- Я подключаю к своему USB-устройству.
- Я впустил свою программу
C++
читать данные. - Через несколько секунд программа останавливается, потому что не осталось данных.
- Я отключаю USB и снова подключаю
- Теперь у меня есть данные, и я могу читать, но через несколько секунд данные заканчиваются, и больше ничего не происходит. Затем мне нужно повторить с шага
4.
опять таки.
У меня есть устройство, которое постоянно отправляет данные через USB на мой компьютер, на котором
QT
программа находится.
Как воспроизвести эту проблему
Сначала создайте метод для открытия
USB
порт.
bool USB_handling::connect_to_usb(const QString& port_name, const qint32 baudrate, QSerialPort::DataBits data_bits, QSerialPort::Parity parity, QSerialPort::StopBits stop_bits, QSerialPort::FlowControl flow_control){
serial_port->setPortName(port_name);
serial_port->setBaudRate(baudrate);
serial_port->setDataBits(data_bits);
serial_port->setParity(parity);
serial_port->setStopBits(stop_bits);
serial_port->setFlowControl(flow_control);
if(serial_port->open(QIODevice::ReadWrite)){
return true;
}else{
return false;
}
}
Затем другой метод, где
enums QSerialPort::
устанавливается как параметры в
switch-statement
void USB_tab::connect_to_usb(){
QString port_name = ui->usb_ports_comboBox->currentText();
qint32 baudrate = ui->usb_baudrate_comboBox->currentText().toUInt();
QSerialPort::DataBits data_bits = QSerialPort::Data8;
switch(ui->usb_data_bits_comboBox->currentIndex()){
case 0:
data_bits = QSerialPort::Data5;
break;
case 1:
data_bits = QSerialPort::Data6;
break;
case 2:
data_bits = QSerialPort::Data7;
break;
case 3:
data_bits = QSerialPort::Data8;
break;
}
QSerialPort::Parity parity = QSerialPort::NoParity;
switch(ui->usb_parity_comboBox->currentIndex()){
case 0:
parity = QSerialPort::NoParity;
break;
case 1:
parity = QSerialPort::EvenParity;
break;
case 2:
parity = QSerialPort::OddParity;
break;
case 3:
parity = QSerialPort::SpaceParity;
break;
case 4:
parity = QSerialPort::MarkParity;
break;
}
QSerialPort::StopBits stop_bits = QSerialPort::OneStop;
switch(ui->usb_stop_bits_comboBox->currentIndex()){
case 0:
stop_bits = QSerialPort::OneStop;
break;
case 1:
stop_bits = QSerialPort::OneAndHalfStop;
break;
case 2:
stop_bits = QSerialPort::TwoStop;
break;
}
QSerialPort::FlowControl flow_control = QSerialPort::NoFlowControl;
switch(ui->usb_flow_control_comboBox->currentIndex()){
case 0:
flow_control = QSerialPort::NoFlowControl;
break;
case 1:
flow_control = QSerialPort::HardwareControl;
break;
case 2:
flow_control = QSerialPort::SoftwareControl;
break;
}
if(usb_handling->connect_to_usb(port_name, baudrate, data_bits, parity, stop_bits, flow_control)){
Затем вы вызываете это с этой настройкой.
Затем вы читаете данные с помощью этого кода, где
serial_port
это объект из
QSerialPort
класс в
QT5
.
uint8_t receive_buf[10] = {0};
serial_port->read((char*)receive_buf, 10);
Вопрос:
Почему заканчиваются байты? Это связано с
Windows 10
или настройки компьютера?