Почему QSerialPort в QT перестает собирать байты в буфер?

Вступление:

У меня проблема. перестает собирать байты в буфер, и когда я собираюсь его прочитать, там ничего нет.

На самом деле происходит следующее: когда я следую этим шагам, через определенное время все прекращается.

  1. Я подключаю к своему USB-устройству.
  2. Я впустил свою программу C++ читать данные.
  3. Через несколько секунд программа останавливается, потому что не осталось данных.
  4. Я отключаю USB и снова подключаю
  5. Теперь у меня есть данные, и я могу читать, но через несколько секунд данные заканчиваются, и больше ничего не происходит. Затем мне нужно повторить с шага 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 или настройки компьютера?

0 ответов

Другие вопросы по тегам