// UART.H


/**
*.Name         select_port
*
*.Title        Выбираем используемый COM-порт
*
*.Descr        Эта функция определяет с каким COM-портом
*              мы в дальнейшем будем работать.
*
*.Proto        void far select_port(int port)
*
*.Params       int port - номер порта (COM1..COM4)
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far select_port(int);


/**
*.Name         save_com
*
*.Title        Сохраняем старый вектор прерывания COM-порта
*
*.Descr        Эта функция сохраняет адрес старого обработчика
*              прерываний от COM-порта.
*
*.Proto        void far save_com(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far save_com(void);


/**
*.Name         restore_com
*
*.Title        Восстанавливаем старый вектор прерывания COM-порта
*
*.Descr        Эта функция восстанавливает адрес старого обработчика
*              прерываний от COM-порта.
*
*.Proto        void far restore_com(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far restore_com(void);


/**
*.Name         install_com
*
*.Title        Устанавливаем свой обработчик прерывания COM-порта
*
*.Descr        Эта функция устанавливает новый обработчик
*              прерываний от COM-порта.
*
*.Proto        int far install_com(void)
*
*.Params       не используется
*
*.Return       возвращает 1 при успешной установке
*              и 0 в случае ошибки
*
*.Sample       comm.asm
**/
int far install_com(void);


/**
*.Name         install_com
*
*.Title        Устанавливаем свой обработчик прерывания COM-порта
*
*.Descr        Эта функция устанавливает новый обработчик
*              прерываний от COM-порта.
*
*.Proto        void far open_com( int baud, int device,
*                                 int parity, int stop_bits )
*
*.Params       int baud       - скорость обмена
*              int device     - тип устроиства связи: M - модем
*                               D - нуль-модем
*              int parity     - проверка на четность: N - нет проверки
*                               на четность, O - проверка по нечетности,
*                               E - проверка по четности, S - Space,
*                               M - Mark
*              int stop_bits  - количество стоповых битов
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far open_com( int, int, int, int );


/**
*.Name         close_com
*
*.Title        Запрещаем прерывания от асинхронного порта COM-порта
*
*.Descr        Эта функция запрещает прерывания от COM-порта
*
*.Proto        void far close_com(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far close_com(void);  /* close com port */


/**
*.Name         dtr_off
*
*.Title        Сбрасываем сигнал DTR
*
*.Proto        void far dtr_off(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far dtr_off(void);


/**
*.Name         dtr_on
*
*.Title        Устанавливаем сигнал DTR
*
*.Proto        void far dtr_on(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far dtr_on(void);


/**
*.Name         r_count
*
*.Title        Определяем состояние буфера приемника
*
*.Proto        long far r_count(void)
*
*.Params       не используется
*
*.Return       в младшем байте число байтов в буфере приемника,
*              а в старшем общий размер буфера приемника
*
*
*.Sample       comm.asm
**/
long far r_count(void);

// макроопределение r_count_size возвращает
// общий размер буфера приемника

#define r_count_size() ((int)(r_count() >> 16))

// макроопределение r_count_pending возвращает
// число байтов в буфере приемника

#define r_count_pending() ((int)r_count())


/**
*.Name         receive_com
*
*.Title        Получить один символ из буфера приемника
*
*.Proto        int far receive_com(void)
*
*.Params       не используется
*
*.Return       очередной символ из буфера приемника
*
*.Sample       comm.asm
**/
int far receive_com(void);


/**
*.Name         s_count
*
*.Title        Определяем состояние буфера приемника
*
*.Proto        long far s_count(void)
*
*.Params       не используется
*
*.Return       в младшем байте число свободных байтов в буфере передатчика,
*              а в старшем общий размер буфера передатчика
*
*
*.Sample       comm.asm
**/
long far s_count(void);

// макроопределение s_count_size возвращает
// общий размер буфера приемника

#define s_count_size() ((int)(s_count() >> 16))

// макроопределение s_count_pending возвращает
// число байтов в буфере приемника

#define s_count_free() ((int)s_count())


/**
*.Name         send_com
*
*.Title        Передать один символ в буфер передатчика
*
*.Proto        void far send_com(int ch)
*
*.Params       int ch - передаваемый символ
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far send_com(int);


/**
*.Name         break_com
*
*.Title        Передать сигнал "BREAK" удаленному модему
*
*.Proto        void far break_com(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
void far break_com(void);

/**
*.Name         com_errors
*
*.Title        Возвращает указательна массив счетчиков ошибок
*
*.Proto        int far *far com_errors(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
int far *far com_errors(void);


#define COM_EOVFLOW 0   // переполнен буфер
#define COM_EOVRUN  1   // ошибка переполнения при приеме
#define COM_EBREAK  2   // обнаружен запрос на прерывание
#define COM_EFRAME  3   // ошибка синхронизации
#define COM_EPARITY 4   // ошибка четности
#define COM_EXMIT   5   // ошибка при передаче
#define COM_EDSR    6   // не получен сигнал dsr
#define COM_ECTS    7   // не получен сигнал cts
