diff src/g23m-fad/t30/t30.h @ 1:fa8dc04885d8

src/g23m-*: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:25:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/t30/t30.h	Fri Oct 16 06:25:50 2020 +0000
@@ -0,0 +1,651 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  GSM-F&D (8411)
+|  Modul   :  T30
++----------------------------------------------------------------------------- 
+|  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 T30
++----------------------------------------------------------------------------- 
+*/ 
+
+
+#ifndef T30_H
+#define T30_H
+
+#define SHARED_FAX_DATA_RAM
+
+#define KER_DEBUG_BCS
+#undef KER_DEBUG_MSG
+#undef SW_FLOW_CTRL
+
+/*
+ * instance management
+ */
+#define GET_INSTANCE(p) &t30_data_base[0]
+#define T30_INSTANCES 1
+
+/*
+ * Constants
+ */
+
+#define HDLC_FLAG  0x7E
+
+/* 
+ * number of HDLC_FLAGs between HDLC fields
+ */
+#ifdef _SIMULATION_
+#define HDLC_FLAGS 1
+#else
+#define HDLC_FLAGS 3
+#endif
+
+#define HDLC_ADDR  0xFF
+
+/****** Transparent Data Commands T.32 ******/
+
+/* DLE transparency */
+
+#define TDC_DLE 0x10 /* substitute one 0x10 pattern */
+#define TDC_SUB 0x1a /* substitute two 0x10 patterns */
+
+/* transmitter commands */
+
+#define TDC_ETX 0x03 /* acknowledge <CAN> */
+#define TDC_PRI 0x21 /* request Procedure Interrupt */
+#define TDC_MPS 0x2c /* end of page, more to follow */
+#define TDC_EOP 0x2e /* end of document and session */
+#define TDC_EOM 0x3b /* end of document */
+#define TDC_BCR 0x3f /* check Buffer Credit */
+
+/* receiver commands */
+
+#define TDC_SOH 0x41 /* <SOH> in packet data */
+#define TDC_ETB 0x57 /* <ETB> in packet data */
+#define TDC_OVR 0x4f /* overrun error marker */
+
+#ifdef SW_FLOW_CTRL
+#define TDC_DC1 0x11 /* XON */
+#endif
+
+#define TDC_DC2 0x12 /* receive buffer status: buffer is empty */
+#ifdef SW_FLOW_CTRL
+#define TDC_DC3 0x13 /* XOFF */
+#endif
+
+#define TDC_CAN 0x18 /* Requests DCE/DTE to stop delivering Phase C data */
+
+#define MSG_SIZE_BITS 2880   /* value taken from former psa_t30.h */
+
+/*
+ * information for dti library
+ */
+#define T30_DTI_UP_INTERFACE      0
+#define T30_DTI_UP_CHANNEL        0
+#define T30_DTI_UP_DEF_INSTANCE   0
+#define T30_DTI_UPLINK_QUEUE_SIZE 0
+
+#define READY_UPLI_PAGE           1
+#define READY_UPLI_SDU            2
+
+#define BCS_FRM_FILLED            0
+#define BCS_FRM_FILLING           1
+#define BCS_FRM_FULL              2
+#define BCS_FRM_SIZE              300
+#define BCS_FRM_SIZE_BITS         (BCS_FRM_SIZE << 3)
+
+#define CCD_OK                    0
+#define CCD_ERR                   1
+
+#define CHK_OK                    0
+#define CHK_FCS_ERR               1
+#define CHK_FIN_ERR               2
+
+#define CTL_C0                    0xC0
+#define CTL_C8                    0xC8
+
+#define ERR_BUF_FULL              1
+#define ERR_CCD_DEC               2
+/*
+#define ERR_CCD_ENC               3
+*/
+#define ERR_FCS                   4
+#define ERR_FINAL                 5
+#define ERR_FRAME_NO_FLAG         6
+#define ERR_FRAME_TOO_MANY_FRAMES 7
+
+#define FINAL_NO                  0
+#define FINAL_YES                 1
+
+#define FMOD_IDLE                 0
+#define FMOD_SND                  1
+#define FMOD_RCV                  2
+#define FMOD_POLL                 3
+
+#define FRAMES_MAX                10
+
+#define FRM_OK                    0
+#define FRM_ERR_NO_FLAG           1
+#define FRM_ERR_TOO_MANY_FRAMES   2
+
+#define REPORT_SIZE               128
+#define REPORT_SIZE_BITS          (REPORT_SIZE << 3)
+
+#define RTC_NO                    0
+#define RTC_YES                   1
+
+/*
+ * Bitoffset for encoding/decoding
+ */
+#define ENCODE_OFFSET             0
+
+#define T30_HEADER_LEN_BYT        2          /* Address byte and control byte */
+#define T30_TRAILER_LEN_BYT       2          /* FCS */
+
+#define BIT_STREAM_LEN_BYT        ((MAX_BITSTREAM_LEN_T30 + 7) / 8)
+                                  /* No. of bytes, rounded to byte boundary */
+#define HDLC_BUF_SIZE              (2 * sizeof(USHORT) + T30_HEADER_LEN_BYT + BIT_STREAM_LEN_BYT + T30_TRAILER_LEN_BYT)
+                                  /* SDU header + T30 Header + HDLC Info + Trailer*/
+#define HDLC_BUF_SIZE_LNG          ((HDLC_BUF_SIZE + sizeof (ULONG) - 1) / sizeof (ULONG))
+                                  /* No. of ULONGs, rounded to long boundary */
+
+/*
+ * Timer
+ */
+#define T1 0      /* Timer T1 */
+#define T2 1      /* Timer T2 */
+#define T4 2      /* Timer T4 */
+
+/*
+ * Dynamic Configuration Numbers
+ */
+#define TIMER_SET        1
+#define TIMER_RESET      2
+#define TIMER_SPEED_UP   3
+#define TIMER_SLOW_DOWN  4
+#define TIMER_SUPPRESS   5
+
+/*
+ * State index for the entity processes
+ */
+#define KER        ker.
+#define MUX        mux.
+
+/*
+ * States of the entity processes
+ *
+ * Process KER
+ */
+enum
+{
+  T30_NULL,
+  T30_DCN,
+  T30_IDLE,
+  T30_RCV_CFR,
+  T30_RCV_DAT,
+  T30_RCV_DATW,
+  T30_RCV_DCN,
+  T30_RCV_DCS,
+  T30_RCV_DIS,
+  T30_RCV_MCF,
+  T30_RCV_MSG,
+  T30_RCV_MSGW,
+  T30_RCV_PI,
+  T30_RCV_PST,
+  T30_RCV_PSTW,
+  T30_RCV_RDY,
+  T30_RCV_RDYF,
+  T30_RCV_RDYW,
+  T30_RCV_RT,
+  T30_RCV_RT2,
+  T30_RCV_T2,
+  T30_RCV_TCF,
+  T30_SND_CAP,
+  T30_SND_CFR,
+  T30_SND_DAT,
+  T30_SND_DATF,
+  T30_SND_DCN,
+  T30_SND_DCN1,
+  T30_SND_DCS,
+  T30_SND_DTC,
+  T30_SND_MCF,
+  T30_SND_MSG,
+  T30_SND_PI,
+  T30_SND_PRI,
+  T30_SND_PST,
+  T30_SND_PSTW,
+  T30_SND_RDY,
+  T30_SND_RDYW,
+  T30_SND_SGN,
+  T30_SND_TCF,
+  T30_ACTIVATE,
+  T30_DEACTIVATE
+};
+
+/*
+ * Process MUX
+ */
+#define T30_MUX_OFF               0
+#define T30_MUX_BCS               1
+#define T30_MUX_MSG               2
+
+/*==== TYPES ======================================================*/
+
+/*
+ * entity global data
+ */
+typedef struct
+{
+  UBYTE state;
+#ifndef NTRACE
+  char *state_name;
+#endif
+} T_STATE;
+
+typedef struct
+{
+  UBYTE state;
+#ifndef NTRACE
+  char *state_name;
+#endif
+  UBYTE mode;
+} T_MUX;
+
+typedef struct
+{
+  USHORT beg, end, len;
+} T_T30_FRAME;
+
+typedef struct
+{
+  T_STATE ker;
+  T_MUX mux;
+  UBYTE  dti_state; /* state variable for DTI library */
+  UBYTE  threshold;
+  BOOL   rate_modified;
+  UBYTE  repeat;
+  UBYTE  sgn_ind;
+  UBYTE  sgn_req;
+  UBYTE  res;
+  UBYTE  prev;
+  UBYTE  fmod;
+  UBYTE  hdlc_report;
+  UBYTE  dir;
+  UBYTE  data_cnf;
+  UBYTE  preamble_ind;
+  UBYTE  bitorder;
+  UBYTE  stuff_bits;
+  UBYTE  stuff_ones;
+  BOOL   TDC_doli_pending;
+  BOOL   TDC_upli_pending;
+  BOOL   dti_data_ind_final;
+
+  USHORT rtc_zero;
+  USHORT  rtc_eol;
+  USHORT eol;
+  USHORT trans_rate;
+  USHORT frames_per_prim;
+
+  T_T30_FRAME frm[FRAMES_MAX];
+    
+  ULONG  bcs_frm[(BCS_FRM_SIZE / sizeof (ULONG)) + 1];
+  ULONG  BCI_stream[HDLC_BUF_SIZE_LNG];
+
+  ULONG link_id;
+
+  T_hdlc_info    hdlc_rcv;
+  T_hdlc_info    hdlc_snd;
+
+  T_FAD_DATA_REQ *fad_data_req;
+
+  T_DTI2_DATA_IND *dti_data_ind;
+  T_DTI2_DATA_IND *dti_data_ind_empty;
+
+  UBYTE   *dti_data_req_ptr;
+  T_desc2 *dti_data_req_desc;
+
+#ifdef _SIMULATION_ /* test_mode */
+  USHORT  test_mode;
+#endif
+} T_T30_DATA;
+
+/*==== EXPORT =====================================================*/
+
+#define T1_INDEX  0
+#define T2_INDEX  1
+#define T4_INDEX  2
+
+/*
+ * instance data base
+ */
+#ifdef T30_PEI_C
+GLOBAL T_T30_DATA *t30_data;
+#else
+EXTERN T_T30_DATA *t30_data;
+#endif
+
+#ifdef SHARED_FAX_DATA_RAM
+
+  /*lint -e526 : not defined */
+  EXTERN UBYTE rlp_data_base[];
+  #define t30_data_base ((T_T30_DATA*)rlp_data_base)
+
+  EXTERN ULONG rlp_data_magic_num;
+  #define t30_data_magic_num rlp_data_magic_num
+
+#else
+
+  #ifdef T30_PEI_C
+  GLOBAL T_T30_DATA t30_data_base[T30_INSTANCES];
+  GLOBAL ULONG t30_data_magic_num;
+  #else
+  EXTERN T_T30_DATA t30_data_base[];
+  EXTERN ULONG t30_data_magic_num;
+  #endif
+
+#endif /* !SHARED_FAX_DATA_RAM */
+
+#define T30_DATA_MAGIC_NUM (('T'<<24) + ('3'<<16) + ('0'<<8))   /* "T30",NUL */
+
+#define ENTITY_DATA t30_data
+
+/*---------------------------------------------------------------------
+ *  Prototypes
+ *
+ *  T30 KERNEL
+ *
+ *  KERNEL primitive processing
+ */
+
+EXTERN void ker_fad_activate_cnf    (T_FAD_ACTIVATE_CNF   *fad_activate_cnf  );
+EXTERN void ker_fad_data_cnf        (T_FAD_DATA_CNF       *fad_data_cnf      );
+EXTERN void ker_fad_deactivate_cnf  (T_FAD_DEACTIVATE_CNF *fad_deactivate_cnf);
+EXTERN void ker_fad_error_ind       (T_FAD_ERROR_IND      *fad_error_ind     );
+EXTERN void ker_fad_rcv_tcf_cnf     (T_FAD_RCV_TCF_CNF    *fad_rcv_tcf_cnf   );
+EXTERN void ker_fad_ready_ind       (T_FAD_READY_IND      *fad_ready_ind     );
+EXTERN void ker_fad_snd_tcf_cnf     (T_FAD_SND_TCF_CNF    *fad_snd_tcf_cnf   );
+
+EXTERN void ker_t30_activate_req    (T_T30_ACTIVATE_REQ   *t30_activate_req  );
+EXTERN void ker_t30_cap_req         (T_T30_CAP_REQ        *t30_cap_req       );
+EXTERN void ker_t30_config_req      (T_T30_CONFIG_REQ     *t30_config_req    );
+EXTERN void ker_t30_deactivate_req  (T_T30_DEACTIVATE_REQ *t30_deactivate_req);
+EXTERN void ker_t30_modify_req      (T_T30_MODIFY_REQ     *t30_modify_req    );
+EXTERN void ker_t30_sgn_req         (T_T30_SGN_REQ        *t30_sgn_req       );
+EXTERN void ker_t30_dti_req         (T_T30_DTI_REQ        *t30_dti_req       );
+
+#ifdef OPTION_MULTITHREAD
+#define act_on_sgn_req        _ENTITY_PREFIXED(act_on_sgn_req)
+#define sig_bcs_ker_bdat_ind  _ENTITY_PREFIXED(sig_bcs_ker_bdat_ind)
+#define sig_bcs_ker_err_ind   _ENTITY_PREFIXED(sig_bcs_ker_err_ind )
+#define sig_msg_ker_mdat_ind  _ENTITY_PREFIXED(sig_msg_ker_mdat_ind)
+#endif /* OPTION_MULTITHREAD */
+
+EXTERN void act_on_sgn_req(void);
+EXTERN void sig_bcs_ker_bdat_ind(void);
+EXTERN void sig_bcs_ker_err_ind (UBYTE cause);
+EXTERN void sig_msg_ker_mdat_ind(T_FAD_DATA_IND *fad_data_ind);
+
+#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_ker_tx_buffer_full_ind                    \
+        _ENTITY_PREFIXED(sig_dti_ker_tx_buffer_full_ind   )
+#define sig_dti_ker_tx_buffer_ready_ind                   \
+        _ENTITY_PREFIXED(sig_dti_ker_tx_buffer_ready_ind  )
+#define sig_dti_ker_data_received_ind                     \
+        _ENTITY_PREFIXED(sig_dti_ker_data_received_ind    )
+
+/*
+ * wrapping functions for dtilib primitives
+ */
+
+/*
+ * these functions are called by pei_dti_callback
+ */
+
+EXTERN void sig_dti_ker_connection_opened_ind(void);
+EXTERN void sig_dti_ker_connection_closed_ind(void);
+EXTERN void sig_dti_ker_tx_buffer_full_ind(void);
+EXTERN void sig_dti_ker_tx_buffer_ready_ind(void);
+EXTERN void sig_dti_ker_data_received_ind(T_DTI2_DATA_REQ *dti_data_req);
+/*
+ *  KERNEL procedures
+ */
+#ifdef OPTION_MULTITHREAD
+
+  #define ker_check_rtc      _ENTITY_PREFIXED(ker_check_rtc    )
+  #define ker_check_rtc      _ENTITY_PREFIXED(ker_check_rtc    )
+  #define ker_fill_dcs_info  _ENTITY_PREFIXED(ker_fill_dcs_info)
+  #define ker_fill_dis_info  _ENTITY_PREFIXED(ker_fill_dis_info)
+  #define ker_fill_dtc_info  _ENTITY_PREFIXED(ker_fill_dtc_info)
+  #define ker_init           _ENTITY_PREFIXED(ker_init         )
+  #define ker_res_sub        _ENTITY_PREFIXED(ker_res_sub      )
+  #define ker_send_dcs       _ENTITY_PREFIXED(ker_send_dcs     )
+  #define ker_send_dis       _ENTITY_PREFIXED(ker_send_dis     )
+  #define ker_send_dtc       _ENTITY_PREFIXED(ker_send_dtc     )
+  #define ker_send_err       _ENTITY_PREFIXED(ker_send_err     )
+
+  #define snd_error_ind      _ENTITY_PREFIXED(snd_error_ind    )
+  #define snd_t30_sgn_ind    _ENTITY_PREFIXED(snd_t30_sgn_ind  )
+  #define snd_t30_sgn_ind    _ENTITY_PREFIXED(snd_t30_sgn_ind  )
+
+#if defined _SIMULATION_ || defined KER_DEBUG_BCS || defined KER_DEBUG_MSG
+  #define ker_debug _ENTITY_PREFIXED(ker_debug)
+#endif
+
+  #define TDCcompress          _ENTITY_PREFIXED(TDCcompress)
+  #define prepare_dti_data_ind _ENTITY_PREFIXED(prepare_dti_data_ind)
+  #define snd_dti_data_ind     _ENTITY_PREFIXED(snd_dti_data_ind)
+  #define snd_t30_phase_ind    _ENTITY_PREFIXED(snd_t30_phase_ind)
+  #define dti_connect_open     _ENTITY_PREFIXED(dti_connect_open)
+  #define dti_connect_setup    _ENTITY_PREFIXED(dti_connect_setup)
+  #define dti_connect_close    _ENTITY_PREFIXED(dti_connect_close)
+  #define dti_disconnect       _ENTITY_PREFIXED(dti_disconnect)
+  #define snd_t30_dti_cnf      _ENTITY_PREFIXED(snd_t30_dti_cnf)
+  #define snd_dti_ready_ind    _ENTITY_PREFIXED(snd_dti_ready_ind)
+
+#endif
+
+EXTERN UBYTE ker_check_rtc     (T_FAD_DATA_IND *fad_data_ind);
+EXTERN void  ker_fill_dcs_info (T_BCS_DCS *bcs_dcs);
+EXTERN void  ker_fill_dis_info (T_BCS_DIS *bcs_dis);
+EXTERN void  ker_fill_dtc_info (T_BCS_DTC *bcs_dtc);
+EXTERN void  ker_init          (T_T30_DATA *t30_data);
+EXTERN void  ker_send_dcs      (T_T30_CAP_REQ *t30_cap_req);
+EXTERN void  ker_send_dis      (void);
+EXTERN void  ker_send_dtc      (T_T30_CAP_REQ *t30_cap_req);
+EXTERN void  ker_send_err      (USHORT cause);
+
+EXTERN void  snd_complete_ind  (UBYTE cmpl);
+EXTERN void  snd_error_ind     (USHORT cause);
+EXTERN void  snd_t30_sgn_ind   (UBYTE sgn);
+
+#if defined _SIMULATION_ || defined KER_DEBUG_BCS || defined KER_DEBUG_MSG
+EXTERN void  ker_debug(CHAR *header, UBYTE *buf, USHORT len);
+#endif
+
+EXTERN UBYTE TDCcompress(T_desc2 *desc, T_sdu *sdu);
+EXTERN void  prepare_dti_data_ind(T_FAD_DATA_IND *fad_data_ind);
+EXTERN void  snd_dti_data_ind(T_DTI2_DATA_IND **dti_data_ind);
+EXTERN void  snd_t30_phase_ind(UBYTE phase);
+EXTERN void  dti_connect_setup(T_T30_DTI_REQ *t30_dti_req);
+EXTERN void  dti_connect_open();
+EXTERN void  dti_connect_close();
+EXTERN void  dti_disconnect();
+EXTERN void  snd_t30_dti_cnf(UBYTE dti_conn);
+EXTERN void  snd_dti_ready_ind();
+
+
+/*---------------------------------------------------------------------
+ *  T30 BCS FORMATTER
+ *
+ *  BCS primitive processing
+ */
+
+/*
+ *  BCS signal processing
+ */
+#ifdef OPTION_MULTITHREAD
+  #define sig_ker_bcs_bdat_req _ENTITY_PREFIXED(sig_ker_bcs_bdat_req)
+  #define sig_mux_bcs_bcs_ind  _ENTITY_PREFIXED(sig_mux_bcs_bcs_ind )
+#endif
+
+EXTERN void sig_ker_bcs_bdat_req (UBYTE final);
+EXTERN void sig_mux_bcs_bcs_ind  (T_FAD_DATA_IND *fad_data_ind);
+
+/*
+ *  BCS procedures
+ */
+
+#ifdef OPTION_MULTITHREAD
+  #define bcs_bcs_decode   _ENTITY_PREFIXED(bcs_bcs_decode  )
+  #define bcs_bcs_encode   _ENTITY_PREFIXED(bcs_bcs_encode  )
+  #define bcs_fill_bcs_frm _ENTITY_PREFIXED(bcs_fill_bcs_frm)
+  #define bcs_init         _ENTITY_PREFIXED(bcs_init        )
+#endif
+
+EXTERN void  bcs_bcs_decode   (void);
+EXTERN void  bcs_bcs_encode   (UBYTE ctl, UBYTE final);
+EXTERN UBYTE bcs_fill_bcs_frm (T_FAD_DATA_IND *fad_data_ind);
+EXTERN void  bcs_init         (T_T30_DATA *);
+
+/*---------------------------------------------------------------------
+ *  T30 MSG FORMATTER
+ *
+ *  MSG primitive processing
+ */
+
+/*
+ *  MSG signal processing
+ */
+#ifdef OPTION_MULTITHREAD
+  #define sig_ker_msg_mdat_req _ENTITY_PREFIXED(sig_ker_msg_mdat_req)
+  #define sig_mux_msg_msg_ind  _ENTITY_PREFIXED(sig_mux_msg_msg_ind)
+#endif
+
+EXTERN void sig_ker_msg_mdat_req (T_FAD_DATA_REQ *fad_data_req);
+EXTERN void sig_mux_msg_msg_ind  (T_FAD_DATA_IND *fad_data_ind);
+
+
+/*---------------------------------------------------------------------
+ *  T30 MULTIPLEXER
+ *
+ *  MUX primitive processing
+ */
+
+EXTERN void mux_fad_data_ind (T_FAD_DATA_IND *fad_data_ind);
+EXTERN void mux_fad_mux_ind  (T_FAD_MUX_IND  *fad_mux_ind);
+
+/*
+ *  MUX signal processing
+ */
+#ifdef OPTION_MULTITHREAD
+  #define sig_bcs_mux_bcs_req  _ENTITY_PREFIXED(sig_bcs_mux_bcs_req)
+  #define sig_ker_mux_mux_req  _ENTITY_PREFIXED(sig_ker_mux_mux_req)
+  #define sig_msg_mux_msg_req  _ENTITY_PREFIXED(sig_msg_mux_msg_req)
+#endif
+
+EXTERN void sig_bcs_mux_bcs_req (T_FAD_DATA_REQ *fad_data_req);
+EXTERN void sig_ker_mux_mux_req (void);
+EXTERN void sig_msg_mux_msg_req (T_FAD_DATA_REQ *fad_data_req);
+
+#define MEMCOPSIZ(d,s) memcpy(d, s, sizeof(s))
+
+/*---------------------------------------------------------------------
+ *  timer
+ */
+
+#define TIMERSTART(i,v) vsi_t_start (VSI_CALLER i,v);
+
+#define TIMERSTATUS(i,v) vsi_t_status (VSI_CALLER i,v);
+
+#define TIMERSTOP(i) {vsi_t_stop (VSI_CALLER i); \
+                      t30_data->data_cnf = FALSE;};
+
+/*
+ * Communication handles
+ */
+#ifdef OPTION_MULTITHREAD
+  #define hCommFAD _ENTITY_PREFIXED(hCommFAD)
+  #define hCommMMI _ENTITY_PREFIXED(hCommMMI)
+#endif
+
+EXTERN DTI_HANDLE t30_hDTI;     /* DTI connection handle for DTI library      */
+
+#ifdef T30_PEI_C
+GLOBAL T_HANDLE t30_handle;
+GLOBAL T_HANDLE hCommFAD = VSI_ERROR;    /* FAD Communication */
+GLOBAL T_HANDLE hCommMMI = VSI_ERROR;    /* MMI Communication */
+#else
+EXTERN T_HANDLE t30_handle;
+EXTERN T_HANDLE hCommFAD;
+EXTERN T_HANDLE hCommMMI;
+#endif
+
+GLOBAL void t30_timeout (USHORT index);
+
+/*
+ * entity common buffer for the decoded air interface message
+ */
+#ifdef OPTION_MULTITHREAD
+  #define _decodedMsg _ENTITY_PREFIXED(_decodedMsg)
+#endif
+
+#ifdef T30_PEI_C
+
+GLOBAL const UBYTE BIT_MIRROR[] =
+{
+  0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,
+  0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0,
+  0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,
+  0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8,
+  0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,
+  0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4,
+  0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,
+  0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc,
+  0x02,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2,
+  0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2,
+  0x0a,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea,
+  0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa,
+  0x06,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6,
+  0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6,
+  0x0e,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee,
+  0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe,
+  0x01,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1,
+  0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1,
+  0x09,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9,
+  0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9,
+  0x05,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,
+  0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5,
+  0x0d,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,
+  0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd,
+  0x03,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3,
+  0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3,
+  0x0b,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb,
+  0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb,
+  0x07,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7,
+  0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7,
+  0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,
+  0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff
+};
+
+GLOBAL UBYTE _decodedMsg [MAX_MSTRUCT_LEN_T30];
+
+#else
+
+EXTERN const UBYTE BIT_MIRROR[];
+EXTERN UBYTE _decodedMsg[];
+
+#endif
+
+#endif /* T30_H */