FreeCalypso > hg > freecalypso-citrine
view g23m-aci/aci/cmh_t30f.c @ 40:b56928f8c001
doc/Firmware_Architecture: stale links to docs updated
to new FTP and web locations
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 07 May 2017 16:20:07 +0000 |
parents | 75a11d740a02 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6147) | Modul : CMH_T30F +----------------------------------------------------------------------------- | 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 : This module defines the functions used by the command | handler for L2R. +----------------------------------------------------------------------------- */ #if defined (DTI) || defined (FF_FAX) #ifndef CMH_T30F_C #define CMH_T30F_C #endif #include "aci_all.h" /*==== INCLUDES ===================================================*/ #include "aci_cmh.h" #include "ati_cmd.h" #include "aci_cmd.h" #include "l4_tim.h" #ifdef FAX_AND_DATA #include "aci_fd.h" #endif /* of #ifdef FAX_AND_DATA */ #include "dti.h" #include "dti_conn_mng.h" #include "aci.h" #include "psa.h" #include "psa_t30.h" #include "psa_cc.h" #include "cmh.h" #include "cmh_t30.h" #include "cmh_ra.h" /*==== CONSTANTS ==================================================*/ #define BIT_SET (0x01) /* bit is set */ #define BIT_CLR (0x00) /* bit is cleared */ #define BIT_NOT_PRES (0xFF) /* bit is not present */ /*==== TYPES ======================================================*/ /*==== EXPORT =====================================================*/ /*==== VARIABLES ==================================================*/ /*==== FUNCTIONS ==================================================*/ /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_Chn2BitRate | +-------------------------------------------------------------------+ PURPOSE : convert channel rate into bit rate */ GLOBAL T_ACI_F_BR cmhT30_Chn2BitRate ( void ) { switch( ccShrdPrm.chMod ) { case( MNCC_CHM_DATA_14_4 ): return( F_BR_14400 ); case( MNCC_CHM_DATA_9_6 ): return( F_BR_9600 ); case( MNCC_CHM_DATA_4_8 ): return( F_BR_4800 ); case( MNCC_CHM_DATA_2_4 ): return( F_BR_2400 ); default: TRACE_EVENT( "UNEXP CHN MODE IN CTB" ); return( F_BR_NotPresent ); } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_SelChnRate | +-------------------------------------------------------------------+ PURPOSE : select channel rate */ GLOBAL USHORT cmhT30_SelChnRate ( void ) { switch( ccShrdPrm.chMod ) { case( MNCC_CHM_DATA_14_4 ): return( 14400 ); case( MNCC_CHM_DATA_9_6 ): return( 9600 ); case( MNCC_CHM_DATA_4_8 ): return( 4800 ); case( MNCC_CHM_DATA_2_4 ): return( 2400 ); default: TRACE_EVENT( "UNEXP CHN MODE IN CTB" ); return( NOT_PRESENT_16BIT ); } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_SelUsrRate | +-------------------------------------------------------------------+ PURPOSE : select user rate */ GLOBAL USHORT cmhT30_SelUsrRate ( void ) { switch( t30NgtPrms.FCSbr ) { case( F_BR_2400 ): return( 2400 ); case( F_BR_4800 ): return( 4800 ); case( F_BR_7200 ): return( 7200 ); case( F_BR_9600 ): return( 9600 ); case( F_BR_12000 ): return( 12000 ); case( F_BR_14400 ): return( 14000 ); default: TRACE_EVENT( "UNEXP BIT RATE IN NGT PARMS" ); return( NOT_PRESENT_16BIT ); } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_SelHlfRate | +-------------------------------------------------------------------+ PURPOSE : select half rate */ GLOBAL UBYTE cmhT30_SelHlfRate ( void ) { switch( ccShrdPrm.chType ) { case( MNCC_CH_TCH_F ): return( FALSE ); case( MNCC_CH_TCH_H ): return( TRUE ); default: TRACE_EVENT( "UNEXP CHN TYPE IN CTB" ); return((BYTE)-1); } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_RA | | ROUTINE : cmhT30_SelBitOrder | +-------------------------------------------------------------------+ PURPOSE : select bit order */ GLOBAL UBYTE cmhT30_SelBitOrder( T_ACI_CMD_SRC srcId ) { switch( fnd_cmhPrm[srcId].t30CmdPrm.FBOval ) { case( FBO_VAL_DirCDirBD ): return( FBO_NRM_STATUS + FBO_NRM_DATA ); case( FBO_VAL_RvrCDirBD ): return( FBO_NRM_STATUS + FBO_REV_DATA ); case( FBO_VAL_DirCRvrBD ): return( FBO_REV_STATUS + FBO_NRM_DATA ); case( FBO_VAL_RvrCRvrBD ): return( FBO_REV_STATUS + FBO_REV_DATA ); default: TRACE_EVENT( "UNEXP FBO VALUE" ); return( NOT_PRESENT_8BIT ); } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_Chk4TCHAdpt | +-------------------------------------------------------------------+ PURPOSE : check for TCH adaptation. Returns true if an adaptation of the TCH is expected. */ GLOBAL BOOL cmhT30_Chk4TCHAdpt ( void ) { TRACE_FUNCTION("cmhT30_Chk4TCHAdpt"); TRACE_EVENT_P2( "CHN MD: %d, FCS BR: %d", ccShrdPrm.chMod, t30NgtPrms.FCSbr ); switch( ccShrdPrm.chMod ) { case( MNCC_CHM_DATA_14_4 ): switch( t30NgtPrms.FCSbr ) { case( F_BR_2400 ): case( F_BR_4800 ): case( F_BR_7200 ): case( F_BR_9600 ): return( TRUE ); case( F_BR_12000 ): case( F_BR_14400 ): return( FALSE ); default: TRACE_EVENT( "UNEXP BIT RATE IN NGT PARMS" ); return( FALSE ); } case( MNCC_CHM_DATA_9_6 ): switch( t30NgtPrms.FCSbr ) { case( F_BR_2400 ): case( F_BR_4800 ): case( F_BR_12000 ): case( F_BR_14400 ): return( TRUE ); case( F_BR_7200 ): case( F_BR_9600 ): return( FALSE ); default: TRACE_EVENT( "UNEXP BIT RATE IN NGT PARMS" ); return( FALSE ); } case( MNCC_CHM_DATA_4_8 ): switch( t30NgtPrms.FCSbr ) { case( F_BR_2400 ): case( F_BR_7200 ): case( F_BR_9600 ): case( F_BR_12000 ): case( F_BR_14400 ): return( TRUE ); case( F_BR_4800 ): return( FALSE ); default: TRACE_EVENT( "UNEXP BIT RATE IN NGT PARMS" ); return( FALSE ); } case( MNCC_CHM_DATA_2_4 ): switch( t30NgtPrms.FCSbr ) { case( F_BR_4800 ): case( F_BR_7200 ): case( F_BR_9600 ): case( F_BR_12000 ): case( F_BR_14400 ): return( TRUE ); case( F_BR_2400 ): return( FALSE ); default: TRACE_EVENT( "UNEXP BIT RATE IN NGT PARMS" ); return( FALSE ); } default: TRACE_EVENT( "UNEXP CHN MODE IN CTB" ); return( FALSE ); } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetDataRate | +-------------------------------------------------------------------+ PURPOSE : get negotiated data rate */ GLOBAL T_ACI_BS_SPEED cmhT30_GetDataRate ( void ) { /* do not return a data rate in FAX mode, due to adaptation to FAX host software */ return( BS_SPEED_NotPresent ); #if(0) switch( t30NgtPrms.FCSbr ) { case( F_BR_2400 ): return( BS_SPEED_2400_V110 ); case( F_BR_4800 ): return( BS_SPEED_4800_V110 ); case( F_BR_7200 ): return( -1 ); case( F_BR_9600 ): return( BS_SPEED_9600_V110 ); case( F_BR_12000 ): return( BS_SPEED_12000_V110 ); case( F_BR_14400 ): return( BS_SPEED_14400_V110 ); default: TRACE_EVENT( "UNEXP BIT RATE IN NGT PARMS" ); return( F_BR_NotPresent ); } #endif } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetPpr | +-------------------------------------------------------------------+ PURPOSE : interpret post page response according TABLE23/T.32 and return the post page response notation of T30. */ GLOBAL UBYTE cmhT30_GetPpr( T_ACI_FPS_PPR ppr ) { switch( ppr ) { case( FPS_PPR_Mcf ): return( SGN_MCF ); case( FPS_PPR_Rtn ): return( SGN_RTN ); case( FPS_PPR_Rtp ): return( SGN_RTP ); case( FPS_PPR_Pin ): return( SGN_PIN ); case( FPS_PPR_Pip ): return( SGN_PIP ); } TRACE_EVENT("INVALID SETTING FOR FAX CAPS: PPR"); return( SGN_NOT_USED ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetResolution | +-------------------------------------------------------------------+ PURPOSE : interpret resolution capabilities according TABLE2/T.32 and return the resolution in CLASS 2.0 notation. */ GLOBAL T_ACI_F_VR cmhT30_GetResolution( void * p, T_T30_FRTP frmTyp ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ T_ACI_F_VR reso = F_VR_R8X3_85; /* holds resolution capabilities */ /* *------------------------------------------------------------------ * for DCS frames *------------------------------------------------------------------ */ if( frmTyp EQ FRT_DCS ) { /* *---------------------------------------------------------------- * TABLE 2/T.32 BIT 15 and BIT 44 *---------------------------------------------------------------- */ if( pDCECaps -> R8_lines_pels EQ BIT_CLR ) /* BIT 15 EQ 0 */ { if( pDCECaps -> resolution_type EQ BIT_CLR OR pDCECaps -> resolution_type EQ BIT_NOT_PRES ) /* BIT 44 -> metric based */ { if( pDCECaps -> R16_lines_pels EQ BIT_SET ) /* BIT 43 EQ 1 */ return( F_VR_R16X15_4 ); else if( pDCECaps -> R8_lines EQ BIT_SET ) /* BIT 41 EQ 1 */ return( F_VR_R8X15_4 ); else return( F_VR_R8X3_85 ); } else /* BIT 44 EQ 1 -> inch based */ { if( pDCECaps -> R16_lines_pels EQ BIT_SET ) /* BIT 43 */ return( F_VR_200X400 ); else return( F_VR_200X100 ); } } else /* BIT 15 EQ 1 */ { if( pDCECaps -> resolution_type EQ BIT_CLR OR pDCECaps -> resolution_type EQ BIT_NOT_PRES ) /* BIT 44 -> metric based */ { return( F_VR_R8X7_7 ); } else /* BIT 44 EQ 1 -> inch based */ { if( pDCECaps -> r_300_pels EQ BIT_SET ) /* BIT 42 */ return( F_VR_300X300 ); else return( F_VR_200X200 ); } } } /* *------------------------------------------------------------------ * for DIS/DTC frames *------------------------------------------------------------------ */ /* *------------------------------------------------------------------ * TABLE 2/T.32 Note 11, bottom line *------------------------------------------------------------------ */ #ifdef _SIMULATION_ if( pDCECaps -> R8_lines_pels EQ BIT_SET AND pDCECaps -> R8_lines EQ BIT_CLR AND pDCECaps -> r_300_pels EQ BIT_CLR AND pDCECaps -> R16_lines_pels EQ BIT_CLR AND pDCECaps -> i_res_pref EQ BIT_CLR AND pDCECaps -> m_res_pref EQ BIT_CLR AND pDCECaps -> min_scan_time_hr EQ BIT_CLR ) #else if( pDCECaps -> R8_lines_pels EQ BIT_SET AND pDCECaps -> R8_lines EQ BIT_NOT_PRES AND pDCECaps -> r_300_pels EQ BIT_NOT_PRES AND pDCECaps -> R16_lines_pels EQ BIT_NOT_PRES AND pDCECaps -> i_res_pref EQ BIT_NOT_PRES AND pDCECaps -> m_res_pref EQ BIT_NOT_PRES AND pDCECaps -> min_scan_time_hr EQ BIT_NOT_PRES ) #endif { reso |= F_VR_R8X7_7; return( reso ); } /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 41 *------------------------------------------------------------------ */ if( pDCECaps -> R8_lines EQ BIT_SET ) reso |= F_VR_R8X15_4; /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 42 *------------------------------------------------------------------ */ if( pDCECaps -> r_300_pels EQ BIT_SET ) reso |= F_VR_300X300; /* *------------------------------------------------------------------ * TABLE 2/T.32 Note 11 & 12 *------------------------------------------------------------------ */ if( pDCECaps -> i_res_pref EQ BIT_SET ) /* BIT 44 */ { if( pDCECaps -> R8_lines_pels EQ BIT_CLR ) /* BIT 15 */ reso |= F_VR_200X100; if( pDCECaps -> R8_lines_pels EQ BIT_SET ) /* BIT 15 */ reso |= F_VR_200X200; if( pDCECaps -> R16_lines_pels EQ BIT_SET ) /* BIT 43 */ reso |= F_VR_200X400; } if( pDCECaps -> m_res_pref EQ BIT_SET ) /* BIT 45 */ { if( pDCECaps -> R8_lines_pels EQ BIT_SET ) /* BIT 15 */ reso |= F_VR_R8X7_7; if( pDCECaps -> R16_lines_pels EQ BIT_SET ) /* BIT 43 */ reso |= F_VR_R16X15_4; } if( pDCECaps -> m_res_pref EQ BIT_CLR AND /* BIT 44 */ pDCECaps -> i_res_pref EQ BIT_CLR ) /* BIT 45 */ { TRACE_EVENT("INVALID SETTING FOR FAX CAPS:RESOLUTION"); } /* *------------------------------------------------------------------ * return resolution *------------------------------------------------------------------ */ return( F_VR_R8X7_7 ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_BitRate | +-------------------------------------------------------------------+ PURPOSE : interpret bit rate capabilities according TABLE2/T.32 and return the bit rate in CLASS 2.0 notation. */ GLOBAL T_ACI_F_BR cmhT30_GetBitRate( void * p, T_T30_FRTP frmTyp ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 11 - 14 *------------------------------------------------------------------ */ switch( pDCECaps -> data_sig_rate ) { case( 0 ): return( F_BR_2400 ); case( 8 ): return( F_BR_9600 ); case( 4 ): return( F_BR_4800 ); case( 12 ): if( frmTyp EQ FRT_DCS ) return( F_BR_7200 ); else return( F_BR_9600 ); case( 1 ): if( frmTyp EQ FRT_DCS ) return( F_BR_14400 ); break; case( 9 ): if( frmTyp EQ FRT_DCS ) return( F_BR_9600 ); break; case( 5 ): if( frmTyp EQ FRT_DCS ) return( F_BR_12000 ); break; case( 13 ): if( frmTyp EQ FRT_DCS ) return( F_BR_7200 ); else return( F_BR_14400 ); default: break; } TRACE_EVENT("INVALID SETTING FOR FAX CAPS:BIT RATE"); return( F_BR_NotPresent ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetPageWidth | +-------------------------------------------------------------------+ PURPOSE : interpret page width capabilities according TABLE2/T.32 and return the page width in CLASS 2.0 notation. */ GLOBAL T_ACI_F_WD cmhT30_GetPageWidth( void * p ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 17 - 18 *------------------------------------------------------------------ */ switch( pDCECaps -> rec_width ) { case( 0 ): return( F_WD_1728 ); case( 2 ): return( F_WD_2048 ); case( 1 ): case( 3 ): return( F_WD_2432 ); } TRACE_EVENT("INVALID SETTING FOR FAX CAPS:PAGE WIDTH"); return( F_WD_NotPresent ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetPageLength | +-------------------------------------------------------------------+ PURPOSE : interpret page length capabilities according TABLE2/T.32 and return the page length in CLASS 2.0 notation. */ GLOBAL T_ACI_F_LN cmhT30_GetPageLength( void * p ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 19 - 20 *------------------------------------------------------------------ */ switch( pDCECaps -> max_rec_len ) { case( 0 ): return( F_LN_A4 ); case( 2 ): return( F_LN_B4 ); case( 1 ): return( F_LN_Unlimited ); } TRACE_EVENT("INVALID SETTING FOR FAX CAPS:PAGE LENGTH"); return( F_LN_NotPresent ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetDataComp | +-------------------------------------------------------------------+ PURPOSE : interpret data compression capabilities according TABLE2/T.32 and return the data compression in CLASS 2.0 notation. */ GLOBAL T_ACI_F_DF cmhT30_GetDataComp( void * p ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 16, 26, 27 and 31 *------------------------------------------------------------------ */ if( pDCECaps -> two_dim_coding EQ BIT_CLR ) /* BIT 16 */ return( F_DF_1D_MdfHuff ); if( pDCECaps -> two_dim_coding EQ BIT_SET ) /* BIT 16 */ { if( pDCECaps -> uncomp_mode EQ BIT_CLR OR /* BIT 26 */ (pDCECaps -> uncomp_mode EQ BIT_NOT_PRES AND pDCECaps -> err_corr_mode EQ BIT_NOT_PRES AND pDCECaps -> err_corr_mode EQ BIT_NOT_PRES AND pDCECaps -> t6_coding EQ BIT_NOT_PRES)) return( F_DF_2D_MdfRd_T4 ); if( pDCECaps -> uncomp_mode EQ BIT_SET ) /* BIT 26 */ return( F_DF_2D_Uncomp ); if( pDCECaps -> err_corr_mode EQ BIT_SET AND /* BIT 27 */ pDCECaps -> t6_coding EQ BIT_SET ) /* BIT 31 */ return( F_DF_2D_MdfRd_T6 ); } TRACE_EVENT("INVALID SETTING FOR FAX CAPS:DATA COMPRESSION"); return( F_DF_NotPresent ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetErrCorr | +-------------------------------------------------------------------+ PURPOSE : interpret error correction capabilities according TABLE2/T.32 and return the error correction in CLASS 2.0 notation. */ GLOBAL T_ACI_F_EC cmhT30_GetErrCorr( void * p ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 27 and 67 *------------------------------------------------------------------ */ if( pDCECaps -> err_corr_mode EQ BIT_CLR ) /* BIT 27 */ return( F_EC_DisableECM ); if( pDCECaps -> err_corr_mode EQ BIT_SET ) /* BIT 27 */ { if( pDCECaps -> duplex EQ BIT_NOT_PRES ) /* BIT 67 */ return( F_EC_EnableECM ); if( pDCECaps -> duplex EQ BIT_CLR ) /* BIT 67 */ return( F_EC_EnableHalfDup ); if( pDCECaps -> duplex EQ BIT_SET ) /* BIT 67 */ return( F_EC_EnableFullDup ); } return( F_EC_DisableECM ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetFileTrnsfr | +-------------------------------------------------------------------+ PURPOSE : interpret file transfer mode according TABLE2/T.32 and return the file transfer mode in CLASS 2.0 notation. */ GLOBAL T_ACI_F_BF cmhT30_GetFileTrnsfr( void * p ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ T_ACI_F_BF ftm = F_BF_DisableFileTrnsf; /* holds file trans. capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 53 *------------------------------------------------------------------ */ if( pDCECaps -> bft EQ BIT_CLR ) ftm += F_BF_DisableFileTrnsf; /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 27 and 53, 54, 55, 57, 60, 62, 65 *------------------------------------------------------------------ */ if( pDCECaps -> err_corr_mode EQ BIT_SET ) /* BIT 27 */ { if( pDCECaps -> bft EQ BIT_SET ) /* BIT 53 */ ftm += F_BF_EnableBFT; if( pDCECaps -> dtm EQ BIT_SET ) /* BIT 54 */ ftm += F_BF_DocuTrnsfMode; if( pDCECaps -> edi EQ BIT_SET ) /* BIT 55 */ ftm += F_BF_EdifactMode; if( pDCECaps -> btm EQ BIT_SET ) /* BIT 57 */ ftm += F_BF_BasicTrnsfMode; if( pDCECaps -> char_mode EQ BIT_SET ) /* BIT 60 */ ftm += F_BF_CharMode; if( pDCECaps -> mixed_mode EQ BIT_SET ) /* BIT 62 */ ftm += F_BF_MixMode; if( pDCECaps -> proc_mode_26 EQ BIT_SET )/* BIT 65 */ ftm += F_BF_ProcMode; } /* *------------------------------------------------------------------ * return resolution *------------------------------------------------------------------ */ return( ftm ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetScanTime | +-------------------------------------------------------------------+ PURPOSE : interpret scan time capabilities according TABLE2/T.32 and return the scan time in CLASS 2.0 notation. */ GLOBAL T_ACI_F_ST cmhT30_GetScanTime( void * p ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 21 - 23 *------------------------------------------------------------------ */ switch( pDCECaps -> min_scan_time ) { case( 0 ): return( F_ST_20_20 ); case( 4 ): return( F_ST_5_5 ); case( 2 ): return( F_ST_10_10 ); case( 6 ): return( F_ST_20_10 ); case( 1 ): return( F_ST_40_40 ); case( 5 ): return( F_ST_40_20 ); case( 3 ): return( F_ST_10_5 ); case( 7 ): return( F_ST_0_0 ); } TRACE_EVENT("INVALID SETTING FOR FAX CAPS:SCAN TIME"); return( F_ST_NotPresent ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_GetJPEG | +-------------------------------------------------------------------+ PURPOSE : interpret JPEG mode according TABLE2/T.32 and return the JPEG mode in CLASS 2.0 notation. */ GLOBAL T_ACI_F_JP cmhT30_GetJPEG( void * p ) { T_dis * pDCECaps = (T_dis *)p; /* points to DCE capabilities */ T_ACI_F_JP jpeg = F_JP_DisableJPEG; /* holds JPEG capabilities */ /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 68 *------------------------------------------------------------------ */ if( pDCECaps -> jpeg EQ BIT_CLR ) jpeg += F_JP_DisableJPEG; /* *------------------------------------------------------------------ * TABLE 2/T.32 BIT 68 and 69, 70, 71, 73, 74, 75 *------------------------------------------------------------------ */ if( pDCECaps -> jpeg EQ BIT_SET ) /* BIT 68 */ { jpeg += F_JP_EnableJPEG; if( pDCECaps -> full_colour EQ BIT_SET ) /* BIT 69 */ jpeg += F_JP_FullColor; if( pDCECaps -> huffman_tables EQ BIT_SET ) /* BIT 70 */ jpeg += F_JP_EnablePrefHuff; if( pDCECaps -> r_12_bits_pel_comp EQ BIT_SET ) /* BIT 71 */ jpeg += F_JP_12BitsPelComp; if( pDCECaps -> no_subsamp EQ BIT_SET ) /* BIT 73 */ jpeg += F_JP_NoSubsmpl; if( pDCECaps -> cust_illum EQ BIT_SET ) /* BIT 74 */ jpeg += F_JP_CustIllum; if( pDCECaps -> cust_gamut EQ BIT_SET ) /* BIT 75 */ jpeg += F_JP_CustGamutRange; } /* *------------------------------------------------------------------ * return resolution *------------------------------------------------------------------ */ return( jpeg ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_RstNgtPrms | +-------------------------------------------------------------------+ PURPOSE : reset negotiated parameters. */ GLOBAL void cmhT30_RstNgtPrms( void ) { t30NgtPrms.FCSvr = F_VR_NotPresent; t30NgtPrms.FCSbr = F_BR_NotPresent; t30NgtPrms.FCSwd = F_WD_NotPresent; t30NgtPrms.FCSln = F_LN_NotPresent; t30NgtPrms.FCSdf = F_DF_NotPresent; t30NgtPrms.FCSec = F_EC_NotPresent; t30NgtPrms.FCSbf = F_BF_NotPresent; t30NgtPrms.FCSst = F_ST_NotPresent; t30NgtPrms.FCSjp = F_JP_NotPresent; } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_InitFAXPrms | +-------------------------------------------------------------------+ PURPOSE : intialize FAX parameter for the passed command id */ GLOBAL void cmhT30_InitFAXPrms ( T_ACI_CMD_SRC srcId ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; pT30CmdPrm -> FCLASSclass = FCLASS_CLASS_Data; pT30CmdPrm -> FCRval = FCR_VAL_RcvCap; pT30CmdPrm -> FCCvr = F_VR_R8X3_85; pT30CmdPrm -> FCCbr = F_BR_9600; pT30CmdPrm -> FCCwd = F_WD_1728; pT30CmdPrm -> FCCln = F_LN_A4; pT30CmdPrm -> FCCdf = F_DF_1D_MdfHuff; pT30CmdPrm -> FCCec = F_EC_DisableECM; pT30CmdPrm -> FCCbf = F_BF_DisableFileTrnsf; pT30CmdPrm -> FCCst = F_ST_0_0; pT30CmdPrm -> FCCjp = F_JP_DisableJPEG; pT30CmdPrm -> FISvr = F_VR_R8X3_85; pT30CmdPrm -> FISbr = F_BR_9600; pT30CmdPrm -> FISwd = F_WD_1728; pT30CmdPrm -> FISln = F_LN_A4; pT30CmdPrm -> FISdf = F_DF_1D_MdfHuff; pT30CmdPrm -> FISec = F_EC_DisableECM; pT30CmdPrm -> FISbf = F_BF_DisableFileTrnsf; pT30CmdPrm -> FISst = F_ST_0_0; pT30CmdPrm -> FISjp = F_JP_DisableJPEG; pT30CmdPrm -> FLIstr[0] = 0x0; pT30CmdPrm -> FPIstr[0] = 0x0; pT30CmdPrm -> FLPval = FLP_VAL_NoPollDoc; pT30CmdPrm -> FAPsub = FAP_VAL_Disabled; pT30CmdPrm -> FAPsep = FAP_VAL_Disabled; pT30CmdPrm -> FAPpwd = FAP_VAL_Disabled; pT30CmdPrm -> FSAsub[0] = 0x0; pT30CmdPrm -> FPAsep[0] = 0x0; pT30CmdPrm -> FPWpwd[0] = 0x0; pT30CmdPrm -> FNSlen = 0; pT30CmdPrm -> FCQrq = FCQ_RQ_CQCEnabled; pT30CmdPrm -> FMSbr = F_BR_2400; pT30CmdPrm -> FPSppr = FPS_PPR_Mcf; pT30CmdPrm -> FSPval = FSP_VAL_PollDisabled; pT30CmdPrm -> FIEval = FIE_VAL_IgnorePRI; pT30CmdPrm -> FITact = FIT_ACT_OnHookRst; pT30CmdPrm -> FITtime = 0; pT30CmdPrm -> FBOval = FBO_VAL_DirCDirBD; } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_NgtDCEPrms | +-------------------------------------------------------------------+ PURPOSE : negotiate DCE parameters. */ GLOBAL void cmhT30_NgtDCEPrms( T_ACI_CMD_SRC srcId ) { T_dis * pDCECaps; /* points to DCE capabilities */ T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ SHORT bitPos = 0; /* holds bit position */ BOOL lclMtrcFlg, lclInchFlg; /* flags found local metric and inch resolution */ BOOL lclCapFlg; /* flags found local capability */ BOOL rmtMtrcFlg, rmtInchFlg; /* flags found remote metric and inch resolution */ BOOL rmtCapFlg; /* flags found remote capability */ UBYTE lclMtrc, rmtMtrc; /* holds local and remote metric resolutions */ UBYTE lclInch, rmtInch; /* holds local and remote inch resolutions */ UBYTE lclCap, rmtCap; /* holds local and remote capability */ UBYTE vrMtrc; /* holds common metric resolution */ UBYTE vrInch; /* holds common inch resolution */ T_ACI_F_BR TCHbr; /* holds bit rate of TCH */ pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; if( t30ShrdPrm.hdlc_rcv.v_dis EQ TRUE ) pDCECaps = (T_dis *)&t30ShrdPrm.hdlc_rcv.dis; else if( t30ShrdPrm.hdlc_rcv.v_dtc EQ TRUE ) pDCECaps = (T_dis *)&t30ShrdPrm.hdlc_rcv.dtc; else { TRACE_EVENT("NO CAPABILITES AVAILABLE FOR NEGOTIATION"); return; } /* *------------------------------------------------------------------ * negotiate resolution capabilities *------------------------------------------------------------------ */ lclMtrcFlg = 0; lclInchFlg = 0; rmtMtrcFlg = 0; rmtInchFlg = 0; lclMtrc = (UBYTE)(pT30CmdPrm -> FISvr & 0x0F); rmtMtrc = (UBYTE)(cmhT30_GetResolution(pDCECaps,FRT_DIS) & 0x0F); lclInch = (UBYTE)((pT30CmdPrm -> FISvr & 0xF0)>>4); rmtInch = (UBYTE)((cmhT30_GetResolution(pDCECaps,FRT_DIS) & 0xF0)>>4); vrMtrc = 0; vrInch = 0; for( bitPos = 3; bitPos >= 0; bitPos-- ) { if( !lclMtrcFlg ) lclMtrcFlg = ((lclMtrc>>bitPos)&0x01); if( !rmtMtrcFlg ) rmtMtrcFlg = ((rmtMtrc>>bitPos)&0x01); if( !lclInchFlg ) lclInchFlg = ((lclInch>>bitPos)&0x01); if( !rmtInchFlg ) rmtInchFlg = ((rmtInch>>bitPos)&0x01); if( lclMtrcFlg AND rmtMtrcFlg AND !vrMtrc ) vrMtrc = 0x01<<bitPos; if( lclInchFlg AND rmtInchFlg AND !vrInch ) vrInch = 0x01<<bitPos; } if( vrMtrc AND vrInch) { t30NgtPrms.FCSvr = (T_ACI_F_VR)((vrMtrc <= vrInch)?vrMtrc:vrInch); } else if( vrMtrc ) { t30NgtPrms.FCSvr = (T_ACI_F_VR)vrMtrc; } else { t30NgtPrms.FCSvr = (T_ACI_F_VR)vrInch; } /* *------------------------------------------------------------------ * negotiate bit rate capabilities *------------------------------------------------------------------ */ t30NgtPrms.FCSbr = cmhT30_Chn2BitRate(); t30NgtPrms.FCSbr = MINIMUM(pT30CmdPrm->FISbr, t30NgtPrms.FCSbr); TCHbr = cmhT30_GetBitRate(pDCECaps, FRT_DIS); t30NgtPrms.FCSbr = MINIMUM(t30NgtPrms.FCSbr, TCHbr); /* *------------------------------------------------------------------ * negotiate page width capabilities *------------------------------------------------------------------ */ t30NgtPrms.FCSwd = cmhT30_GetPageWidth(pDCECaps); t30NgtPrms.FCSwd = MINIMUM(pT30CmdPrm->FISwd, t30NgtPrms.FCSwd); /* *------------------------------------------------------------------ * negotiate page length capabilities *------------------------------------------------------------------ */ t30NgtPrms.FCSln = cmhT30_GetPageLength(pDCECaps); t30NgtPrms.FCSln = MINIMUM(pT30CmdPrm->FISln, t30NgtPrms.FCSln); /* *------------------------------------------------------------------ * negotiate data compression capabilities *------------------------------------------------------------------ */ t30NgtPrms.FCSdf = cmhT30_GetDataComp(pDCECaps); t30NgtPrms.FCSdf = MINIMUM(pT30CmdPrm->FISdf, t30NgtPrms.FCSdf); /* *------------------------------------------------------------------ * negotiate error correction capabilities *------------------------------------------------------------------ */ t30NgtPrms.FCSec = cmhT30_GetErrCorr(pDCECaps); t30NgtPrms.FCSec = MINIMUM(pT30CmdPrm -> FISec, t30NgtPrms.FCSec); /* *------------------------------------------------------------------ * negotiate file transfer capabilities *------------------------------------------------------------------ */ lclCapFlg = 0; rmtCapFlg = 0; lclCap = (UBYTE)pT30CmdPrm -> FISbf; rmtCap = (UBYTE)cmhT30_GetFileTrnsfr(pDCECaps); t30NgtPrms.FCSbf = F_BF_DisableFileTrnsf; for( bitPos = 7; bitPos >= 0; bitPos-- ) { if( !lclCapFlg ) lclCapFlg = ((lclCap>>bitPos)&0x01); if( !rmtCapFlg ) rmtCapFlg = ((rmtCap>>bitPos)&0x01); if( lclCapFlg AND rmtCapFlg AND !t30NgtPrms.FCSbf ) { t30NgtPrms.FCSbf = (T_ACI_F_BF)(0x01<<bitPos); break; } } /* *------------------------------------------------------------------ * negotiate scan time capabilities *------------------------------------------------------------------ */ t30NgtPrms.FCSst = cmhT30_GetScanTime(pDCECaps); t30NgtPrms.FCSst = MAXIMUM(pT30CmdPrm->FISst, t30NgtPrms.FCSst); /* *------------------------------------------------------------------ * negotiate JPEG capabilities *------------------------------------------------------------------ */ lclCapFlg = 0; rmtCapFlg = 0; lclCap = (UBYTE)pT30CmdPrm -> FISjp; rmtCap = (UBYTE)cmhT30_GetJPEG(pDCECaps); t30NgtPrms.FCSjp = F_JP_DisableJPEG; for( bitPos = 7; bitPos >= 0; bitPos-- ) { if( !lclCapFlg ) lclCapFlg = ((lclCap>>bitPos)&0x01); if( !rmtCapFlg ) rmtCapFlg = ((rmtCap>>bitPos)&0x01); if( lclCapFlg AND rmtCapFlg AND !t30NgtPrms.FCSjp ) { t30NgtPrms.FCSjp = (T_ACI_F_JP)(0x01<<bitPos); break; } } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_BuildSndFrm | +-------------------------------------------------------------------+ PURPOSE : build send frame according the passed frame type with the settings of the passed owner. */ GLOBAL void cmhT30_BuildSndFrm( T_ACI_CMD_SRC srcId, T_T30_FRTP frmTyp ) { T_dis * pFrm; /* points to frame */ T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ T_ACI_F_VR vr; /* holds selected resolution */ T_ACI_F_BR br; /* holds selected bit rate */ T_ACI_F_WD wd; /* holds selected page width */ T_ACI_F_LN ln; /* holds selected page length */ T_ACI_F_DF df; /* holds selected data compression */ T_ACI_F_EC ec; /* holds selected error correction */ T_ACI_F_BF bf; /* holds selected file transfer mode */ T_ACI_F_ST st; /* holds selected scan time */ T_ACI_F_JP jp; /* holds selected JPEG mode */ pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------ * determine frame type to build *------------------------------------------------------------------ */ switch( frmTyp ) { case( FRT_DIS ): t30ShrdPrm.hdlc_snd.v_dis = TRUE; pFrm = (T_dis *)&t30ShrdPrm.hdlc_snd.dis; vr = pT30CmdPrm -> FISvr; br = pT30CmdPrm -> FISbr; wd = pT30CmdPrm -> FISwd; ln = pT30CmdPrm -> FISln; df = pT30CmdPrm -> FISdf; ec = pT30CmdPrm -> FISec; bf = pT30CmdPrm -> FISbf; st = pT30CmdPrm -> FISst; jp = pT30CmdPrm -> FISjp; break; case( FRT_DTC ): t30ShrdPrm.hdlc_snd.v_dtc = TRUE; pFrm = (T_dis *)&t30ShrdPrm.hdlc_snd.dtc; vr = pT30CmdPrm -> FISvr; br = pT30CmdPrm -> FISbr; wd = pT30CmdPrm -> FISwd; ln = pT30CmdPrm -> FISln; df = pT30CmdPrm -> FISdf; ec = pT30CmdPrm -> FISec; bf = pT30CmdPrm -> FISbf; st = pT30CmdPrm -> FISst; jp = pT30CmdPrm -> FISjp; break; case( FRT_DCS ): t30ShrdPrm.hdlc_snd.v_dcs = TRUE; pFrm = (T_dis *)&t30ShrdPrm.hdlc_snd.dcs; vr = t30NgtPrms.FCSvr; br = t30NgtPrms.FCSbr; wd = t30NgtPrms.FCSwd; ln = t30NgtPrms.FCSln; df = t30NgtPrms.FCSdf; ec = t30NgtPrms.FCSec; bf = t30NgtPrms.FCSbf; st = t30NgtPrms.FCSst; jp = t30NgtPrms.FCSjp; break; default: TRACE_ERROR("WRONG FRAME TYPE in cmhT30_BuildSndFrm()"); return; } /* *------------------------------------------------------------------ * build frame *------------------------------------------------------------------ */ /* *---------------------------------------------------------------- * default settings *---------------------------------------------------------------- */ pFrm -> v8 = 0; /* BIT 6 */ pFrm -> n_byte = 0; /* BIT 7 */ pFrm -> frame_size = 0; /* BIT 28 */ pFrm -> min_scan_time_hr = 0; /* BIT 46 */ pFrm -> ready_tx_doc = 0; /* BIT 51 */ pFrm -> ready_tx_mixed = 0; /* BIT 59 */ pFrm -> dig_network_cap = 0; /* BIT 66 */ pFrm -> na_letter = 0; /* BIT 76 */ pFrm -> na_legal = 0; /* BIT 77 */ pFrm -> sing_prog_seq_coding_basic = 0; /* BIT 78 */ pFrm -> sing_prog_seq_coding_L0 = 0; /* BIT 79 */ /* *---------------------------------------------------------------- * bit settings different for DIS/DTC and DCS frames *---------------------------------------------------------------- */ pFrm -> ready_tx_fax = ( frmTyp EQ FRT_DCS )? /* BIT 9 */ 0 : pT30CmdPrm -> FLPval; pFrm -> rec_fax_op = ( frmTyp EQ FRT_DCS )? /* BIT 10 */ 1 : pT30CmdPrm -> FCRval; pFrm -> sel_polling = (frmTyp EQ FRT_DCS)? /* BIT 47 */ 0 : pT30CmdPrm -> FAPsep; if( frmTyp EQ FRT_DCS ) /* BIT 49 */ pFrm -> subaddr = ( pT30CmdPrm -> FSAsub[0] NEQ 0x0 )? 1 : 0; else pFrm -> subaddr = pT30CmdPrm -> FAPsub; if( frmTyp EQ FRT_DCS ) /* BIT 50 */ pFrm -> password = ( pT30CmdPrm -> FPWpwd[0] NEQ 0x0 )? 1 : 0; else pFrm -> password = pT30CmdPrm -> FAPpwd; /* *---------------------------------------------------------------- * bit settings concerning the bit rate *---------------------------------------------------------------- */ switch( br ) /* BIT 11-14 */ { case( F_BR_2400 ): pFrm -> data_sig_rate = 0; break; case( F_BR_4800 ): pFrm -> data_sig_rate = 4; break; case( F_BR_7200 ): pFrm -> data_sig_rate = (frmTyp EQ FRT_DCS)? 12: 4; break; case( F_BR_9600 ): pFrm -> data_sig_rate = 8; break; case( F_BR_12000 ): pFrm -> data_sig_rate = (frmTyp EQ FRT_DCS)? 5: 8; break; case( F_BR_14400 ): pFrm -> data_sig_rate = (frmTyp EQ FRT_DCS)? 1:13; break; } /* *---------------------------------------------------------------- * bit settings concerning the resolution *---------------------------------------------------------------- */ pFrm -> R8_lines_pels = 0; /* BIT 15 */ pFrm -> m_res_pref = 0; /* BIT 45 */ pFrm -> i_res_pref = 0; /* BIT 44 */ pFrm -> R8_lines = 0; /* BIT 41 */ pFrm -> r_300_pels = 0; /* BIT 42 */ pFrm -> R16_lines_pels = 0; /* BIT 43 */ if( frmTyp EQ FRT_DCS ) /* for a DCS-frame */ { switch( vr ) { case( F_VR_R8X3_85 ): pFrm -> m_res_pref = 1; break; case( F_VR_R8X7_7 ): pFrm -> R8_lines_pels = 1; pFrm -> m_res_pref = 1; break; case( F_VR_R8X15_4 ): pFrm -> m_res_pref = 1; pFrm -> R8_lines = 1; break; case( F_VR_R16X15_4 ): pFrm -> m_res_pref = 1; pFrm -> R16_lines_pels = 1; break; case( F_VR_200X100 ): pFrm -> i_res_pref = 1; break; case( F_VR_200X200 ): pFrm -> R8_lines_pels = 1; pFrm -> i_res_pref = 1; break; case( F_VR_200X400 ): pFrm -> i_res_pref = 1; pFrm -> R16_lines_pels = 1; break; case( F_VR_300X300 ): pFrm -> i_res_pref = 1; pFrm -> r_300_pels = 1; break; } } else /* for a DIS/DTC-frame */ { pFrm -> R8_lines_pels = 0; pFrm -> m_res_pref = 1; if( vr & F_VR_R8X7_7 ) { pFrm -> R8_lines_pels = 1; } if( vr & F_VR_R8X15_4 ) { pFrm -> R8_lines = 1; } if( vr & F_VR_R16X15_4 ) { pFrm -> R16_lines_pels = 1; } if( vr & F_VR_200X100 ) { pFrm -> R8_lines_pels = 0; pFrm -> i_res_pref = 1; } if( vr & F_VR_200X200 ) { pFrm -> R8_lines_pels = 1; pFrm -> i_res_pref = 1; } if( vr & F_VR_200X400 ) { pFrm -> R16_lines_pels = 1; pFrm -> i_res_pref = 1; } if( vr & F_VR_300X300 ) { pFrm -> r_300_pels = 1; pFrm -> i_res_pref = 1; } } /* *---------------------------------------------------------------- * bit settings concerning the data compression format *---------------------------------------------------------------- */ pFrm -> two_dim_coding = 0; /* BIT 16 */ pFrm -> uncomp_mode = 0; /* BIT 26 */ pFrm -> err_corr_mode = 0; /* BIT 27 */ pFrm -> t6_coding = 0; /* BIT 31 */ switch( df ) { case( F_DF_1D_MdfHuff ): break; case( F_DF_2D_MdfRd_T4 ): pFrm -> two_dim_coding = 1; break; case( F_DF_2D_Uncomp ): pFrm -> two_dim_coding = 1; pFrm -> uncomp_mode = 1; break; case( F_DF_2D_MdfRd_T6 ): pFrm -> two_dim_coding = 1; pFrm -> err_corr_mode = 1; pFrm -> t6_coding = 1; break; } /* *---------------------------------------------------------------- * bit settings concerning the page width *---------------------------------------------------------------- */ switch( wd ) /* BIT 17-18 */ { case( F_WD_1728 ): pFrm -> rec_width = 0; break; case( F_WD_2048 ): pFrm -> rec_width = 2; break; case( F_WD_2432 ): pFrm -> rec_width = 1; break; case( F_WD_1216 ): case( F_WD_864 ): pFrm -> rec_width = 3; break; } /* *---------------------------------------------------------------- * bit settings concerning the page length *---------------------------------------------------------------- */ switch( ln ) /* BIT 19-20 */ { case( F_LN_A4 ): pFrm -> max_rec_len = 0; break; case( F_LN_B4 ): pFrm -> max_rec_len = 2; break; case( F_LN_Unlimited ): pFrm -> max_rec_len = 1; break; } /* *---------------------------------------------------------------- * bit settings concerning the scan time *---------------------------------------------------------------- */ switch( st ) /* BIT 21-23 */ { case( F_ST_0_0 ): pFrm -> min_scan_time = 7; break; case( F_ST_5_5 ): pFrm -> min_scan_time = 4; break; case( F_ST_10_5 ): pFrm -> min_scan_time = (frmTyp EQ FRT_DCS)? 2 : 3; break; case( F_ST_10_10 ): pFrm -> min_scan_time = 2; break; case( F_ST_20_10 ): pFrm -> min_scan_time = (frmTyp EQ FRT_DCS)? 0 : 6; break; case( F_ST_20_20 ): pFrm -> min_scan_time = 0; break; case( F_ST_40_20 ): pFrm -> min_scan_time = ( frmTyp EQ FRT_DCS)? 1 : 5; break; case( F_ST_40_40 ): pFrm -> min_scan_time = 1; break; } /* *---------------------------------------------------------------- * bit settings concerning the error correction mode *---------------------------------------------------------------- */ pFrm -> err_corr_mode = 0; /* BIT 27*/ pFrm -> duplex = 0; /* BIT 67*/ switch( ec ) { case( F_EC_DisableECM ): break; case( F_EC_EnableECM ): pFrm -> err_corr_mode = 1; pFrm -> duplex = 0; break; case( F_EC_EnableHalfDup ): pFrm -> err_corr_mode = 1; pFrm -> duplex = 0; break; case( F_EC_EnableFullDup ): pFrm -> err_corr_mode = 1; pFrm -> duplex = 1; break; } /* *---------------------------------------------------------------- * bit settings concerning the file transfer mode *---------------------------------------------------------------- */ pFrm -> bft = 0; /* BIT 53 */ pFrm -> dtm = 0; /* BIT 54 */ pFrm -> edi = 0; /* BIT 55 */ pFrm -> btm = 0; /* BIT 57 */ pFrm -> char_mode = 0; /* BIT 60 */ pFrm -> mixed_mode = 0; /* BIT 62 */ pFrm -> proc_mode_26 = 0; /* BIT 65 */ if( bf & F_BF_EnableBFT ) pFrm -> bft = 1; if( bf & F_BF_DocuTrnsfMode ) pFrm -> dtm = 1; if( bf & F_BF_EdifactMode ) pFrm -> edi = 1; if( bf & F_BF_BasicTrnsfMode ) pFrm -> btm = 1; if( bf & F_BF_CharMode ) pFrm -> char_mode = 1; if( bf & F_BF_MixMode ) pFrm -> mixed_mode = 1; if( bf & F_BF_ProcMode ) pFrm -> proc_mode_26 = 1; /* *---------------------------------------------------------------- * bit settings concerning the JPEG mode *---------------------------------------------------------------- */ pFrm -> jpeg = 0; /* BIT 68 */ pFrm -> full_colour = 0; /* BIT 69 */ pFrm -> huffman_tables = 0; /* BIT 70 */ pFrm -> r_12_bits_pel_comp = 0; /* BIT 71 */ pFrm -> no_subsamp = 0; /* BIT 73 */ pFrm -> cust_illum = 0; /* BIT 74 */ pFrm -> cust_gamut = 0; /* BIT 75 */ if( jp & F_JP_EnableJPEG ) pFrm -> jpeg = 1; if( jp & F_JP_FullColor ) pFrm -> full_colour = 1; if( jp & F_JP_EnablePrefHuff AND frmTyp EQ FRT_DCS ) pFrm -> huffman_tables = 1; if( jp & F_JP_12BitsPelComp ) pFrm -> r_12_bits_pel_comp = 1; if( jp & F_JP_NoSubsmpl ) pFrm -> no_subsamp = 1; if( jp & F_JP_CustIllum ) pFrm -> cust_illum = 1; if( jp & F_JP_CustGamutRange ) pFrm -> cust_gamut = 1; } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_StartFIT | +-------------------------------------------------------------------+ PURPOSE : start FAX inactivity timer */ GLOBAL void cmhT30_StartFIT ( void ) { TRACE_FUNCTION( "cmhT30_StartFIT()" ); if( t30ShrdPrm.faxStat NEQ NO_VLD_FS AND fnd_cmhPrm[t30EntStat.entOwn].t30CmdPrm.FITtime NEQ 0 ) { TIMERSTART( fnd_cmhPrm[t30EntStat.entOwn].t30CmdPrm.FITtime, FIT_RUN ); FITRunFlg = TRUE; } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_StopFIT | +-------------------------------------------------------------------+ PURPOSE : stop FAX inactivity timer */ GLOBAL void cmhT30_StopFIT ( void ) { TRACE_FUNCTION( "cmhT30_StopFIT()" ); if( FITRunFlg ) { TIMERSTOP (FIT_RUN); FITRunFlg = FALSE; } } #endif /* DTI OR FF_FAX*/ /*==== EOF ========================================================*/