QSerialPort open error code 10
-
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.
-
@addebito said in QSerialPort open error code 10:
QByteArray
Because it should be QString :)
Ok, then you have to debug by yourself, don't see what should go wrong within QSerialPort code nor can I test it locally.
-
@Christian-Ehrlicher said in QSerialPort open error code 10:
Ok, then you have to debug by yourself, don't see what should go wrong within QSerialPort code nor can I test it locally.
Yes but is not as easy as I thought.
I've run the maintenance QT software and I've check if the source was installed.I've created a simple demo project and added this lines inside the .pro
include(C:/Qt/5.14.2/Src/qtserialport/src/serialport/serialport-lib.pri)
I have to add also these lines to resolve some issues
INCLUDEPATH += "C:/Qt/5.14.2/Src/qtbase/include/QtCore/5.14.2/QtCore" INCLUDEPATH += "C:/Qt/5.14.2/Src/qtbase/include/QtCore/5.14.2" INCLUDEPATH += "C:/Qt/5.14.2/msvc2017_64/include/QtCore/5.14.2"
But now, when I compile I get this error:
definition of dllimport static data member not allowed
I think there is something wrong in my approach...
How should i do to debug QSerialPort class?
thank you for your time and your patience. -
I don't understand why you try to compile QSerialPort by yourself. Install the debug symbols and sources, compile your app with debug informations, add a breakpoint on QSP::open() call and step into the call.
-
@Christian-Ehrlicher what you means with "Install the debug symbols and sources"?
I'm in debug with a breakpoint but if try to step into by F11...
-
@addebito said in QSerialPort open error code 10:
what you means with "Install the debug symbols and sources"?
With Maintenance Tool, select "Sources" and "Qt Debug Information Files" for the select Qt Version:
Then build your project in "Debug" and start debugging.
-
@addebito said in QSerialPort open error code 10:
I see only the debugger on line 118 (qflags.h) and after F11 again the debugger return on my mainwindow.cpp.
That's correct since first the flags ctor is called, then hit F11 again to step into the function call.