Программирование модемов
© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 236 стр.
SYSP_COM.H
/* SYSP_COM.H - include-файл для примеров, приведенных в книге */
/**
*.Name FP_MAKE
*
*.Title Макро для составления FAR-указателя
*
*.Descr Макро составляет FAR-указатель, пользуясь
* значениями сегмента и смещения
*
*.Params FP_MAKE(seg,off)
* seg - сегмент;
* off - смещение
*
*.Return FAR-указатель seg:off
**/
#define FP_MAKE(seg,off) ((void far *) \
((((unsigned long) (unsigned)(seg)) << 16L) | \
((unsigned long) (unsigned) (off))))
#pragma pack(1)
/* Идентификатор BIOS */
typedef struct _BIOS_ID_ {
char date[8];
unsigned reserve;
char pc_type;
} BIOS_ID;
typedef struct _AUX_MODE_ {
union {
struct {
unsigned char len : 2, // длина символа
stop : 1, // число стоп-битов
parity : 2, // контроль четности
stuck_parity : 1, // фиксация четности
en_break_ctl : 1, // установка перерыва
dlab : 1; // загрузка регистра делителя
} ctl_word;
char ctl;
} ctl_aux;
unsigned long baud; // скорость передачи данных
} AUX_MODE;
int aux_init(AUX_MODE *, int, int); // инициализация
// асинхронного адаптера
void aux_stat(AUX_MODE *, int); // определение режима
// асинхронного адаптера
void aux_outp(char, int); // вывод символа в
// асинхронный адаптер
char aux_inp(int); // ввод символа из асинхронного
// адаптера
BC_CONST.H
// BC_CONST.H
// определение констант для Turbo C и Borland C
#define _COM_INIT 0
#define _COM_SEND 1
#define _COM_RECEIVE 2
#define _COM_STATUS 3
#define _COM_CHR7 0x02
#define _COM_CHR8 0x03
#define _COM_STOP1 0x00
#define _COM_STOP2 0x04
#define _COM_NOPARITY 0x00
#define _COM_EVENPARITY 0x18
#define _COM_ODDPARITY 0x08
#define _COM_110 0x00
#define _COM_150 0x20
#define _COM_300 0x40
#define _COM_600 0x60
#define _COM_1200 0x80
#define _COM_2400 0xa0
#define _COM_4800 0xc0
#define _COM_9600 0xe0
UART_REG.H
// UART_REG.H
/**
*.Name FP_MAKE
*
*.Title Макро для составления FAR-указателя
*
*.Descr Макро составляет FAR-указатель, пользуясь
* значениями сегмента и смещения
*
*.Params FP_MAKE(seg,off)
* seg - сегмент;
* off - смещение
*
*.Return FAR-указатель seg:off
**/
#define FP_MAKE(seg,off) ((void far *) \
((((unsigned long) (unsigned)(seg)) << 16L) | \
((unsigned long) (unsigned) (off))))
#pragma pack(1)
// регистр управления прерываниями
#define ICR_N 1
typedef union _ICR_ {
struct {
unsigned char in_ready : 1;
unsigned char out_ready : 1;
unsigned char err : 1;
unsigned char change : 1;
unsigned char reserv : 4;
} bit_reg;
unsigned char byte;
} ICR;
// регистр идентификации прерывания
#define IIDR_N 2
typedef union _IIDR_ {
struct {
unsigned char no_inter : 1;
unsigned char inter_id : 2;
unsigned char reserv : 5;
} bit_reg;
unsigned char byte;
} IIDR;
// регистр управления модемом
#define MCR_N 4
typedef union _MCR_ {
struct {
unsigned char dtr : 1;
unsigned char rts : 1;
unsigned char out1 : 1;
unsigned char out2 : 1;
unsigned char diag : 1;
unsigned char reserv : 3;
} bit_reg;
unsigned char byte;
} MCR;
// регистр состояния модема
#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;
// регистр состояния линии
#define LSR_N 5
typedef union _LSR_ {
struct {
unsigned char in_ready : 1;
unsigned char overflow : 1;
unsigned char parity : 1;
unsigned char synxr : 1;
unsigned char break_detect : 1;
unsigned char out_ready : 1;
unsigned char shift_ready : 1;
unsigned char taimout : 1;
} bit_reg;
unsigned char byte;
} LSR;
// управляющий регистр
#define LCR_N 3
typedef union _LCR_ {
struct {
unsigned char len : 2;
unsigned char stop : 1;
unsigned char parity : 2;
unsigned char stuck_parity : 1;
unsigned char en_break_ctl : 1;
unsigned char dlab : 1;
} bit_reg;
unsigned char byte;
} LCR;
#pragma pack()
int test_com( unsigned );
|