QSerialPort open error code 10
-
@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.
-
@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.