FreeCalypso > hg > fc-tourmaline
view src/g23m-aci/uart/uart.h @ 78:c632896652ba
mfw/ti1_key.c: properly initialize notified_keys array
The code in this ti1_key.c layer needs to call kpd_subscribe() and
kpd_define_key_notification() functions in order to register with the
KPD driver. The original code passed KPD_NB_PHYSICAL_KEYS in
nb_notified_keys - this constant is defined to 24 in kpd_cfg.h on all
platforms of interest to us - but it only filled the first 23 slots
in the notified_keys array, resulting in stack garbage being passed
to KPD API functions. The fix consists of initializing the last
missed array slot to KPD_KEY_RECORD, the key ID for the right side
button on the D-Sample handset.
On our current hw targets this "Record" button exists as the EXTRA
button on our Luna keypad board and as the camera button on the
Pirelli DP-L10. There is no support whatsoever for this button
in current BMI+MFW, we have no plans of doing anything with Pirelli's
camera button even if we do get our UI fw running on that phone,
and the Mother's dream of building our own FreeCalypso handset with
the same button arrangement as D-Sample (including the right side
button) is currently very nebulous - but let us nonetheless handle
the full set of buttons on the KPD to MFW interface, and let upper
layers weed out unsupported buttons.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Oct 2020 23:41:01 +0000 |
parents | fa8dc04885d8 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : | Modul : +----------------------------------------------------------------------------- | Copyright 2002 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : Definitions for the Protocol Stack Entity | Universal Asynchronous Receiver Transmitter (UART). +----------------------------------------------------------------------------- */ #ifndef UART_H #define UART_H /*==== MACROS ======================================================*/ /* * defines the user of the vsi interface */ #define VSI_CALLER UART_handle, #define VSI_CALLER_SINGLE UART_handle /* * VERSION * * Description : The constants define the type and the value * of a version identification. The version * is part of the monitor struct. */ #define VERSION_UART "UART 1.1" #ifdef TI_PS_OP_VSI_NO_CALL_ID #define TIMER_START(C,I,T) vsi_t_start_nc(I,T) #define TIMER_PSTART(C,I,T,R) vsi_t_pstart_nc(I,T,R) #define TIMER_STOP(C,I) vsi_t_stop_nc(I) #define TIMER_STATUS(C,I,T) vsi_t_status_nc(I,T) #define SUSPEND_SELF(C,T) vsi_t_sleep_nc(T) #define SYSTEM_TIME(C,T) vsi_t_time_nc(T) #else /* TI_PS_OP_VSI_NO_CALL_ID */ #define TIMER_START(C,I,T) vsi_t_start(C,I,T) #define TIMER_PSTART(C,I,T,R) vsi_t_pstart(C,I,T,R) #define TIMER_STOP(C,I) vsi_t_stop(C,I) #define TIMER_STATUS(C,I,T) vsi_t_status(C,I,T) #define SUSPEND_SELF(C,T) vsi_t_sleep(C,T) #define SYSTEM_TIME(C,T) vsi_t_time(C,T) #endif /* TI_PS_OP_VSI_NO_CALL_ID */ /* * This is just a TEMPORARY define until the issues with OPTION_MULTITHREAD * are settled. This define SHOULD be contained in GSM.H. */ #undef _ENTITY_PREFIXED #define _ENTITY_PREFIXED(N) uart_##N /* * Communication handles (see also UART_PEI.C) */ #define hCommMMI uart_hCommMMI #define hCommUART uart_hCommUART /* * Macros for error tracing */ #ifndef TRACE_ERROR_P1 #define TRACE_ERROR_P1(f,a1) vsi_o_error_ttrace(f,a1); #endif #ifndef TRACE_ERROR_P2 #define TRACE_ERROR_P2(f,a1,a2) vsi_o_error_ttrace(f,a1,a2); #endif #ifndef TRACE_ERROR_P3 #define TRACE_ERROR_P3(f,a1,a2,a3) vsi_o_error_ttrace(f,a1,a2,a3); #endif #ifndef TRACE_ERROR_P4 #define TRACE_ERROR_P4(f,a1,a2,a3,a4) vsi_o_error_ttrace(f,a1,a2,a3,a4); #endif /*==== CONSTANTS ======================================================*/ #if defined (DTILIB) /* * dtilib interface */ #define UART_DTI_UP_INTERFACE 0 #define UART_UPLINK_QUEUE_SIZE 0 #endif /* DTILIB */ /* * Scaling */ #ifdef FF_MULTI_PORT #define UART_INSTANCES FF_MULTI_PORT #else /* FF_MULTI_PORT */ #ifdef FF_TWO_UART_PORTS #define UART_INSTANCES 2 #else /* FF_TWO_UART_PORTS */ #define UART_INSTANCES 1 #endif /* FF_TWO_UART_PORTS */ #endif /* FF_MULTI_PORT */ #define UART_MAX_NUMBER_OF_CHANNELS 6 /* * Bitoffset for encoding/decoding */ #define ENCODE_OFFSET 0 /* * Service definitions. Used to access service data with GET/SET_STATE. * * Services with multiple incarnation have to be defined as xxx-> * Services with only one incarnation have to be defined as xxx. * */ #define UART_SERVICE_KER ker. #define UART_SERVICE_RX rx. #define UART_SERVICE_TX tx. #define UART_SERVICE_DTX dtx-> #define UART_SERVICE_DRX drx-> #define UART_SERVICE_RT rt. /* * Service name definitions for trace purposes. */ #ifndef NTRACE #define SERVICE_NAME_UART_SERVICE_KER "KER" #define SERVICE_NAME_UART_SERVICE_RX "RX" #define SERVICE_NAME_UART_SERVICE_TX "TX" #define SERVICE_NAME_UART_SERVICE_DRX "DRX" #define SERVICE_NAME_UART_SERVICE_DTX "DTX" #define SERVICE_NAME_UART_SERVICE_RT "RT" #endif /* !NTRACE */ /* * State definitions for each service. */ #define KER_DEAD 1 #define KER_READY 2 #define KER_MUX_ESTABLISH 3 #define KER_MUX 4 #define KER_MUX_DLC_CLOSING 5 #define KER_MUX_CLOSING 6 #define KER_MUX_CLOSED 7 #define RX_DEAD 8 #ifdef DTILIB /* * we do not use the one from DTILIB here */ #undef RX_READY #endif #define RX_READY 9 #define RX_MUX 10 #define TX_DEAD 11 #ifdef DTILIB /* * we do not use the one from DTILIB here */ #undef TX_READY #endif #define TX_READY 12 #define TX_READY_FLUSHING 13 #define TX_MUX 14 #define TX_MUX_FLUSHING 15 #define DRX_DEAD 16 #define DRX_READY 17 #define DRX_NOT_READY 18 #define DRX_FLUSHING 19 #define DTX_DEAD 20 #define DTX_READY 21 #define DTX_NOT_READY 22 #define RT_STATE 23 /* * DLC Connection states */ #define UART_CONNECTION_DEAD 24 #define UART_CONNECTION_SABM_RCVD 25 #define UART_CONNECTION_DISC_SENT 26 #define UART_CONNECTION_OPEN 27 /* * states of TX ISR state machine */ #define UART_TX_BEGIN 28 #define UART_TX_ADDRESS 29 #define UART_TX_CONTROL 30 #define UART_TX_INFORMATION 31 #define UART_TX_FCS 32 #define UART_TX_END 33 /* * states of TX sending indicator */ #define UART_TX_SENDING 34 #define UART_TX_NOT_SENDING 35 /* * states of RX receiving indicator */ #define UART_RX_RECEIVING 36 #define UART_RX_NOT_RECEIVING 37 /* * states of RX ISR state machine */ #define UART_RX_ERROR 38 #define UART_RX_BEGIN 39 #define UART_RX_ADDRESS 40 #define UART_RX_CONTROL 41 #define UART_RX_INFORMATION 42 #define UART_RX_FCS 43 #define UART_RX_END 44 /* * DLC process states of reception */ #define UART_RX_PROCESS_STOP 45 #define UART_RX_PROCESS_READY 46 #define UART_RX_PROCESS_COMPLETE 47 /* * definition of flush states for service KER */ #define UART_KER_NOT_FLUSHING 48 #define UART_KER_DRX_FLUSH 49 #define UART_KER_TX_FLUSH 50 /* * special channel instance values */ #define UART_CONTROL_INSTANCE UART_MAX_NUMBER_OF_CHANNELS #define UART_EMPTY_INSTANCE 255 /* * priority value */ #define UART_PRIORITY_CONTROL 0 /* * HDLC values */ #define UART_HDLC_FLAG 0x7e #define UART_HDLC_ESCAPE 0x7d #define UART_SABM_FRAME 0x3f #define UART_UA_FRAME 0x73 #define UART_DM_CONTROL_FRAME 0x1f #define UART_DM_DATA_FRAME 0x0f #define UART_DISC_FRAME 0x53 #define UART_UIH_CONTROL_FRAME 0xff #define UART_UIH_DATA_FRAME 0xef /* * UART DLC channel values */ #define UART_DLCI_CONTROL 0 #define UART_DLCI_INVALID 255 #define UART_DLCI_POS 2 /* * mask values for forward parameter */ #define UART_FORWARD_CLD 0x00000001 #define UART_FORWARD_FCON 0x00000002 #define UART_FORWARD_FCOFF 0x00000004 #define UART_FORWARD_MSC 0x00000008 #define UART_FORWARD_SABM 0x00000010 #define UART_FORWARD_DLC_RELEASE 0x00000020 #define UART_FORWARD_PSC 0x00000040 #define UART_FORWARD_RESPONSE 0x00000080 /* * message type values (for UIH command frames) */ #define UART_MSG_TYPE_PSC_C 0x43 #define UART_MSG_TYPE_PSC_R 0x41 #define UART_MSG_TYPE_CLD_C 0xc3 #define UART_MSG_TYPE_CLD_R 0xc1 #define UART_MSG_TYPE_FCON_C 0xa3 #define UART_MSG_TYPE_FCON_R 0xa1 #define UART_MSG_TYPE_FCOFF_C 0x63 #define UART_MSG_TYPE_FCOFF_R 0x61 #define UART_MSG_TYPE_MSC_C 0xe3 #define UART_MSG_TYPE_MSC_R 0xe1 #define UART_MSG_TYPE_NSC_R 0x11 #define UART_MSG_TYPE_SNC_C 0xd3 #define UART_MSG_TYPE_SNC_R 0xd1 /* * message length field values */ #define UART_MSG_LENGTH_POS 1 /* * definitions for service negotiation */ #define UART_NO_SERVICE 0x00 #define UART_NO_VOICE_CODEC 0x00 /* * definitions for modem status commands */ #define UART_NO_BREAK_SIGNAL 0x01 /* * FCS calculation */ #define UART_INITFCS 0xff #define UART_GOODFCS 0xcf /* * offset addresses for frame handling in service KER * (in bytes after flag) */ #define UART_OFFSET_ADDRESS 0 #define UART_OFFSET_CONTROL 1 #define UART_OFFSET_INFO 2 /* * common EA and CR bit */ #define UART_EA 0x01 #define UART_CR 0x02 /* * modem status command (MSC) masks and positions */ #define UART_MSC_BRKLEN_POS 4 #define UART_MSC_DV_MASK 0x80 #define UART_MSC_IC_MASK 0x40 #define UART_MSC_RTR_MASK 0x08 #define UART_MSC_RTC_MASK 0x04 #define UART_MSC_FC_MASK 0x02 #define UART_MSC_BRK_MASK 0x02 #define UART_MSC_BRKLEN_MASK 0xf0 /* * !!! for vsi_t_sleep may be changed??? */ #define ONE_FRAME 0 /* * position and mask definitions */ #define BRK_LEN_POS BRKLEN #define BRK_LEN_MASK 0x1fe00L #define SA_MASK ( 1UL << SA ) #define SB_MASK ( 1UL << SB ) #define X_MASK ( 1UL << X ) #define BRK_MASK ( 1UL << BRK ) #define ESC_MASK ( 1UL << ESC ) #define RI_MASK ( 1UL << RI ) #define DCD_MASK ( 1UL << DCD ) /* * UART intern position and mask definitions */ #define UART_CTS_POS 0 #define UART_RTS_POS 1 #define UART_DSR_POS 2 #define UART_DTR_POS 3 #define UART_DCD_POS 4 #define UART_BRK_RX_POS 5 #define UART_BRK_TX_POS 6 #define UART_ESC_RX_POS 7 #define UART_ESC_TX_POS 8 #define UART_BRKLEN_RX_POS 9 #define UART_BRKLEN_TX_POS 17 #define UART_FC_RX_POS 25 #define UART_FC_TX_POS 26 #define UART_RI_POS 27 #define UART_SA_TX_POS 28 #define UART_SB_TX_POS UART_DCD_POS #define UART_X_TX_POS 29 #define UART_SA_RX_POS UART_DTR_POS #define UART_SB_RX_POS 30 #define UART_X_RX_POS UART_RTS_POS #define UART_CTS_MASK (1UL << UART_CTS_POS) #define UART_RTS_MASK (1UL << UART_RTS_POS) #define UART_DSR_MASK (1UL << UART_DSR_POS) #define UART_DTR_MASK (1UL << UART_DTR_POS) #define UART_DCD_MASK (1UL << UART_DCD_POS) #define UART_BRK_RX_MASK (1UL << UART_BRK_RX_POS) #define UART_BRK_TX_MASK (1UL << UART_BRK_TX_POS) #define UART_ESC_RX_MASK (1UL << UART_ESC_RX_POS) #define UART_ESC_TX_MASK (1UL << UART_ESC_TX_POS) #define UART_BRKLEN_RX_MASK (255UL << UART_BRKLEN_RX_POS) #define UART_BRKLEN_TX_MASK (255UL << UART_BRKLEN_TX_POS) #define UART_FC_RX_MASK (1UL << UART_FC_RX_POS) #define UART_FC_TX_MASK (1UL << UART_FC_TX_POS) #define UART_RI_MASK (1UL << UART_RI_POS) #define UART_SA_TX_MASK (1UL << UART_SA_TX_POS) #define UART_SB_TX_MASK (1UL << UART_SB_TX_POS) #define UART_X_TX_MASK (1UL << UART_X_TX_POS) #define UART_SA_RX_MASK (1UL << UART_SA_RX_POS) #define UART_SB_RX_MASK (1UL << UART_SB_RX_POS) #define UART_X_RX_MASK (1UL << UART_X_RX_POS) /* * values for received primitive bitfield */ #define UART_PARAMETERS_REQ_MASK 0x00000001 #define UART_DTI_REQ_MASK 0x00000004 #define UART_DISABLE_REQ_MASK 0x00000008 #define UART_RING_REQ_MASK 0x00000010 #define UART_DCD_REQ_MASK 0x00000020 #define UART_MUX_START_REQ_MASK 0x00000080 #define UART_MUX_DLC_RELEASE_REQ_MASK 0x00000100 #define UART_MUX_SLEEP_REQ_MASK 0x00000200 #define UART_MUX_WAKEUP_REQ_MASK 0x00000400 #define UART_MUX_CLOSE_REQ_MASK 0x00000800 #define UART_DTI_DATA_REQ_MASK 0x00001000 /* * value for N1 in ready mode */ #define UART_N1_READY_MODE 10 /* * buffer size of RX buffer in multiplexer mode */ #define UART_RX_MUX_BUFFER_SIZE (100 - sizeof(T_desc2)) #ifdef WIN32 #define HISR_STACK_SIZE 512 #endif #ifdef _SIMULATION_ #define UART_TX_SIM_BUFFER_SIZE 136 #endif /* _SIMULATION_ */ /* * Timer handle definitions. */ #define UART_RT_INDEX_T1 0 #define UART_RT_INDEX_T2 1 #define UART_RT_INDEX_T3 2 #define UART_RT_INDEX_TESD 3 /* Escape Sequence Detection */ #define UART_TIMER_PER_INSTANCE 4 #define UART_TIMER_MAX (UART_TIMER_PER_INSTANCE * UART_INSTANCES) /* Dynamic Configuration Numbers */ #define RESET 0 #ifdef DEBUG_COUNTERS #define DUMP_COUNTERS 6 #endif /* DEBUG_COUNTERS */ /* * definition of constants for DTX dynamic buffer management: */ #define UART_DTX_MAX_BUF_SIZE 1000 /* max. 1000 bytes */ #define UART_DTX_MAX_SIZE_MULTIPLIER \ ((USHORT)(UART_DTX_MAX_BUF_SIZE / uart_data->n1)) /*==== GLOBAL VARIABLES ======================================================*/ /*==== TYPES ======================================================*/ /* * UART global typedefs */ typedef UBYTE T_BIT; /* * definition of sending state for service DRX */ typedef enum { UART_DRX_NOT_SENDING, UART_DRX_SENDING, UART_DRX_INVALID } T_DRX_SENDING_STATE; /* * definition of receiving states for service DTX */ typedef enum { UART_DTX_NOT_RECEIVING, UART_DTX_RECEIVING, UART_DTX_INVALID } T_DTX_RECEIVING_STATE; /* * definition of sending/receiving state for service KER */ typedef enum { UART_KER_NOT_SENDING, UART_KER_SENDING, UART_KER_NOT_RECEIVING, UART_KER_RECEIVING, UART_KER_INVALID } T_KER_TRANSMISSION_STATE; /* * definition of timer states for service RT */ typedef enum { UART_RT_STARTED, UART_RT_STOPPED } T_TIMER_STATE; /* * definition of data flow states */ typedef enum { UART_FLOW_DISABLED, UART_FLOW_ENABLED } T_DATA_FLOW_STATE; /* * definition of escape sequence detection (ESD) states */ typedef enum { UART_ESD_NULL, /* ESD not in progress */ UART_ESD_CHAR_1, /* first ESD character has been received ('+') */ UART_ESD_CHAR_2, /* second ESD character... */ /* third ESD character has been received (fourth would be invalid) */ UART_ESD_CHAR_3, /* escape sequence detected, but charcters are not removed from data stream */ UART_ESD_DETECTED } T_ESD_STATE; /* * data structure for each service */ typedef struct /* T_KER_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* !NTRACE */ /* * service specific: UART parameters, normal mode */ #ifdef FF_MULTI_PORT T_GSI_DCB act_dcb; /* device control block */ #else /* FF_MULTI_PORT */ T_baudrate act_br; /* baud rate */ T_bitsPerCharacter act_bpc; /* bit per character */ T_stopBits act_sb; /* stop bits */ T_parity act_par; /* parity */ UBYTE act_xon; /* XOn character */ UBYTE act_xoff; /* XOff character */ T_flowCtrlMode act_fc_rx; /* RX flow control mode */ T_flowCtrlMode act_fc_tx; /* TX flow control mode */ UBYTE act_ec; /* escape character */ USHORT act_gp; /* guard period */ #endif /* FF_MULTI_PORT */ /* * service specific: multiplexer mode */ UBYTE n2; /* maximum number of retransmissions */ /* * service specific: receive part, multiplexer mode */ T_desc2* rx_data_desc; /* data received from peer */ /* state of internal data receiving */ T_KER_TRANSMISSION_STATE receiving_state; /* data to be sent to peer */ T_desc2* tx_data_desc; /* data waiting for access to tx_data_desc */ T_desc2* tx_data_waiting; /* KER currently sending via UART? */ T_KER_TRANSMISSION_STATE sending_state; /* data flow enabled/disabled */ T_DATA_FLOW_STATE data_flow_tx; /* number of running T1 timers */ UBYTE nr_t1; /* number of running T2 timers */ UBYTE nr_t2; /* bitfield of received UART primitives */ ULONG received_prim; /* state of flushing */ UBYTE flush_state; } T_KER_DATA; typedef struct /* T_RX_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* !NTRACE */ #ifndef FF_MULTI_PORT #ifdef WIN32 NU_HISR rx_HISR; #endif /* WIN32 */ #endif /* !FF_MULTI_PORT */ /* * ab hier service spezif. */ #ifdef FF_MULTI_PORT T_desc2* mux_buffer; /* buffer in multiplexer mode */ USHORT mux_pos; /* analyse position in multiplexer mode */ BOOL waiting_for_data; /* waiting for indication of UART driver */ #else /* FF_MULTI_PORT */ T_BIT cldFromIrq; /* indicator whether it is an IRQ call */ T_reInstMode *reInstall; /* reinstallation mode */ UBYTE nsource; /* number of readable fragments */ UBYTE *source[2]; /* addresses of readable fragments */ USHORT *size; /* sizes of readable fragments */ BOOL read_permission; /* permission of ISR to read out data */ #endif /* FF_MULTI_PORT */ ULONG lines; /* status of V.24 lines */ ULONG prev_lines; /* old status of V.24 lines */ UBYTE dlc_instance; /* instance of DLC table */ BOOL escape; /* control escape character received */ UBYTE receive_state; /* state of reception */ UBYTE analyze_state; /* state of frame analysis */ UBYTE fcs; /* calculated fcs */ UBYTE address_field; /* frame address field */ USHORT stored_len; /* length of stored information field */ #ifdef _SIMULATION_ T_desc2* sim_buffer; /* to simulate driver reception buffer */ USHORT sim_pos; /* position to read next byte */ BOOL sim_send; /* send DTI_GETDATA_REQ */ #endif /* _SIMULATION_ */ } T_RX_DATA; typedef struct /* T_TX_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* !NTRACE */ #ifndef FF_MULTI_PORT #ifdef WIN32 NU_HISR tx_HISR; #endif #endif /* !FF_MULTI_PORT */ /* * ab hier service spezif. */ #ifdef FF_MULTI_PORT T_desc2* mux_buffer; /* buffer in multiplexer mode */ USHORT mux_pos; /* transmit position in multiplexer mode */ BOOL waiting_for_space; /* waiting for indication of UART driver */ #ifdef _SIMULATION_ T_desc2* sim_buffer; /* to simulate driver transsion buffer */ USHORT sim_sent; /* already sent bytes */ BOOL sim_waiting; /* waiting for READY */ #endif /* _SIMULATION_ */ #else /* FF_MULTI_PORT */ T_BIT cldFromIrq; /* indicator whether it is an IRQ call */ T_reInstMode *reInstall; /* reinstallation mode */ UBYTE ndest; /* number of writeable fragments */ UBYTE *dest[2]; /* addresses of writeable fragments */ USHORT *size; /* sizes of writeable fragments */ #endif /* FF_MULTI_PORT */ ULONG lines; /* status of V.24 lines */ UBYTE dlc_instance; /* instance of global channel table */ UBYTE p_zero; /* relative zero for priority counter */ UBYTE send_state; /* indicator whether TX is sending */ } T_TX_DATA; typedef struct /* T_DTX_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* !NTRACE */ /* * service specific: */ /* stores generic data descriptor to send */ T_desc2 *to_send_data; /* current size of to send data descriptor */ USHORT cur_desc_size; /* next to write position in current descriptor */ USHORT write_pos; /* multiplier to dynamically adapt cur_desc_size; min. is 3 */ USHORT size_multiplier; /* flow control state (X bit) */ UBYTE st_flow; /* line state SA */ UBYTE st_line_sa; /* line state SB */ UBYTE st_line_sb; /* escape state */ UBYTE st_break_len; /* indicator whether line states changed */ BOOL lines_changed; /* state of internal data receiving */ T_DTX_RECEIVING_STATE receiving_state; /* indicator whether data flow is enabled or disabled */ T_DATA_FLOW_STATE data_flow; #if defined DTILIB /* state of DTILIB connection */ UBYTE dti_dtx_state; #else /* vsi handle for uplink of this entity */ T_HANDLE hComm_DTX_UPLINK; #endif /* dlc instance wich belongs to this DTX instance */ UBYTE dlc_instance; /* enable/disable escape sequence detection */ UBYTE detect_escape; /* escape sequence detection state */ T_ESD_STATE esd_state; /* escape sequence detection guard period time */ T_TIME esd_guard_time; /* escape sequence detection scan position */ USHORT esd_pos; #ifdef _SIMULATION_ char *esd_state_name; #endif } T_DTX_DATA; typedef struct /* T_DRX_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* !NTRACE */ /* * service specific: */ /* DRX currently sending via UART? */ T_DRX_SENDING_STATE sending_state; /* data flow enabled/disabled */ T_DATA_FLOW_STATE data_flow; /* data descriptor received via DTI */ T_desc2* received_data; /* already processed data */ USHORT read_pos; #if defined DTILIB /* state of DTILIB connection */ UBYTE dti_drx_state; #else /* vsi handle for uplink of this entity */ T_HANDLE hComm_DRX_UPLINK; #endif /* dlc instance wich belongs to this DRX instance */ UBYTE dlc_instance; } T_DRX_DATA; typedef struct /* T_RT_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* !NTRACE */ /* * service specific: */ T_TIMER_STATE state_t1; /* state of timer T1 */ T_TIMER_STATE state_t2; /* state of timer T2 */ T_TIMER_STATE state_t3; /* state of timer T3 */ T_TIMER_STATE state_tesd; /* state of timer TESD */ T_TIME t1; /* start value of timer T1 */ T_TIME t2; /* start value of timer T2 */ T_TIME t3; /* start value of timer T3 */ T_TIME tesd; /* start value of timer TESD */ } T_RT_DATA; /* * global channel structure */ typedef struct /* T_DLC */ { T_DRX_DATA *drx; /* instance of appropriate DRX service */ T_DTX_DATA *dtx; /* instance of appropriate DTX service */ UBYTE dlci; /* Data Link Connection Identifier */ UBYTE priority; /* priority of dlc */ #if defined DTILIB UBYTE dti_state; /* state of DTILIB connection */ #else T_HANDLE hCommUPLINK; /* VSI connection handle */ #endif UBYTE connection_state; /* state of DLC connection */ /* * information for service TX */ T_desc2* transmit_data; /* data to transmit to the TE */ USHORT transmit_pos; /* start position to transmit */ UBYTE p_counter; /* priority counter to dermine send interval */ /* * information for service RX */ T_desc2* receive_data; /* descriptor to write */ USHORT receive_pos; /* start position to write */ USHORT receive_size; /* size of write descriptor */ UBYTE receive_process; /* state of receive process */ /* * information for service KER */ T_desc2* last_command; /* last sent command frame */ T_desc2* next_command; /* next command frames to send */ UBYTE retransmissions; /* number of retransmissions of command frame */ ULONG lines; /* line states of DLC */ UBYTE service; UBYTE codec; ULONG received_prim; /* bitfield of received UART primitives */ BOOL flushed; /* indicator whether DLC is flushed */ } T_DLC; /* * summery of all service */ typedef struct /* T_UART_DATA */ { /* * UART layer parameters */ UBYTE version; /* * Service data structures * * Services with multiple incarnations require an array of structures * named xxx_base[] with xxx = service abbrevation, and additionally a * pointer named *xxx, which will be accessed instead of xxx_base. * * Services with only one incarnation just have to declare one structure * named xxx (no need for xxx_base[] and *xxx). * * The differentiation between the two access possibilites is made with * the defines of the service names above (UART_SERVICE_XXX). */ T_KER_DATA ker; T_RX_DATA rx; T_TX_DATA tx; T_DRX_DATA drx_base[UART_MAX_NUMBER_OF_CHANNELS]; T_DRX_DATA *drx; T_DTX_DATA dtx_base[UART_MAX_NUMBER_OF_CHANNELS]; T_DTX_DATA *dtx; T_RT_DATA rt; /* * global UART variables */ UBYTE device; /* index of the UART channel for this instance */ USHORT n1; /* max. length of a frame in multiplexer mode */ UBYTE xon; /* XON character for software flow control */ UBYTE xoff; /* XOFF character for software flow control */ T_DLC dlc_table[UART_MAX_NUMBER_OF_CHANNELS + 1]; /* channel table */ UBYTE dlc_instance[64]; /* lookup table for for DLC instances */ USHORT timer_t1_index; /* Index of timer T1 in this instance */ USHORT timer_t2_index; /* Index of timer T2 in this instance */ USHORT timer_t3_index; /* Index of timer T3 in this instance */ USHORT timer_tesd_index;/* Index of timer TESD in this instance */ UBYTE act_ec; /* Escape Character */ USHORT act_gp; /* Guard Period */ #ifdef WIN32 UBYTE HISR_stack[HISR_STACK_SIZE]; #endif /* * global UART constants */ UBYTE* fcstab; /* lookup table for FCS calculation */ } T_UART_DATA; #ifndef DTILIB /* * global table which maps an unique c_id to * pointers of DRX/DTX instances which serve this channel */ typedef struct /* T_UART_CID_TABLE */ { UBYTE c_id; /* channel id */ T_UART_DATA* uart_data; /* pointer to UART data for this channel */ T_DRX_DATA* drx; /* pointer to DRX service for this channel */ T_DTX_DATA* dtx; /* pointer to DTX service for this channel */ } T_UART_CID_TABLE; #endif /* DTILIB */ /*==== EXPORT =====================================================*/ /* * Entity data base */ #ifdef UART_PEI_C /* * FCS lookup table */ static UBYTE uart_fcstable_base[256] = { /* reversed, 8-bit, poly=0x07 */ 0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B, 0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67, 0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43, 0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F, 0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B, 0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17, 0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33, 0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F, 0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B, 0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87, 0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3, 0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF, 0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB, 0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7, 0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3, 0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF }; T_UART_DATA uart_data_base[ UART_INSTANCES ], *uart_data; #ifndef DTILIB /* * global table which maps an unique c_id to the instance * number of the UART instance which serves this channel */ T_UART_CID_TABLE uart_cid_table[ UART_INSTANCES * \ UART_MAX_NUMBER_OF_CHANNELS ]; #endif /* !DTILIB */ #else /* UART_PEI_C */ EXTERN UBYTE uart_fcstable_base[256]; EXTERN T_UART_DATA uart_data_base[], *uart_data; #ifndef DTILIB EXTERN T_UART_CID_TABLE uart_cid_table[]; #endif /* !UART_DTILIB */ /* * function prototypes */ #ifdef FF_MULTI_PORT EXTERN void pei_uart_driver_signal (T_DRV_SIGNAL *SigPtr); #endif /* FF_MULTI_PORT */ #endif /* UART_PEI_C */ #define ENTITY_DATA uart_data /* * prefix service functions */ #define ker_init _ENTITY_PREFIXED(ker_init) #define rx_init _ENTITY_PREFIXED(rx_init) #define tx_init _ENTITY_PREFIXED(tx_init) #define drx_init _ENTITY_PREFIXED(drx_init) #define dtx_init _ENTITY_PREFIXED(dtx_init) #define rt_init _ENTITY_PREFIXED(rt_init) #define rx_read_data _ENTITY_PREFIXED(rx_read_data) #define tx_write_data _ENTITY_PREFIXED(tx_write_data) #define tx_create_hdlc_frame _ENTITY_PREFIXED(tx_create_hdlc_frame) #if defined (DTILIB) #ifdef _SIMULATION_ #define sig_dti_ker_connection_opened_ind \ _ENTITY_PREFIXED(sig_dti_ker_connection_opened_ind) #define sig_dti_ker_connection_closed_ind \ _ENTITY_PREFIXED(sig_dti_ker_connection_closed_ind) #define sig_dti_drx_data_received_ind \ _ENTITY_PREFIXED(sig_dti_drx_data_received_ind) #define sig_dti_dtx_tx_buffer_full_ind \ _ENTITY_PREFIXED(sig_dti_dtx_tx_buffer_full_ind) #define sig_dti_dtx_tx_buffer_ready_ind \ _ENTITY_PREFIXED(sig_dti_dtx_tx_buffer_ready_ind) #ifdef DTI2 /* * for the driver-simulation dti channel, the c_id parameter * is already in use for transmission of control information * (which was formerly stored in the tui .. ;), unfortunately. * NOTE: not yet implemented!!! */ #define UART_TEST_C_ID_1 0 #define UART_TEST_C_ID_2 1 /* * these are __in no way__ real link_ids. Instead, the variable is used for * communication between the entity and the test environment, here. In * previous versions, the tui was used for this, but since DTI2 primitives do * not contain such a parameter any more, the dirty work has been passed on to * the link_id .. * * This is directly taken from */ #define LINK_READDATA_PORT_1 0 /* misused link_id for read_data call */ #define LINK_DISABLE_PORT_1 1 /* misused link_id for disable call */ #define LINK_ENABLE_PORT_1 2 /* misused link_id for enable call */ #define LINK_WRITEDATA_PORT_1 3 /* misused link_id for write_data call */ #define LINK_READDATA_PORT_2 10 /* misused link_id for read_data call */ #define LINK_DISABLE_PORT_2 11 /* misused link_id for disable call */ #define LINK_ENABLE_PORT_2 12 /* misused link_id for enable call */ #define LINK_WRITEDATA_PORT_2 13 /* misused link_id for write_data call */ #define LINK_UART_OUT_PORT_1 0 /* misused link_id of UART_OUT test interface */ #define LINK_UART_OUT_PORT_2 10 /* misused link_id of UART_OUT test interface */ #define LINK_PORT_THRESHOLD 9 /* to be able to distinguish between port 1 and port2 */ #endif /* DTI2 */ #endif /* _SIMULATION_ */ #endif /* DTILIB */ /* * Communication handles (see also UART_PEI.C) */ #ifdef UART_PEI_C T_HANDLE hCommMMI = VSI_ERROR; T_HANDLE hCommUART = VSI_ERROR; T_HANDLE UART_handle; /* * make the pei_create function unique */ #define pei_create _ENTITY_PREFIXED(pei_create) #else /* UART_PEI_C */ EXTERN T_HANDLE hCommMMI; EXTERN T_HANDLE hCommUART; EXTERN T_HANDLE UART_handle; /* * functions for switching of entities/instances */ #ifndef DTILIB EXTERN UBYTE pei_select_instances( UBYTE incoming_c_id ); #endif #endif /* UART_PEI_C */ #ifdef DTILIB EXTERN DTI_HANDLE uart_hDTI; #endif #endif /* !UART_H */