view src/g23m-fad/t30/t30.h @ 347:78d1df0b8487

aci2: AT%CBC and AT@CHARGE implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 16 Dec 2017 00:37:43 +0000
parents 90eb61ecd093
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  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 */