// UART.H


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


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


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


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


/**
*.Name         OpenCom
*
*.Title        Устанавливаем свой обработчик прерывания COM-порта
*
*.Descr        Эта функция устанавливает новый обработчик
*              прерываний от COM-порта.
*
*.Proto        void far OpenCom( 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 OpenCom( int, int, int, int );


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


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


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


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

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

#define RCountSize() ((int)(RCount() >> 16))

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

#define RCountPending() ((int)RCount())


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


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

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

#define SCountSize() ((int)(SCount() >> 16))

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

#define SCountFree() ((int)SCount())


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


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

/**
*.Name         ComErrors
*
*.Title        Возвращает указательна массив счетчиков ошибок
*
*.Proto        int far *far ComErrors(void)
*
*.Params       не используется
*
*.Return       не используется
*
*.Sample       comm.asm
**/
int far *far ComErrors(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
