Russian Qt Forum
Ноябрь 20, 2019, 08:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]QSerialPort сигнал errorOccurred  (Прочитано 3723 раз)
Larry
Программист
*****
Offline Offline

Сообщений: 560



Просмотр профиля
« : Июнь 17, 2017, 09:12 »

Добрый день, Форумчане.
Возник вопрос по поводу сигнала errorOccurred. Никак не получается его перехватить - интересует ошибка ParityError.
Есть устройство которое шлет 9 бит (знаю, что эта тема уже подымалась и 9 бит это нехорошо, но поставлен перед фактом Смеющийся) и с помощью MarkParity и SpaceParity я отсылаю нужный мне 9ый бит на устройство и все хорошо, но чтобы принять 9ый бит нужно обрабатывать эту ошибку, но этот сигнал никак не испускается и неважно что я задаю в setParity - Mark или Space.
Подскажите пожалуйста...Спасибо.

Код:
m_serial_port->setPortName(ui->cboxComPortList->currentText());
m_serial_port->setBaudRate(ui->cboxBaudrate->currentText().toInt());

if(!m_serial_port->open(QSerialPort::ReadOnly | QSerialPort::WriteOnly))
{
       QMessageBox::critical(this, tr("Error"), tr("Can't open serial port"));

       return;
}

m_serial_port->setDataBits(QSerialPort::Data8);
m_serial_port->setStopBits(QSerialPort::OneStop);
m_serial_port->setFlowControl(QSerialPort::NoFlowControl);
m_serial_port->setParity(QSerialPort::MarkParity);

connect(m_serial_port, SIGNAL(errorOccurred(QSerialPort::SerialPortError)), this, SLOT(error(QSerialPort::SerialPortError)));

Слот error(QSerialPort::SerialPortError) просто выводит номер ошибки, но в него не попадает...
« Последнее редактирование: Июнь 21, 2017, 07:40 от Larry » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2709


Просмотр профиля
« Ответ #1 : Июнь 17, 2017, 10:38 »

Никогда это не работало должным образом (да и невозможно реализовать, например, под Windows), в будущем будет удалено:
Цитировать
This value is obsolete. We strongly advise against using it in new code.

Если же работа идет в Linux - то там можно попробовать через QSP::handle() установить в termios
специальные настройки для байт-стаффинга, где сбойный байт будет обрамляться некими маркерами.

Тем самым, парся входной стрим, можно обнаружить эти байты и определить что за ошибка была
(паритета или кадра, вроде бы).

Соответствующие куски кода, еще есть в старых версиях QSP, но сейчас они выброшены за ненадобностью.
Записан

ArchLinux x86_64 / Win10 64 bit
Larry
Программист
*****
Offline Offline

Сообщений: 560



Просмотр профиля
« Ответ #2 : Июнь 17, 2017, 11:52 »

Спасибо. Жаль, что не работает...и работа идет в винде...посмотрю в сторону библиотеки ftd2xx для ftdi, может там что нарою. Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.