Управление потоком
В предыдущем разделе мы рассмотрели процедуру подтверждения связи между компьютером и модемом, а также между двумя компьютерами. Теперь мы рассмотрим механизм, с помощью которого можно регулировать передачу данных от компьютера модему и наоборот.
Когда одно устройство (например, компьютер), пытается передать данные с большей скоростью, чем они могут быть обработаны принимающей системой (модемом), результатом может стать потеря части передаваемых данных. Чтобы предотвратить передачу большего числа данных, чем то, которое может быть обработано, используют управление связью, называемое "управление потоком" (flow-controll handshake).
Стандарт RS-232-C определяет возможность управления потоком только для полудуплексного соединения. Полудуплексным называется соединение, при котором в каждый момент времени данные могут передаваться только в одну сторону.
Однако фактически этот механизм используется и для дуплексных соединений, когда данные передаются по линии связи одновременно в двух направлениях.
В полудуплексных соединениях компьютер подает сигнал RTS, когда ему надо передать данные. Модем отвечает сигналом по линии CTS, когда он готов, и компьютер начинает передачу данных. До тех пор, пока оба сигнала RTS и CTS не примут активное состояние, только модем может передавать данные.
При дуплексных соединениях сигналы RTS/CTS имеют противоположные значения по сравнению с теми, которые они имели для полудуплексных соединений.
Когда компьютер может принять данные, он подает сигнал по линии RTS. Если при этом модем готов для принятия данных, он возвращает сигнал CTS. Если напряжение на линиях RTS или CTS падает, то это сообщает передающей системе, что получающая система не готова для приема данных.
При связи двух устройств, работающих с различными скоростями, используют механизм управления потоком. Он подразумевает, что приемное устройство, не справляющееся с обработкой поступающих ему данных, подает передающему устройству определенный сигнал. При поступлении в передающее устройство данного сигнала оно приостанавливает передачу и ожидает, пока приемное устройство не обработает принятые данные и не подаст сигнал, разрешающий возобновить передачу данных.
На входе: AH = 0Fh;
AL = способ управления потоком:
D0 Использование для управления передачей символов XON/XOFF
D1 Использование для управления потоком сигналов CTS/RTS
D2 Зарезервирован
D3 Использование для управления приемом символов XON/XOFF
D7-D4 Зарезервированы
DX = номер порта: 0 - COM1, 1 - COM2,
2 - COM3, 3 - COM4 и т. д.
На выходе: не используется.
Вы можете выбрать тот или иной метод управления потоком, установив соответствующий бит регистра AL:
D0 - Использование для управления передачей символов XON(Ctrl-C)/XOFF(Ctrl-K). При установке данного бита FOSSIL-драйвер будет приостанавливать дальнейшую передачу данных удаленному модему при получении символа XOFF. Для возобновления передачи необходимо передать драйверу символ XON.
D1 - Использование для управления потоком сигналов CTS/RTS. При установке данного бита FOSSIL-драйвер будет приостанавливать дальнейшую передачу данных удаленному модему, если сигнал CTS переходит в неактивное состояние. Для возобновления передачи необходимо перевести линию CTS в активное состояние. FOSSIL-драйвер будет также переключать линию RTS в неактивное состояние, когда буфер приемника будет заполнен на определенную величину.
D3 - Использование символов XON/XOFF для управления приемом данных. При установке данного бита FOSSIL-драйвер будет передавать удаленному модему символ XOFF, когда буфер приемника драйвера заполнится на определенную величину. Когда программа считает символы из буфера приемника, удаленному модему будет передан символ XON, сигнализирующий, что передачу можно продолжить.