LINUX.ORG.RU

По какому флагу можно понять о конце принятия данных ?

Флагу? Не проще ли лимит на кол-во принимаемых нулей установить?

anonymous
()

Да пожалуй нет такого флага. Возможность определять конец данных должна быть заложена внутрь протокола.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от Alex_Golubev

Не факт, что при вызове слота, который соединен с сигналом ReadyRead, будут доступны для чтения ВСЕ ОТПРАВЛЕННЫЕ ДАННЫЕ. Если при пересылке будут где-нибудь небольшие временные задержки, то слот, соответствующий ReadyRead будет вызван несколько раз. Т.е. в протоколе обмена, который будет организован поверх устройства чтения/записи (в данном случае это последовательный порт), нужно предусмотреть механизм, который позволит понять, все данные пришли (имеется ввиду, все ли пришли данные, которые были отправлены с другой стороны) или нет.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)

Зачем тебе это убожество, когда можно по-человечески с termios работать?

Вот вообще плюсеры на людей не похожи...

anonymous
()
Ответ на: комментарий от Dark_SavanT

Зачем тебе это убожество, когда можно по-человечески с termios работать?

Чтоб работать по человечески, нужно иметь дело только с человеческими ОС. А абстракция в виде QSerialPort позволяет работать и на никсах и на винде.

anonymous
()
Ответ на: комментарий от rumgot

Если при пересылке будут где-нибудь небольшие временные задержки, то слот, соответствующий ReadyRead будет вызван несколько раз

В моем случаи такого быть не может. Так как я сам сделал подчиненное устройство. И даже если такое произошло то это есть неисправность.

В моем случаи программа должна выглядить вот так:

отправляем данные ---> ждем отправки ---> «не знаю нужно или нет очищаем входной буфер» ---> ждем прием данных ---> забираем данные

И так в цикли гоняем данные.

Alex_Golubev
() автор топика
Ответ на: комментарий от Alex_Golubev

Смотри сам конечно. Но я бы позаботился о механизме определения конца данных. И по совместительности механизме проверки целостности данных. Погугли протокол Modbus.

rumgot ★★★★★
()
Ответ на: комментарий от Alex_Golubev

отправляем данные ---> ждем отправки ---> «не знаю нужно или нет очищаем входной буфер» ---> ждем прием данных ---> забираем данные

Твоё устройство - подчинённое? Протокол бинарный? Само данные без запроса не отправляет? Тогда отправил запрос, и читаешь из порта всё, что приходит и сразу разбирай, пока не получишь правильный ответ. Проверил длину пакета и crc, дальше читать что-либо нет смысла.

Если устройство может отправлять данные без запросов. То дёргаешь read() по получению readyRead или в отдельном потоке блокируешься по waitForReadyRead().

Если протокол текстовый, то всё тоже, но с readLine() и canReadLine().

Ivan_qrt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.