Solved QSerialPort open error code 10
-
@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; }
-
@Christian-Ehrlicher said in QSerialPort open error code 10:
Do you have maybe another USB-serial converter for testing?
No, is not a USB serial converter but is a USB connected directly on the device/board.
I can ask my customer to give me back the fisrt board (the one that I starting to work with).
It could be the board or firmware yes.... but why with Hercules I can communicate without problems ?? -
@addebito said in QSerialPort open error code 10:
reinterpret_cast<const wchar_t *>("COM5")
And this is wrong. Either use the solution from @kuzulis or pass a proper utf-16 encoded string: L"COM5"
-
@Christian-Ehrlicher you are right but there isn't a call ".utf16()" in QByteArray class so I've replaced with a mistake.
Now the CreateFile with L"COM5" works. I don't get any error.