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