Регистр состояния модема
Регистр состояния модема позволяет программе определить состояние управляющих сигналов, передаваемых модемом асинхронному порту компьютера. Формат регистра состояния модема представлен ниже:
D0 Если бит D0 равен единице, линия CTS изменила состояние
D1 Если бит равен единице, линия DSR изменила состояние
D2 Если бит D2 равен единице, линия RI изменила состояние. Некоторые коммуникационные программы определяют по состоянию этого бита наличие звонка на телефонной линии
D3 Если данный бит равен единице, значит линия DCD изменила свое состояние. Некоторые коммуникационные программы определяют по состоянию этого бита, установил ли модем соединение с удаленным модемом
D4 Бит соответствует состоянию линии CTS. Эта линия используется совместно с линией RTS при реализации аппаратного управления потоком данных
D5 Бит соответствует состоянию линии DSR. Эта линия используется совместно с линией DTR при аппаратной реализации подтверждения связи
D6 Бит соответствует состоянию линии RI. Единица означает, что модем обнаружил звонок на телефонной линии
D7 Состояние линии DCD. Единица означает, что модемом получена несущая частота. Заметим, что при выполнении аналогового теста (analog test) этот бит должен содержать единицу. Если это не так, то возможно, что модем исправен (для внешних модемов), но кабель, соединяющий модем и компьютер, не полностью соответствует стандарту RS-232
Доступ к отдельным полям регистра состояния модема можно организовать с помощью следующего объединения:
// Смещение относительно базового адреса
#define MSR_N 6
// Регистр состояния модема
typedef union _MSR_
{
struct
{
unsigned char change_cts : 1;
unsigned char change_dsr : 1;
unsigned char change_ri : 1;
unsigned char change_dcd : 1;
unsigned char cts : 1;
unsigned char dsr : 1;
unsigned char ri : 1;
unsigned char dcd : 1;
} bit_reg;
unsigned char byte;
} MSR;