Solved QSerialPort open error code 10
-
Hi at all,
I'm back to work on a project that I started 2 month ago and now I have some problem during the communication throght serial com port.When I open it I always get the error 10. (QSerialPort::UnsupportedOperationError)
But this code on this project worked well.
I try to open the port by another program like "hercules" and I can open and communicate with the device without any problems...When I run my application I still get the error code 10 when I call
m_serial->open(QIODevice::ReadWrite)
This is the code:
m_portName = "COM11"; m_serial = new QSerialPort(); m_serial->setPortName(m_portName); m_serial->setBaudRate(QSerialPort::Baud115200); m_serial->setParity(QSerialPort::NoParity); m_serial->setStopBits(QSerialPort::OneStop); m_serial->setDataBits(QSerialPort::Data8); m_serial->setFlowControl(QSerialPort::NoFlowControl); if (!m_serial->open(QIODevice::ReadWrite)) { qDebug() << QString("Can't open %1, error code %2").arg(m_portName).arg(m_serial->error()) << m_serial->errorString(); emit signalError(tr("Can't open %1, error code %2").arg(m_portName).arg(m_serial->error())); return; }
Windows 10
Qt 5.14.2Do you have any suggestion?
Thank you so much. -
@addebito said in QSerialPort open error code 10:
qDebug() << QString("Can't open %1, error code %2").arg(m_portName).arg(m_serial->error()) << m_serial->errorString();
could you please show the actual output of this statement?
-
Yes of course @Pablo-J-Rogina
"Can't open COM11, error code 10" "Parametro non corretto."
"Parametro non corretto" it's written in Italian language.
Parameter isn't correct. -
@addebito said in QSerialPort open error code 10:
"Can't open COM11, error code 10"
Error 10 is
QSerialPort::UnsupportedOperationError
, are you sure the SerialPort is not already opened/used by another process? -
@addebito said in QSerialPort open error code 10:
UnsupportedOperationError
It is:
case ERROR_INVALID_PARAMETER: error.errorCode = QSerialPort::UnsupportedOperationError; break;
Maybe it is QSP bug, but also maybe, it is a bug in the serial-port HW firmware (if you use own USB/Serial implementation, and, e.g. it does not handle some USB class-specific callbacks). E.g. such as 'overlapped' operations, the RTS/CTS pins support and do on.
-
@KroMignon Yes of course, I've done some test and the result is the same.
With hercules, I open the port and I can communicate without any problem.
After that I close the port and close Hercules, run my QT program but doesn't open the port and give me the error 10. -
@addebito said in QSerialPort open error code 10:
After that I close the port and close Hercules, run my QT program but doesn't open the port and give me the error 10.
I don't know if it is relevant, but did you check if serial port is detected by Qt?
for(const auto &serialPortInfo : QSerialPortInfo::availablePorts()) { qDebug() << "find serial port: " << serialPortInfo.portName() << '"/" << serialPortInfo.description(); }
-
@KroMignon I've tried now.
find serial port: "COM5" / "Dispositivo seriale USB"
"Dispositivo seriale USB" means "USB serial device"
-
@addebito said in QSerialPort open error code 10:
find serial port: "COM5" / "Dispositivo seriale USB"
Maybe that is your problem: "COM5" != "COM11"
Is it the same serial port? -
@KroMignon I'm sorry, yes during the test I have also try to change the port number but the result is the same.
Now I'm using the same port configured as COM5.
The computer is my laptop and there is only this com port. -
@addebito said in QSerialPort open error code 10:
I'm sorry, yes during the test I have also try to change the port number but the result is the same.
Now I'm using the same port configured as COM5.I am sorry, but I am not sure to understand you.
Do you still have same error, even when using serial port detected withQSerialPortInfo::availablePorts()
? -
Yes @KroMignon, I've the same error and I dont know how to resolve...
find serial port: "COM5" / "Dispositivo seriale USB"
"Can't open COM5, error code 10" "Parametro non corretto."I can download the source of QSerialPort and try to debug when I open it.
It could help me to investigate the real problem? -
Try to remove the setFoo() calls before open to see if it helps. If so re-add them until the error occurs again.
-
Hi @Christian-Ehrlicher, what you means with setFoo() ?
Did you mean setFlowControl ?I've try to remove it before open the com port but I get the same result.
"Can't open COM5, error code 10" "Parametro non corretto."
-
@addebito said in QSerialPort open error code 10:
Did you mean setFlowControl ?
all setXXX() - functions
-
@Christian-Ehrlicher Nope, same error.
for (const auto &serialPortInfo : QSerialPortInfo::availablePorts()) { qDebug() << "find serial port: " << serialPortInfo.portName() << "/" << serialPortInfo.description(); } m_portName = "COM5"; m_serial = new QSerialPort(); m_serial->setPortName(m_portName); // m_serial->setBaudRate(QSerialPort::Baud115200); // m_serial->setParity(QSerialPort::NoParity); // m_serial->setStopBits(QSerialPort::OneStop); // m_serial->setDataBits(QSerialPort::Data8); // m_serial->setFlowControl(QSerialPort::NoFlowControl); if (!m_serial->open(QIODevice::ReadWrite)) { qDebug() << QString("Can't open %1, error code %2").arg(m_portName).arg(m_serial->error()) << m_serial->errorString(); emit signalError(tr("Can't open %1, error code %2\n%3").arg(m_portName).arg(m_serial->error()).arg(m_serial->errorString())); return; }
find serial port: "COM5" / "Dispositivo seriale USB"
"Can't open COM5, error code 10" "Parametro non corretto." -
Ok, was just a guess... looks like you have to download the debug symbols and debug into QSerialPort.
Do you have maybe another USB-serial converter for testing? -
You can try the following WinAPI code at first:
QByteArray systemLocation = "COM5"; DWORD desiredAccess = GENERIC_READ | GENERIC_WRITE; HANDLE handle = ::CreateFile(reinterpret_cast<const wchar_t*>(systemLocation.utf16()), desiredAccess, 0, nullptr, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nullptr); if (handle == INVALID_HANDLE_VALUE) { // OOPS const DWORD error = ::GetLastError(); qDebug() << "ERROR:" << error; }
ti see what happens.
-
I can download the source of QSerialPort and try to debug when I open it.
It could help me to investigate the real problem?Yes, of course.
-
@kuzulis I get the error 2.... file doesn't exist ??
the error code 2 is really file not exixt ??Screenshot from Windows device manager:
This is the code.
DWORD desiredAccess = GENERIC_READ | GENERIC_WRITE; HANDLE handle = ::CreateFile(reinterpret_cast<const wchar_t *>("COM5"), desiredAccess, 0, nullptr, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nullptr); if (handle == INVALID_HANDLE_VALUE) { // OOPS const DWORD error = ::GetLastError(); qDebug() << "ERROR:" << error; }