/* Copyright (C) Magna Carta Software, Inc. 1990-1991. All Rights Reserved ACL.H -- Definitions and data types for the C Communications Toolkit routines that support the Star Gate ACL series of multiport boards. */ /* Definition of the Global Control Block */ typedef struct { volatile BYTE FAR_ * base_addr; /* base memory address of dual port RAM */ BYTE FAR_ * cba; /* channel base address in dual port RAM */ WORD port_addr; /* I/O port address for this ACL board */ } ACL; #define STARGATE_ACL 4 /* ACL GLOBAL CONTROL BLOCK DEFINITIONS */ #define ACL_GSW 2 #define ACL_GSR 4 #define ACL_ABS 6 #define ACL_BOARD_TYPE 8 #define ACL_CP_VER 0XA #define ACL_CCB_COUNT 0XC #define ACL_CCB_OFFSET 0XE #define ACL_CCB_SIZE 0X10 #define ACL_GCW2 0X12 #define ACL_GSW2 0X14 #define ACL_CESR 0X16 #define ACL_IBSR 0X18 #define ACL_OBSR 0X1A #define ACL_CCSR 0X1C short acl_cmd(ACL *acl, WORD cmd); short acl_init(ACL *acl, WORD port_addr, void FAR_ *base_addr); void acl_ram_disable(ACL *acl); short acl_ram_enable(ACL *acl, void FAR_ *base_addr); /* Read the ACL Global Command Word */ #define acl_gcw(a) (*((a)->base_addr + 0)) /* Read the ACL Global Status Word */ #define acl_gsw(a) (*((a)->base_addr + ACL_GSW)) /* Read the ACL 'Global Service Request' word */ #define acl_gsr(a) (xchg((a)->base_addr + ACL_GSR)) /* Read the ACL 'Available Buffer Space Remaining' word */ #define acl_abs(a) (*((a)->base_addr + ACL_ABS)) /* Read the ACL 'Board Type' word */ #define acl_bt(a) (*((a)->base_addr + ACL_BOARD_TYPE)) /* Read the ACL 'Family Control Program Version' word */ #define acl_cp_ver(a) (*((a)->base_addr + ACL_CP_VER)) /* Read the ACL 'Channel Control Block Count' word */ #define acl_ccb_count(a) (*((a)->base_addr + ACL_CCB_COUNT)) /* Read the ACL 'Channel Control Block Offset' word */ #define acl_ccb_offset(a) (* (WORD FAR_ *)((a)->base_addr + ACL_CCB_OFFSET)) /* Read the ACL 'Channel Control Block Size' word */ #define acl_ccb_size(a) (*((a)->base_addr + ACL_CCB_SIZE)) /* Write to the ACL 'Global Command Word 2' word */ #define acl_w_gcw2(a, b) (*((a)->base_addr + ACL_GCW2) = (b)) /* Read the ACL 'Global Command Word 2' word */ #define acl_r_gcw2(a) (*((a)->base_addr + ACL_GCW2)) /* Read the ACL 'Global Status Word 2' word */ #define acl_gsw2(a) (*((a)->base_addr + ACL_GSW2)) /* Read the ACL 'Communication Error Service Request' word */ #define acl_cesr(a) (xchg((a)->base_addr + ACL_CESR)) /* Read the ACL 'Input Buffer Service Request' word */ #define acl_ibsr(a) (xchg((a)->base_addr + ACL_IBSR)) /* Read the ACL 'Output Buffer Service Request' word */ #define acl_obsr(a) (xchg((a)->base_addr + ACL_OBSR)) /* Read the ACL 'Modem Status Service Request' word */ #define acl_mssr(a) (xchg((a)->base_addr + ACL_MSSR)) /* Read the ACL 'Channel Command Service Request' word */ #define acl_ccsr(a) (xchg((a)->base_addr + ACL_CCSR)) /* ACL CHANNEL CONTROL BLOCK COMMANDS */ short acl_ch_get(char *cba, WORD parm); short acl_cc(char *cba, WORD cmd); short acl_ch_cmd(char *cba, WORD cmd, WORD parm); short acl_ch_set(char *cba, WORD cmd, WORD parm); short acl_ch_set_line_protocol(char *cba, WORD parm); short acl_ch_set_data_format(char *cba, WORD parm); short acl_ch_set_databits(char *cba, WORD databits); short acl_ch_set_parity(char *cba, WORD parity); short acl_ch_set_stopbits(char *cba, WORD stopbits); /* ACL CHANNEL CONTROL BLOCK CONSTANTS */ #define ACL_BAUD_RATE 0 #define ACL_DATA_FORMAT 2 #define ACL_LINE_PROTOCOL 4 #define ACL_INPUT_BUFFER_SIZE 6 #define ACL_OUTPUT_BUFFER_SIZE 8 #define ACL_INPUT_BUFFER_TRIGGER_RATE 0XA #define ACL_OUTPUT_BUFFER_LWM 0XC #define ACL_IXON_CHARACTERS 0XE #define ACL_INPUT_BUFFER_HWM 0X10 #define ACL_INPUT_BUFFER_LWM 0X12 #define ACL_CHANNEL_COMMAND 0X14 #define ACL_CHANNEL_STATUS 0X16 #define ACL_INPUT_BUFFER_START_ADDR 0X18 #define ACL_INPUT_BUFFER_END_ADDR 0X1A #define ACL_OUTPUT_BUFFER_START_ADDR 0X1C #define ACL_OUTPUT_BUFFER_END_ADDR 0X1E #define ACL_NEXT_CHAR_TO_INPUT_BUFFER 0X20 #define ACL_NEXT_CHAR_FROM_INPUT_BUFFER 0X22 #define ACL_NEXT_CHAR_TO_OUTPUT_BUFFER 0X24 #define ACL_NEXT_CHAR_FR_OUTPUT_BUFFER 0X26 #define ACL_COMMUNICATION_ERROR_STATUS 0X28 #define ACL_BAD_CHARACTER_POINTER 0X2A #define ACL_MODEM_CONTROL 0X2C #define ACL_MODEM_STATUS 0X2E #define ACL_BLOCKING_STATUS 0X30 #define ACL_CHARACTER_RECEIVED_FLAG 0X32 #define ACL_IXOFF_CHARACTERS 0X34 #define acl_ch_get_line_protocol(a) acl_ch_get((a), ACL_LINE_PROTOCOL) #define acl_ch_set_ibuf_size(a, b) acl_ch_cmd((a), ACL_INPUT_BUFFER_SIZE, (b)) #define acl_ch_set_obuf_size(a, b) acl_ch_cmd((a), ACL_OUTPUT_BUFFER_SIZE, (b)) #define acl_ch_set_ibuf_trig(a, b) acl_ch_cmd((a), ACL_INPUT_BUFFER_TRIGGER_RATE, (b)) #define acl_ch_set_obuf_lwm(a, b) acl_ch_cmd((a), ACL_OUTPUT_BUFFER_LWM, (b)) #define acl_ch_set_ixon_chars(a, b) acl_ch_cmd((a), ACL_IXON_CHARACTERS, (b)) #define acl_ch_set_ibuf_hwm(a, b) acl_ch_cmd((a), ACL_INPUT_BUFFER_HWM, (b)) #define acl_ch_set_ibuf_lwm(a, b) acl_ch_cmd((a), ACL_INPUT_BUFFER_LWM, (b)) #define acl_ch_get_cmd(a) acl_ch_get((a), ACL_CHANNEL_COMMAND) #define acl_ch_get_status(a) acl_ch_get((a), ACL_CHANNEL_STATUS) #define acl_ch_get_ibuf_sa(a) acl_ch_get((a), ACL_INPUT_BUFFER_START_ADDR) #define acl_ch_get_ibuf_ea(a) acl_ch_get((a), ACL_INPUT_BUFFER_END_ADDR) #define acl_ch_set_ibuf_ea(a, b) acl_ch_cmd((a), ACL_INPUT_BUFFER_END_ADDR, (b)) #define acl_ch_get_obuf_sa(a) acl_ch_get((a), ACL_OUTPUT_BUFFER_START_ADDR) #define acl_ch_get_obuf_ea(a) acl_ch_get((a), ACL_OUTPUT_BUFFER_END_ADDR) #define acl_ch_get_nctib(a) acl_ch_get((a), ACL_NEXT_CHAR_TO_INPUT_BUFFER) #define acl_ch_get_ncfib(a) acl_ch_get((a), ACL_NEXT_CHAR_FROM_INPUT_BUFFER) #define acl_ch_set_ncfib(a, b) acl_ch_set((a), ACL_NEXT_CHAR_FROM_INPUT_BUFFER, (b)) #define acl_ch_get_nctob(a) acl_ch_get((a), ACL_NEXT_CHAR_TO_OUTPUT_BUFFER) #define acl_ch_set_nctob(a, b) acl_ch_set((a), ACL_NEXT_CHAR_TO_OUTPUT_BUFFER, (b)) #define acl_ch_get_ncfob(a) acl_ch_get((a), ACL_NEXT_CHAR_FR_OUTPUT_BUFFER) /* Communications Error Status word */ #define acl_ces(a) (xchg((a) + ACL_COMMUNICATION_ERROR_STATUS)) #define acl_ch_get_modem_ctl(a) acl_ch_get((a), ACL_MODEM_CONTROL) #define acl_ch_set_modem_ctl(a, b) acl_ch_cmd((a), ACL_MODEM_CONTROL, (b)) #define acl_ch_get_modem_status(a) acl_ch_get((a), ACL_MODEM_STATUS) #define acl_ch_get_block_status(a) acl_ch_get((a), ACL_BLOCKING_STATUS) #define acl_ch_set_ixoff_chars(a, b) acl_ch_cmd((a), ACL_IXOFF_CHARACTERS, (b)) /* ACL CHANNEL COMMANDS */ #define CCAU 1 /* configure channel and UART */ #define CC 2 /* configure channel (not UART) */ #define FIB 4 /* flush input buffer */ #define FOB 8 /* flush output buffer */ #define ER 0X10 /* enable receiver */ #define DR 0X20 /* disable receiver */ #define ET 0X40 /* enable transmitter */ #define DT 0X80 /* disable transmitter */ /* ACL VALUES OF THE 'CHANNEL PARITY' PARAMETER */ #define ACL_PARITY_NONE 0 #define ACL_PARITY_ODD 8 #define ACL_PARITY_EVEN 0X18 #define ACL_PARITY_MARK 0X28 #define ACL_PARITY_SPACE 0X38 /* ACL VALUES OF THE 'CHANNEL MODE' PARAMETER */ #define ACL_NORMAL_MODE 0 #define ACL_AUTOMATIC_ECHO 0X40 #define ACL_LOCAL_LOOPBACK 0X80 #define ACL_REMOTE_LOOPBACK 0XC0 /* ACL VALUES OF THE LINE PROTOCOL WORD */ #define ACL_XONXOFF_ACCEPT 1 #define ACL_XON_ALL 2 #define ACL_XONXOFF_ASSERT 4 #define ACL_RTS_CTS_UART_ACCEPT 8 #define ACL_RTS_CTS_UART_ASSERT 0X10 #define ACL_RTS_TOGGLE 0X20 #define ACL_RTS_CTS_ASSERT 0X40 #define ACL_MODEM_STATUS_ENABLE 0X80 /* ACL VALUES FOR THE MODEM CONTROL WORD */ #define ACL_DTR 1 #define ACL_RTS 2 #define ACL_BREAK 8 #define ACL_READY 0 #define ACL_DIAGNOSTIC_MODE 1 #define ACL_RESET 2 #define acl_get_databits(a) ((acl_ch_get(a, ACL_DATA_FORMAT) & 0XFC) + 5) #define acl_get_stopbits(a) (((acl_ch_get(a, ACL_DATA_FORMAT) & 0XFB) >> 2) + 1) #define acl_get_parity(a) (acl_ch_get(a, ACL_DATA_FORMAT) & 0XC6) #define acl_get_channel_mode(a) (acl_ch_get(a, ACL_DATA_FORMAT) & 0X3F) short acl_init_channel(COMM_PORT *p, ACL *acl, WORD portnum, long speed, WORD databits, WORD parity, WORD stopbits); short acl_get(COMM_PORT *p, short cmd); long acl_get_speed(COMM_PORT *p); short acl_get_tx_xlat(COMM_PORT *p, short item); short acl_read(COMM_PORT *p); short acl_rxstat(COMM_PORT *p); short acl_set(COMM_PORT *p, short cmd, short value); short acl_set_channel_mode(COMM_PORT *p, WORD mode); short acl_set_rx_xlat(COMM_PORT *p, short item, short value); short acl_set_speed(COMM_PORT *p, long speed); short acl_set_tx_xlat(COMM_PORT *p, short item, short value); short acl_txstat(COMM_PORT *p); void acl_write(COMM_PORT *p, short c);