В принципе, если попадется "обрезаный" конвертер, который сам ничего не разруливает, то при реализации в QtSerialPort есть небольшой нюанс, связанный с асинхронной природой I/O в Qt.
Т.е. если сделаешь так:
C++ (Qt)
setRequestToSend(true);
write(.....);
setRequestToSend(false);
то у тебя ничего не выйдет, т.к. write() только лишь запишет занные в буфер класса и сразу же возвратится.
А уже реальная их отправка будет выполняться асинхронно в потрохах.
Т.е. после write() не факт, что все данные отправятся, и когда ты сделаешь setRequestToSend(false), то тебя может ждать сюрприз.
Я бы попробовал определить завершение передачи при помощи сигнала bytesWtitten(qint64) и подсчитывать (аккумулировать) кол-во реально отправленных байт.
Потому что они могут передаваться по кусочкам, т.е. не все сразу, и => bytesWtitten() будет тебе сигналить после передачи каждого кусочка.
Т.е. я бы сделал как-то так:
C++ (Qt)
...
...
const qint64 bytesToWrite = 1234;
...
...
connect(port, SIGNAL(bytesWtitten(qint64)), this, SLOT(onEndOfTransfer(qint64))));
...
...
MyClass::onEndOfTransfer(qint64 bytesTransferred)
{
static qint64 accumulator = 0;
accumulator += bytesTransferred;
if (accumulator < bytesToWrite) {
// ничего не делаешь, т.к. не все данные еще передались.
} else {
setRequestToSend(false); // <- тут отключаешь у конвертера режим передачи
}
}
...
...
MyClass::onWrite()
{
...
QByteArray data(bytesToWrite, 0); // <- тут заполняешь свой массив чем тебе нужно
setRequestToSend(true); // <- тут переключаешь конвертер а передачу
...
write(data); // <- тут передаешь
}
...
...
Естественно, тут просто показана идея без всяких проверок и т.п.
В принципе, я ее бы еще расширил и дополнительно коннектился бы к сигналу requestToSendChanged(bool) для запуска write().
Как-то так..