Добрый день, Форумчане.
Возник вопрос по поводу сигнала 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)));
larry, но как-то тоже требовалось извращение с 9-битным словом сделать. В конце концов разработчик железяки внял разуму и сделал 8 бит, но зато я нашёл следующие рекомендации, как это можно сделать (с чудовищной потерей в скорости обмена, насколько я понимаю)
http://digital.ni.com/public.nsf/allkb/3BDC7FF03541F772862564990057F919
я сам сигналами для порта не пользуюсь, попробуй порядок обработки ошибки примерно такой:
//чтение очередного слова
port.clearError();
char c=0;
int read=port.readData(&c,sizeof(c))
if(read==sizeof(c))
{
auto err=port.error();
//тут смотрим err
}
Спасибо большое. Буду пробовать.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)