|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 9, 2004 13:32:50 · Поправил: prog Дико извиняюсь за offtopiс, но, плиз, подскажите кто-нибудь! Если надо принять из COM порта не Определенное кол-во байт, а оборвать прием при приеме заданного Cимвола, то что нужно указать в SERIAL_HANDFLOW и SERIAL_CHARS ? Копаюсь, копаюсь- уже запутался ... Указал SERIAL_AUTO_RECEIVE (Use the XON/XOFF protocol based flow control for input. The XoffChar is send by the controller if the receive buffer reaches the programmed high water mark. If the receive buffer falls below the programmed low water mark, the XonChar is send.) и задал XoffChar (Defines the XOFF character that stops data transmission if XON/XOFF flow control is enabled.) Данные приходят binary. И нифига... ReadFile ждет заданных ему кол-ва байт для приема, хотя символ XoffChar уже принял... Подскажите хотябы в какую сторону думать..!!! Как принять с COM порта с помощью ReadFile последовательность, если известна только максимальная ее длина, и символ, которым заканчивается последователдьность (т.е. после приема определенного, конечного, символа нужно чтобы ReadFile отдал кусок пришедшего кода.) Ну неужели только в лоб, считывать ReadFile по одному байту и сверять его с символом конца???? :(( |
|
|
Дата: Апр 11, 2004 19:38:23 Если нужно оборвать прием на каком-то символе, то его код надо указать в поле EvtChat структуры DCB и настроить порт на посылку события (для WaitCommEvent) при приходе этого символа, а дальше просто не принимать данные и всё. |
|
|
Дата: Апр 12, 2004 10:36:29 Дык.. я это знал, но вот сработал Event, я понял, что драйвер(виндовский) принял символ конца, так а как я узнаю сколько байт мне после этого нужно считать с помощью ReadFile ??? |
|
|
Дата: Апр 12, 2004 12:28:11 В момент прихода этого события надо зафиксировать число байт во входной очереди порта - вот их и надо дочитать ReadFile, последний из них и будет специальный символ. |
|
|
Дата: Апр 12, 2004 14:34:39 зафиксировать число байт во входной очереди порта Извиняюсь.. но как именно это сделать?? В этомто у меня и был затык при таком подходе. |
|
|
Дата: Апр 13, 2004 11:46:41 Вызвать ClearCommError и считать значение cbInQue структуры COMSTAT которая передается этой функции. Это и будет число байт которые получены к этому моменту. |
|
|
Дата: Апр 15, 2004 10:50:34 Спасибо! |