FreeCalypso > hg > fc-magnetite
view src/g23m-aci/aci/cmh_t30s.c @ 700:800bf29abf31
audio mode load change from Tourmaline
Our FreeCalypso universe now has two kinds of audio mode config files:
the old 164 byte kind and the new 176 byte kind. We are not enabling
L1_NEW_AEC in Magnetite, only in Tourmaline, thus 164 byte audio mode
files are still native to Magnetite. But we still desire graceful
handling of the situation when a running Magnetite fw may load a
176 byte audio mode file (presumably with new AEC config), thus we
incorporate the same audio mode loading change which we implemented
in Tourmaline: if the loaded audio mode file is of the wrong kind,
the AEC config is cleared to default disabled state.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 30 Jul 2021 03:55:52 +0000 |
parents | 53929b40109c |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6147) | Modul : CMH_T30S +----------------------------------------------------------------------------- | 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 provides the set functions related to the | protocol stack adapter for T30. +----------------------------------------------------------------------------- */ #if defined (DTI) || defined (FF_FAX) #ifndef CMH_T30S_C #define CMH_T30S_C #endif #include "aci_all.h" /*==== INCLUDES ===================================================*/ #include "aci_cmh.h" #include "ati_cmd.h" #include "aci_cmd.h" #include "dti.h" /* functionality of the dti library */ #include "dti_conn_mng.h" #include "dti_cntrl_mng.h" #include "aci_fd.h" #include "aci_io.h" #include "psa.h" #include "psa_t30.h" #include "psa_cc.h" #include "cmh.h" #include "cmh_t30.h" #include "cmh_cc.h" #include "cmh_ra.h" #include "psa_uart.h" #include "cmh_uart.h" #ifdef FF_PSI #include "psa_psi.h" #include "cmh_psi.h" #include "ati_src_psi.h" #endif /*FF_PSI*/ /*==== CONSTANTS ==================================================*/ #define T30_DEF_THLD (90) /* good page threshold in percent */ #ifdef _SIMULATION_ #define T30_DEF_FRMPRIM (3) /* no. frames per primitive */ #else #define T30_DEF_FRMPRIM (42) /* no. frames per primitive */ #endif /*==== EXPORT =====================================================*/ /* remove after testing ??? */ /* EXTERN void TST_getSimData(UBYTE *data, USHORT nomLen, USHORT *actLen, UBYTE *final); */ /*==== VARIABLES ==================================================*/ /*==== FUNCTIONS ==================================================*/ /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFCLASS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FCLASS AT command which is responsible to set the class mode. <class_type>: class mode. */ GLOBAL T_ACI_RETURN sAT_PlusFCLASS ( T_ACI_CMD_SRC srcId, T_ACI_FCLASS_CLASS class_type ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFCLASS()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the class_type parameter *------------------------------------------------------------------- */ switch( class_type ) { case( FCLASS_CLASS_NotPresent ): break; case( FCLASS_CLASS_Voice ): case( FCLASS_CLASS_Data ): case( FCLASS_CLASS_Fax20 ): pT30CmdPrm -> FCLASSclass = class_type; break; case( FCLASS_CLASS_Fax2 ): /* not implemented */ default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFCR | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FCR AT command which is responsible to set the receive capability. <value>: receive capability. */ GLOBAL T_ACI_RETURN sAT_PlusFCR ( T_ACI_CMD_SRC srcId, T_ACI_FCR_VAL value ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFCR()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the value parameter *------------------------------------------------------------------- */ switch( value ) { case( FCR_VAL_NotPresent ): break; case( FCR_VAL_NoRcvCap ): case( FCR_VAL_RcvCap ): pT30CmdPrm -> FCRval = value; break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFLI | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FLI AT command which is responsible to set the local id string (CSI/TSI). <idStr>: local id string(0 terminated). */ GLOBAL T_ACI_RETURN sAT_PlusFLI ( T_ACI_CMD_SRC srcId, CHAR * idStr ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFLI()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the idStr parameter *------------------------------------------------------------------- */ if( ! idStr ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } strncpy( pT30CmdPrm -> FLIstr, idStr, MAX_ID_CHAR-1 ); pT30CmdPrm -> FLIstr[MAX_ID_CHAR-1] = 0; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFPI | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FPI AT command which is responsible to set the local id string (CGI). <idStr>: local id string(0 terminated). */ GLOBAL T_ACI_RETURN sAT_PlusFPI ( T_ACI_CMD_SRC srcId, CHAR * idStr ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFPI()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the idStr parameter *------------------------------------------------------------------- */ if( ! idStr ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } strncpy( pT30CmdPrm -> FPIstr, idStr, MAX_ID_CHAR-1 ); pT30CmdPrm -> FPIstr[MAX_ID_CHAR-1] = 0; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFSA | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FSA AT command which is responsible to set the destination subaddress string <subStr>: destination subaddress string(0 terminated). */ GLOBAL T_ACI_RETURN sAT_PlusFSA ( T_ACI_CMD_SRC srcId, CHAR * subStr ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFSA()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the idStr parameter *------------------------------------------------------------------- */ if( ! subStr ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } strncpy( pT30CmdPrm -> FSAsub, subStr, MAX_ID_CHAR-1 ); pT30CmdPrm -> FSAsub[MAX_ID_CHAR-1] = 0; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFPA | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FPA AT command which is responsible to set the selective polling address string. <sepStr>: selective polling address string(0 terminated). */ GLOBAL T_ACI_RETURN sAT_PlusFPA ( T_ACI_CMD_SRC srcId, CHAR * sepStr ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFPA()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the idStr parameter *------------------------------------------------------------------- */ if( ! sepStr ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } strncpy( pT30CmdPrm -> FPAsep, sepStr, MAX_ID_CHAR-1 ); pT30CmdPrm -> FPAsep[MAX_ID_CHAR-1] = 0; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFPW | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FPW AT command which is responsible to set the password string. <pwdStr>: password string(0 terminated). */ GLOBAL T_ACI_RETURN sAT_PlusFPW ( T_ACI_CMD_SRC srcId, CHAR * pwdStr ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFPW()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the idStr parameter *------------------------------------------------------------------- */ if( ! pwdStr ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } strncpy( pT30CmdPrm -> FPWpwd, pwdStr, MAX_ID_CHAR-1 ); pT30CmdPrm -> FPWpwd[MAX_ID_CHAR-1] = 0; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFCC | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FCC AT command which is responsible to set the DCE capabilities. <vr>: resolution. <br>: bit rate. <wd>: page width. <ln>: page length. <df>: data compression. <ec>: error correction. <bt>: file transer. <st>: scan time. <jp>: JPEG mode. */ GLOBAL T_ACI_RETURN sAT_PlusFCC ( T_ACI_CMD_SRC srcId, T_ACI_F_VR vr, T_ACI_F_BR br, T_ACI_F_WD wd, T_ACI_F_LN ln, T_ACI_F_DF df, T_ACI_F_EC ec, T_ACI_F_BF bf, T_ACI_F_ST st, T_ACI_F_JP jp ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFCC()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the vr parameter *------------------------------------------------------------------- */ switch (vr) { case F_VR_NotPresent: vr = pT30CmdPrm -> FCCvr; break; case F_VR_R8X3_85: case F_VR_R8X7_7: case F_VR_R8X15_4: case F_VR_R16X15_4: case F_VR_200X100: case F_VR_200X200: case F_VR_200X400: case F_VR_300X300: break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return AT_FAIL; } /* *------------------------------------------------------------------- * process the br parameter *------------------------------------------------------------------- */ switch( br ) { case( F_BR_NotPresent ): br = pT30CmdPrm -> FCCbr; break; case( F_BR_2400 ): case( F_BR_4800 ): case( F_BR_7200 ): case( F_BR_9600 ): case( F_BR_12000 ): case( F_BR_14400 ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the wd parameter *------------------------------------------------------------------- */ switch( wd ) { case( F_WD_NotPresent ): wd = pT30CmdPrm -> FCCwd; break; case( F_WD_1728 ): case( F_WD_2048 ): case( F_WD_2432 ): case( F_WD_1216 ): case( F_WD_864 ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the ln parameter *------------------------------------------------------------------- */ switch( ln ) { case( F_LN_NotPresent ): ln = pT30CmdPrm -> FCCln; break; case( F_LN_A4 ): case( F_LN_B4 ): case( F_LN_Unlimited ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the df parameter *------------------------------------------------------------------- */ switch( df ) { case( F_DF_NotPresent ): df = pT30CmdPrm -> FCCdf; break; case( F_DF_1D_MdfHuff ): break; case( F_DF_2D_MdfRd_T4 ): /* not implemented */ case( F_DF_2D_Uncomp ): /* not implemented */ case( F_DF_2D_MdfRd_T6 ): /* not implemented */ default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the ec parameter *------------------------------------------------------------------- */ switch( ec ) { case( F_EC_NotPresent ): ec = pT30CmdPrm -> FCCec; break; case( F_EC_DisableECM ): break; case( F_EC_EnableECM ): /* not implemented */ case( F_EC_EnableHalfDup ): /* not implemented */ case( F_EC_EnableFullDup ): /* not implemented */ default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the bf parameter *------------------------------------------------------------------- */ if( bf NEQ F_BF_NotPresent ) { if( bf > F_BF_DisableFileTrnsf ) /* others are not implemented */ { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } else bf = pT30CmdPrm -> FCCbf; /* *------------------------------------------------------------------- * process the st parameter *------------------------------------------------------------------- */ switch( st ) { case( F_ST_NotPresent ): st = pT30CmdPrm -> FCCst; break; case( F_ST_0_0 ): case( F_ST_5_5 ): case( F_ST_10_5 ): case( F_ST_10_10 ): case( F_ST_20_10 ): case( F_ST_20_20 ): case( F_ST_40_20 ): case( F_ST_40_40 ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the jp parameter *------------------------------------------------------------------- */ if( jp NEQ F_JP_NotPresent ) { if( jp > F_JP_DisableJPEG ) /* others are not implemented */ { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } else jp = pT30CmdPrm -> FCCjp; /* *------------------------------------------------------------------- * assign the parameters *------------------------------------------------------------------- */ pT30CmdPrm -> FCCvr = pT30CmdPrm -> FISvr = vr; pT30CmdPrm -> FCCbr = pT30CmdPrm -> FISbr = br; pT30CmdPrm -> FCCwd = pT30CmdPrm -> FISwd = wd; pT30CmdPrm -> FCCln = pT30CmdPrm -> FISln = ln; pT30CmdPrm -> FCCdf = pT30CmdPrm -> FISdf = df; pT30CmdPrm -> FCCec = pT30CmdPrm -> FISec = ec; pT30CmdPrm -> FCCbf = pT30CmdPrm -> FISbf = bf; pT30CmdPrm -> FCCst = pT30CmdPrm -> FISst = st; pT30CmdPrm -> FCCjp = pT30CmdPrm -> FISjp = jp; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFIS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FIS AT command which is responsible to set the current session capabilities. <vr>: resolution. <br>: bit rate. <wd>: page width. <ln>: page length. <df>: data compression. <ec>: error correction. <bt>: file transer. <st>: scan time. <jp>: JPEG mode. */ GLOBAL T_ACI_RETURN sAT_PlusFIS ( T_ACI_CMD_SRC srcId, T_ACI_F_VR vr, T_ACI_F_BR br, T_ACI_F_WD wd, T_ACI_F_LN ln, T_ACI_F_DF df, T_ACI_F_EC ec, T_ACI_F_BF bf, T_ACI_F_ST st, T_ACI_F_JP jp ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFIS()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the vr parameter *------------------------------------------------------------------- */ switch (vr) { case F_VR_NotPresent: vr = pT30CmdPrm -> FISvr; break; case F_VR_R8X3_85: case F_VR_R8X7_7: case F_VR_R8X15_4: case F_VR_R16X15_4: case F_VR_200X100: case F_VR_200X200: case F_VR_200X400: case F_VR_300X300: break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return AT_FAIL; } /* *------------------------------------------------------------------- * process the br parameter *------------------------------------------------------------------- */ switch( br ) { case( F_BR_NotPresent ): br = pT30CmdPrm -> FISbr; break; case( F_BR_2400 ): case( F_BR_4800 ): case( F_BR_7200 ): case( F_BR_9600 ): case( F_BR_12000 ): case( F_BR_14400 ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the wd parameter *------------------------------------------------------------------- */ switch( wd ) { case( F_WD_NotPresent ): wd = pT30CmdPrm -> FISwd; break; case( F_WD_1728 ): case( F_WD_2048 ): case( F_WD_2432 ): case( F_WD_1216 ): case( F_WD_864 ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the ln parameter *------------------------------------------------------------------- */ switch( ln ) { case( F_LN_NotPresent ): ln = pT30CmdPrm -> FISln; break; case( F_LN_A4 ): case( F_LN_B4 ): case( F_LN_Unlimited ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the df parameter *------------------------------------------------------------------- */ switch( df ) { case( F_DF_NotPresent ): df = pT30CmdPrm -> FISdf; break; case( F_DF_1D_MdfHuff ): break; case( F_DF_2D_MdfRd_T4 ): /* not implemented */ case( F_DF_2D_Uncomp ): /* not implemented */ case( F_DF_2D_MdfRd_T6 ): /* not implemented */ default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the ec parameter *------------------------------------------------------------------- */ switch( ec ) { case( F_EC_NotPresent ): ec = pT30CmdPrm -> FISec; break; case( F_EC_DisableECM ): break; case( F_EC_EnableECM ): /* not implemented */ case( F_EC_EnableHalfDup ): /* not implemented */ case( F_EC_EnableFullDup ): /* not implemented */ default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the bf parameter *------------------------------------------------------------------- */ if( bf NEQ F_BF_NotPresent ) { if( bf > F_BF_DisableFileTrnsf ) /* others are not implemented */ { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } else bf = pT30CmdPrm -> FISbf; /* *------------------------------------------------------------------- * process the st parameter *------------------------------------------------------------------- */ switch( st ) { case( F_ST_NotPresent ): st = pT30CmdPrm -> FISst; break; case( F_ST_0_0 ): case( F_ST_5_5 ): case( F_ST_10_5 ): case( F_ST_10_10 ): case( F_ST_20_10 ): case( F_ST_20_20 ): case( F_ST_40_20 ): case( F_ST_40_40 ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the jp parameter *------------------------------------------------------------------- */ if( jp NEQ F_JP_NotPresent ) { if( jp > F_JP_DisableJPEG ) /* others are not implemented */ { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } else jp = pT30CmdPrm -> FISjp; /* *------------------------------------------------------------------- * assign the parameters *------------------------------------------------------------------- */ pT30CmdPrm -> FISvr = vr; pT30CmdPrm -> FISbr = br; pT30CmdPrm -> FISwd = wd; pT30CmdPrm -> FISln = ln; pT30CmdPrm -> FISdf = df; pT30CmdPrm -> FISec = ec; pT30CmdPrm -> FISbf = bf; pT30CmdPrm -> FISst = st; pT30CmdPrm -> FISjp = jp; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFNS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FNS AT command which is responsible to set the string for non-standard facilities. <len>: length of nsf string. <nsf>: nsf octed string. */ GLOBAL T_ACI_RETURN sAT_PlusFNS ( T_ACI_CMD_SRC srcId, UBYTE len, UBYTE * nsf ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFNS()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the len and nsf parameter *------------------------------------------------------------------- */ if((len > 0 AND ! nsf) OR len > MAX_NSF_BYTE ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } if( len EQ 0 ) { pT30CmdPrm -> FNSlen = 0; } else { if (MINIMUM(MAX_NSF_BYTE - pT30CmdPrm -> FNSlen, len)) { memcpy( &pT30CmdPrm -> FNSoct[pT30CmdPrm -> FNSlen], nsf, MINIMUM(MAX_NSF_BYTE - pT30CmdPrm -> FNSlen, len) ); } pT30CmdPrm -> FNSlen += MINIMUM(MAX_NSF_BYTE - pT30CmdPrm -> FNSlen, len); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFLP | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FLP AT command which is responsible to indicate a document for polling. <value>: polling indication. */ GLOBAL T_ACI_RETURN sAT_PlusFLP (T_ACI_CMD_SRC srcId, T_ACI_FLP_VAL value ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFLP()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the value parameter *------------------------------------------------------------------- */ switch( value ) { case( FLP_VAL_NotPresent ): break; case( FLP_VAL_NoPollDoc ): case( FLP_VAL_PollDoc ): pT30CmdPrm -> FLPval = value; break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFIE | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FIE AT command which is responsible to enable procedure interrupts. <value>: PI mode. */ GLOBAL T_ACI_RETURN sAT_PlusFIE (T_ACI_CMD_SRC srcId, T_ACI_FIE_VAL value ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFIE()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the value parameter *------------------------------------------------------------------- */ switch( value ) { case( FIE_VAL_NotPresent ): break; case( FIE_VAL_IgnorePRI ): case( FIE_VAL_AcceptPRI ): pT30CmdPrm -> FIEval = value; break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFCQ | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FCQ AT command which is responsible to set the copy quality checking. <rq>: receive quality. <tq>: transmit quality. */ GLOBAL T_ACI_RETURN sAT_PlusFCQ (T_ACI_CMD_SRC srcId, T_ACI_FCQ_RQ rq, T_ACI_FCQ_TQ tq ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFCQ()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the rq parameter *------------------------------------------------------------------- */ switch( rq ) { case( FCQ_RQ_NotPresent ): rq = pT30CmdPrm -> FCQrq; break; case( FCQ_RQ_CQCDisabled ): case( FCQ_RQ_CQCEnabled ): break; case( FCQ_RQ_CQCandCorrection ): default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the tq parameter *------------------------------------------------------------------- */ switch( tq ) { case( FCQ_TQ_NotPresent ): case( FCQ_TQ_CQCDisabled ): break; case( FCQ_TQ_CQCEnabled ): case( FCQ_TQ_CQCandCorrection ): default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * assign the parameters *------------------------------------------------------------------- */ pT30CmdPrm -> FCQrq = rq; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFIT | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FIT AT command which is responsible to set the inactivity timeout. <time>: inactivity timeout. <act> : action. */ GLOBAL T_ACI_RETURN sAT_PlusFIT (T_ACI_CMD_SRC srcId, SHORT time, T_ACI_FIT_ACT act ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFIT()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the act parameter *------------------------------------------------------------------- */ switch( act ) { case( FIT_ACT_NotPresent ): act = pT30CmdPrm -> FITact; break; case( FIT_ACT_OnHookRst ): case( FIT_ACT_OnHook ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the time parameter *------------------------------------------------------------------- */ if( time > 255 ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * assign the parameters *------------------------------------------------------------------- */ pT30CmdPrm -> FITact = act; if( time NEQ ACI_NumParmNotPresent ) { pT30CmdPrm -> FITtime = time * 1000; } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFBO | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FBO AT command which is responsible to set data bit order. <value>: data bit order. */ GLOBAL T_ACI_RETURN sAT_PlusFBO (T_ACI_CMD_SRC srcId, T_ACI_FBO_VAL value ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFBO()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the value parameter *------------------------------------------------------------------- */ switch( value ) { case( FBO_VAL_NotPresent ): value = pT30CmdPrm -> FBOval; break; case( FBO_VAL_DirCDirBD ): case( FBO_VAL_RvrCDirBD ): case( FBO_VAL_DirCRvrBD ): case( FBO_VAL_RvrCRvrBD ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * assign the parameters *------------------------------------------------------------------- */ pT30CmdPrm -> FBOval = value; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFRQ | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FRQ AT command which is responsible to set the receive quality thresholds. <pgl>: percentage of good lines. <cbl>: consecutive bad lines. */ GLOBAL T_ACI_RETURN sAT_PlusFRQ (T_ACI_CMD_SRC srcId, SHORT pgl, SHORT cbl ) { TRACE_FUNCTION ("sAT_PlusFRQ()"); /* process the pgl parameter */ if( pgl NEQ 0 ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* process the cbl parameter */ if( cbl NEQ 0 ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* start FIT timer */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFEA | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FEA AT command which is responsible to set phase C EOL alignment. <value>: alignment. */ GLOBAL T_ACI_RETURN sAT_PlusFEA (T_ACI_CMD_SRC srcId, SHORT value ) { TRACE_FUNCTION ("sAT_PlusFEA()"); /* *------------------------------------------------------------------- * process the value parameter *------------------------------------------------------------------- */ if( value NEQ ACI_NumParmNotPresent ) { if( value NEQ 0 ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFCT | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FCT AT command which is responsible to set phase C response timeout. <value>: timeout. */ GLOBAL T_ACI_RETURN sAT_PlusFCT (T_ACI_CMD_SRC srcId, SHORT value ) { TRACE_FUNCTION ("sAT_PlusFCT()"); /* *------------------------------------------------------------------- * process the value parameter *------------------------------------------------------------------- */ if( value NEQ ACI_NumParmNotPresent ) { if( value NEQ 30 ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFMS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FMS AT command which is responsible to set the minimum phase C speed. <br>: minimum phase C baud rate. */ GLOBAL T_ACI_RETURN sAT_PlusFMS (T_ACI_CMD_SRC srcId, T_ACI_F_BR br) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFMS()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the br parameter *------------------------------------------------------------------- */ switch( br ) { case( F_BR_NotPresent ): break; case( F_BR_2400 ): case( F_BR_4800 ): case( F_BR_7200 ): case( F_BR_9600 ): case( F_BR_12000 ): case( F_BR_14400 ): pT30CmdPrm -> FMSbr = br; break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFFC | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FFC AT command which is responsible to set the format conversion parameters. <vrc>: vertical resolution format. <dfc>: data format. <lnc>: page length format. <wdc>: page width format. */ GLOBAL T_ACI_RETURN sAT_PlusFFC (T_ACI_CMD_SRC srcId, T_ACI_FFC_VRC vrc, T_ACI_FFC_DFC dfc, T_ACI_FFC_LNC lnc, T_ACI_FFC_WDC wdc) { TRACE_FUNCTION ("sAT_PlusFFC()"); /* *------------------------------------------------------------------- * process the vrc parameter *------------------------------------------------------------------- */ if( vrc NEQ FFC_VRC_NotPresent ) { if( vrc NEQ FFC_VRC_Ignored ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } /* *------------------------------------------------------------------- * process the dfc parameter *------------------------------------------------------------------- */ if( dfc NEQ FFC_DFC_NotPresent ) { if( dfc NEQ FFC_DFC_Ignored ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } /* *------------------------------------------------------------------- * process the lnc parameter *------------------------------------------------------------------- */ if( lnc NEQ FFC_LNC_NotPresent ) { if( lnc NEQ FFC_LNC_Ignored ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } /* *------------------------------------------------------------------- * process the wdc parameter *------------------------------------------------------------------- */ if( wdc NEQ FFC_WDC_NotPresent ) { if( wdc NEQ FFC_WDC_Ignored ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFIP | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FIP AT command which is responsible to reset the FAX parameter to their initial value. */ GLOBAL T_ACI_RETURN sAT_PlusFIP (T_ACI_CMD_SRC srcId) { TRACE_FUNCTION ("sAT_PlusFIP()"); /* *------------------------------------------------------------------- * check command source and reset parameters *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } cmhT30_StopFIT(); cmhT30_InitFAXPrms( srcId ); cmhT30_RstNgtPrms(); /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFPS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FPS AT command which is responsible to set the post page response. <ppr>: post page response. */ GLOBAL T_ACI_RETURN sAT_PlusFPS (T_ACI_CMD_SRC srcId, T_ACI_FPS_PPR ppr ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFPS()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the ppr parameter *------------------------------------------------------------------- */ switch( ppr ) { case( FPS_PPR_NotPresent ): break; case( FPS_PPR_Mcf ): case( FPS_PPR_Rtn ): case( FPS_PPR_Rtp ): case( FPS_PPR_Pip ): case( FPS_PPR_Pin ): pT30CmdPrm -> FPSppr = ppr; break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFSP | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FSP AT command which is responsible to set the possibility of polling. <value>: polling mode. */ GLOBAL T_ACI_RETURN sAT_PlusFSP (T_ACI_CMD_SRC srcId, T_ACI_FSP_VAL value ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFSP()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the value parameter *------------------------------------------------------------------- */ switch( value ) { case( FSP_VAL_NotPresent ): break; case( FSP_VAL_PollDisabled ): case( FSP_VAL_PollEnable ): pT30CmdPrm -> FSPval = value; break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFAP | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FAP AT command which is responsible to set the address and polling capabilities. <sub>: destination subaddressing. <sep>: selective polling. <pwd>: password. */ GLOBAL T_ACI_RETURN sAT_PlusFAP (T_ACI_CMD_SRC srcId, T_ACI_FAP_VAL sub, T_ACI_FAP_VAL sep, T_ACI_FAP_VAL pwd ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("sAT_PlusFAP()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * process the sub parameter *------------------------------------------------------------------- */ switch( sub ) { case( FAP_VAL_NotPresent ): sub = pT30CmdPrm -> FAPsub; break; case( FAP_VAL_Disabled ): case( FAP_VAL_Enabled ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the sub parameter *------------------------------------------------------------------- */ switch( sep ) { case( FAP_VAL_NotPresent ): sep = pT30CmdPrm -> FAPsep; break; case( FAP_VAL_Disabled ): case( FAP_VAL_Enabled ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * process the sub parameter *------------------------------------------------------------------- */ switch( pwd ) { case( FAP_VAL_NotPresent ): pwd = pT30CmdPrm -> FAPpwd; break; case( FAP_VAL_Disabled ): case( FAP_VAL_Enabled ): break; default: ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * assign the parameters *------------------------------------------------------------------- */ pT30CmdPrm -> FAPsub = sub; pT30CmdPrm -> FAPsep = sep; pT30CmdPrm -> FAPpwd = pwd; /* *------------------------------------------------------------------- * start FIT timer *------------------------------------------------------------------- */ cmhT30_StartFIT(); return( AT_CMPL ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFDT | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FDT AT command which is responsible to transmit FAX data. */ GLOBAL T_ACI_RETURN sAT_PlusFDT (T_ACI_CMD_SRC srcId) { TRACE_FUNCTION ("sAT_PlusFDT()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId) OR !psaCC_ctbIsValid (t30ShrdPrm.cId) OR (t30ShrdPrm.faxStat NEQ FS_IDL AND t30ShrdPrm.faxStat NEQ FS_SND_DOC)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } /* *------------------------------------------------------------------- * stop FIT timer *------------------------------------------------------------------- */ cmhT30_StopFIT(); /* *------------------------------------------------------------------- * check entity status *------------------------------------------------------------------- */ if( t30EntStat.curCmd NEQ AT_CMD_NONE ) return( AT_BUSY ); t30EntStat.curCmd = AT_CMD_FDT; t30EntStat.entOwn = srcId; /* *------------------------------------------------------------------- * negotiate transmission parameters and send DCS *------------------------------------------------------------------- */ if( t30ShrdPrm.faxStat EQ FS_IDL OR t30ShrdPrm.faxStat EQ FS_DOC_TRF ) { cmhT30_NgtDCEPrms( srcId ); /* check for minimum speed condition */ if( t30NgtPrms.FCSbr < fnd_cmhPrm[srcId].t30CmdPrm.FMSbr ) { TRACE_EVENT("DISCONNECT CALL DUE TO FALL BELOW MINIMUM SPEED CONDITION"); t30ShrdPrm.faxStat = FS_IDL; t30EntStat.curCmd = AT_CMD_NONE; ccShrdPrm.datStat = DS_DSC_REQ; cmhT30_Deactivate (); ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_FaxMinSpeedCond ); return( AT_FAIL ); } cmhT30_SendCaps ( srcId, FRT_DCS ); } /* *------------------------------------------------------------------- * check for connect message *------------------------------------------------------------------- */ if( t30ShrdPrm.faxStat EQ FS_IDL OR t30ShrdPrm.faxStat EQ FS_DOC_TRF ) { R_AT( RAT_FCS, t30EntStat.entOwn ) ( t30NgtPrms.FCSvr, t30NgtPrms.FCSbr, t30NgtPrms.FCSwd, t30NgtPrms.FCSln, t30NgtPrms.FCSdf, t30NgtPrms.FCSec, t30NgtPrms.FCSbf, t30NgtPrms.FCSst, t30NgtPrms.FCSjp); } t30ShrdPrm.faxStat = FS_SND_DOC; pageSentFlg = FALSE; ppmPendFlg = FALSE; cmhT30_StartFIT(); TRACE_EVENT ("START DTE->DCE FAX DATA PHASE"); /* R_AT( RAT_CONNECT, t30EntStat.entOwn ) ( t30EntStat.curCmd, cmhT30_GetDataRate(), t30ShrdPrm.cId+1, FALSE ); */ return( AT_EXCT ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFDR | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FDR AT command which is responsible to receive FAX data. */ GLOBAL T_ACI_RETURN sAT_PlusFDR (T_ACI_CMD_SRC srcId) { TRACE_FUNCTION ("sAT_PlusFDR()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId) OR !psaCC_ctbIsValid (t30ShrdPrm.cId) OR fnd_cmhPrm[srcId].t30CmdPrm.FCRval EQ FCR_VAL_NoRcvCap OR (t30ShrdPrm.faxStat NEQ FS_IDL AND t30ShrdPrm.faxStat NEQ FS_RCV_DOC)) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } cmhT30_StopFIT(); /* *------------------------------------------------------------------- * check entity status *------------------------------------------------------------------- */ if( t30EntStat.curCmd NEQ AT_CMD_NONE ) return( AT_BUSY ); t30EntStat.curCmd = AT_CMD_FDR; t30EntStat.entOwn = srcId; /* *------------------------------------------------------------------- * check to send a DTC frame *------------------------------------------------------------------- */ if( DTCSentFlg EQ FALSE AND (t30ShrdPrm.faxStat EQ FS_IDL OR t30ShrdPrm.faxStat EQ FS_DOC_TRF) AND psaCC_ctb(t30ShrdPrm.cId)->calType EQ CT_MOC AND fnd_cmhPrm[t30EntStat.entOwn].t30CmdPrm.FSPval EQ FSP_VAL_PollEnable ) { DTCSentFlg = TRUE; cmhT30_SendCaps ( srcId, FRT_DTC ); } /* *------------------------------------------------------------------- * check to send a post page response *------------------------------------------------------------------- */ else if (t30ShrdPrm.faxStat EQ FS_RCV_DOC OR t30ShrdPrm.faxStat EQ FS_DOC_TRF) { t30ShrdPrm.sgn_snd = cmhT30_GetPpr(fnd_cmhPrm[srcId].t30CmdPrm.FPSppr); if( psaT30_Ppm( ) < 0 ) /* send ppm */ { TRACE_EVENT( "FATAL RETURN psaT30 in sAT_PlusFDR" ); ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Internal ); return( AT_FAIL ); } } /* *------------------------------------------------------------------- * check for connect message *------------------------------------------------------------------- */ t30ShrdPrm.faxStat = FS_RCV_DOC; return( AT_EXCT ); } /* +--------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | STATE : code ROUTINE : sAT_PlusFKS | +--------------------------------------------------------------------+ PURPOSE : This is the functional counterpart to the +FKS AT command which is responsible to terminate a FAX session. */ GLOBAL T_ACI_RETURN sAT_PlusFKS (T_ACI_CMD_SRC srcId) { TRACE_FUNCTION ("sAT_PlusFKS()"); /* check command source */ if(!cmh_IsVldCmdSrc (srcId) ) { ACI_ERR_DESC( ACI_ERR_CLASS_Ext, EXT_ERR_Parameter ); return( AT_FAIL ); } cmhT30_StopFIT(); /* check entity status */ if( t30EntStat.curCmd NEQ AT_CMD_NONE ) return( AT_BUSY ); /* check for active call */ if (!psaCC_ctbIsValid (t30ShrdPrm.cId)) return( AT_CMPL ); t30EntStat.curCmd = AT_CMD_FKS; t30EntStat.entOwn = srcId; /* disconnect T30 */ psaT30_Disconnect( ); return( AT_EXCT ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_Activate | +-------------------------------------------------------------------+ PURPOSE : set all nescessary parameters and activate T30 */ GLOBAL T_ACI_RETURN cmhT30_Activate ( T_ACI_CMD_SRC srcId, T_ACI_AT_CMD cmdId, SHORT cId ) { TRACE_FUNCTION ("cmhT30_Activate()"); /* check command source */ if(!cmh_IsVldCmdSrc (srcId)) return( AT_FAIL ); /* check entity status */ if( t30EntStat.curCmd NEQ AT_CMD_NONE ) return( AT_BUSY ); /* fill in activate parameters */ t30ShrdPrm.trans_rate = cmhT30_SelChnRate(); if( t30ShrdPrm.trans_rate EQ NOT_PRESENT_16BIT ) return( AT_FAIL ); t30ShrdPrm.bitord = cmhT30_SelBitOrder( srcId ); if( t30ShrdPrm.bitord EQ NOT_PRESENT_8BIT ) return( AT_FAIL ); t30ShrdPrm.half_rate = cmhT30_SelHlfRate(); t30ShrdPrm.threshold = T30_DEF_THLD; t30ShrdPrm.frames_per_prim = T30_DEF_FRMPRIM; t30ShrdPrm.hdlc_report = TRUE; t30ShrdPrm.test_mode = 0; /* needed for simulation */ t30ShrdPrm.cId = cId; t30EntStat.curCmd = cmdId; t30EntStat.entOwn = srcId; FHSstat = FHS_STAT_NormEnd; /* reset call termination status */ psaT30_Activate( ); return( AT_EXCT ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_Deactivate | +-------------------------------------------------------------------+ PURPOSE : set all nescessary parameters and deactivate T30 */ GLOBAL T_ACI_RETURN cmhT30_Deactivate ( void ) { UBYTE src_id = t30EntStat.entOwn; #ifdef FF_PSI T_ACI_DTI_PRC_PSI *src_infos = find_element (psi_src_params, src_id, cmhPSItest_srcId); #endif /*FF_PSI*/ T_DTI_CNTRL info; TRACE_FUNCTION ("cmht30_Deactivate()"); if (dti_cntrl_get_info_from_src_id( src_id, &info) EQ FALSE) { TRACE_EVENT_P1("cannot find info for src_id=%d", src_id); return( AT_FAIL ); } if (dti_cntrl_is_dti_channel_connected(DTI_ENTITY_T30, info.dti_id)) { T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_ACI}; #ifdef FF_PSI if (src_infos NEQ NULL) dti_cntrl_est_dpath_indirect ( src_id, entity_list, 1, SPLIT, atiPSI_dti_cb, DTI_CPBLTY_CMD, DTI_CID_NOTPRESENT); else #endif dti_cntrl_est_dpath_indirect ( src_id, entity_list, 1, SPLIT, atiUART_dti_cb, DTI_CPBLTY_CMD, DTI_CID_NOTPRESENT); return( AT_EXCT ); } /* reset parameters to initial value */ cmhT30_RstNgtPrms(); /* reset negotiation parameter */ /* deactivate */ psaT30_Deactivate( ); return( AT_EXCT ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_Modify | +-------------------------------------------------------------------+ PURPOSE : set all nescessary parameters and modify T30 */ GLOBAL T_ACI_RETURN cmhT30_Modify (void) { TRACE_FUNCTION ("cmhT30_Modify()"); /* fill in modify parameters */ t30ShrdPrm.trans_rate = cmhT30_SelUsrRate(); if (t30ShrdPrm.trans_rate EQ NOT_PRESENT_16BIT) { t30ShrdPrm.trans_rate = cmhT30_SelChnRate(); } if (t30ShrdPrm.trans_rate EQ NOT_PRESENT_16BIT) return (AT_FAIL); t30ShrdPrm.half_rate = cmhT30_SelHlfRate(); psaT30_Modify( ); return( AT_EXCT ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_SendCaps | +-------------------------------------------------------------------+ PURPOSE : Send local DCE capability parameters */ GLOBAL T_ACI_RETURN cmhT30_SendCaps ( T_ACI_CMD_SRC srcId, T_T30_FRTP frmTyp ) { T_T30_CMD_PRM * pT30CmdPrm; /* points to T30 command parameters */ TRACE_FUNCTION ("cmhT30_SendCaps()"); /* *------------------------------------------------------------------- * check command source *------------------------------------------------------------------- */ if(!cmh_IsVldCmdSrc (srcId)) return( AT_FAIL ); pT30CmdPrm = &fnd_cmhPrm[srcId].t30CmdPrm; /* *------------------------------------------------------------------- * build capability parameter *------------------------------------------------------------------- */ t30ShrdPrm.hdlc_snd.crp = FALSE; cmhT30_BuildSndFrm( srcId, frmTyp ); switch( frmTyp ) { /* *--------------------------------------------------------------- * for a DIS frame *--------------------------------------------------------------- */ case( FRT_DIS ): t30ShrdPrm.hdlc_snd.v_dcs = t30ShrdPrm.hdlc_snd.v_dtc = FALSE; t30ShrdPrm.hdlc_snd.c_nsc = t30ShrdPrm.hdlc_snd.c_nss = 0; t30ShrdPrm.hdlc_snd.c_tsi = t30ShrdPrm.hdlc_snd.c_cig = 0; /* non-standard facility */ t30ShrdPrm.hdlc_snd.c_nsf = pT30CmdPrm -> FNSlen; if (pT30CmdPrm -> FNSlen) { memcpy( t30ShrdPrm.hdlc_snd.nsf, pT30CmdPrm -> FNSoct, pT30CmdPrm -> FNSlen); } if( pT30CmdPrm -> FLIstr[0] NEQ 0 ) /* calling subscr. id */ { t30ShrdPrm.hdlc_snd.c_csi = strlen( pT30CmdPrm -> FLIstr ); strncpy( (char *) t30ShrdPrm.hdlc_snd.csi, (char *) pT30CmdPrm -> FLIstr, t30ShrdPrm.hdlc_snd.c_csi ); } else { t30ShrdPrm.hdlc_snd.c_csi = 0; } break; /* *--------------------------------------------------------------- * for a DTC frame *--------------------------------------------------------------- */ case( FRT_DTC ): t30ShrdPrm.hdlc_snd.v_dcs = t30ShrdPrm.hdlc_snd.v_dis = FALSE; t30ShrdPrm.hdlc_snd.c_nsf = t30ShrdPrm.hdlc_snd.c_nss = 0; t30ShrdPrm.hdlc_snd.c_tsi = t30ShrdPrm.hdlc_snd.c_csi = 0; /* non-standard facility */ t30ShrdPrm.hdlc_snd.c_nsc = pT30CmdPrm -> FNSlen; if (pT30CmdPrm -> FNSlen) { memcpy( t30ShrdPrm.hdlc_snd.nsc, pT30CmdPrm -> FNSoct, pT30CmdPrm -> FNSlen); } if( pT30CmdPrm -> FPWpwd[0] NEQ 0 ) /* password string */ { t30ShrdPrm.hdlc_snd.c_pwd = strlen( pT30CmdPrm -> FPWpwd ); strncpy( (char *) t30ShrdPrm.hdlc_snd.pwd, (char *) pT30CmdPrm -> FPWpwd, t30ShrdPrm.hdlc_snd.c_pwd ); } else { t30ShrdPrm.hdlc_snd.c_pwd = 0; } if( pT30CmdPrm -> FPAsep[0] NEQ 0 ) /* selective polling string */ { t30ShrdPrm.hdlc_snd.c_sep = strlen( pT30CmdPrm -> FPAsep ); strncpy( (char *) t30ShrdPrm.hdlc_snd.sep, (char *) pT30CmdPrm -> FPAsep, t30ShrdPrm.hdlc_snd.c_sep ); } else { t30ShrdPrm.hdlc_snd.c_sep = 0; } if( pT30CmdPrm -> FPIstr[0] NEQ 0 ) /* calling subscr. id */ { t30ShrdPrm.hdlc_snd.c_cig = strlen( pT30CmdPrm -> FPIstr ); strncpy( (char *) t30ShrdPrm.hdlc_snd.cig, (char *) pT30CmdPrm -> FPIstr, t30ShrdPrm.hdlc_snd.c_cig ); } else { t30ShrdPrm.hdlc_snd.c_cig = 0; } break; /* *--------------------------------------------------------------- * for a DCS frame *--------------------------------------------------------------- */ case( FRT_DCS ): t30ShrdPrm.hdlc_snd.v_dis = t30ShrdPrm.hdlc_snd.v_dtc = FALSE; t30ShrdPrm.hdlc_snd.c_nsc = t30ShrdPrm.hdlc_snd.c_nsf = 0; t30ShrdPrm.hdlc_snd.c_csi = t30ShrdPrm.hdlc_snd.c_cig = 0; /* non-standard facility */ t30ShrdPrm.hdlc_snd.c_nss = pT30CmdPrm -> FNSlen; if (pT30CmdPrm -> FNSlen) { memcpy( t30ShrdPrm.hdlc_snd.nss, pT30CmdPrm -> FNSoct, pT30CmdPrm -> FNSlen); } if( pT30CmdPrm -> FPWpwd[0] NEQ 0 ) /* password string */ { t30ShrdPrm.hdlc_snd.c_pwd = strlen( pT30CmdPrm -> FPWpwd ); strncpy( (char *) t30ShrdPrm.hdlc_snd.pwd, (char *) pT30CmdPrm -> FPWpwd, t30ShrdPrm.hdlc_snd.c_pwd ); } else { t30ShrdPrm.hdlc_snd.c_pwd = 0; } if( pT30CmdPrm -> FSAsub[0] NEQ 0 ) /* subaddress string */ { t30ShrdPrm.hdlc_snd.c_sub = strlen( pT30CmdPrm -> FSAsub ); strncpy( (char *) t30ShrdPrm.hdlc_snd.sub, (char *) pT30CmdPrm -> FSAsub, t30ShrdPrm.hdlc_snd.c_sub ); } else { t30ShrdPrm.hdlc_snd.c_sub = 0; } if( pT30CmdPrm -> FLIstr[0] NEQ 0 ) /* transmitting subscr. id */ { t30ShrdPrm.hdlc_snd.c_tsi = strlen( pT30CmdPrm -> FLIstr ); strncpy( (char *) t30ShrdPrm.hdlc_snd.tsi, (char *) pT30CmdPrm -> FLIstr, t30ShrdPrm.hdlc_snd.c_tsi ); } else { t30ShrdPrm.hdlc_snd.c_tsi = 0; } break; } /* *------------------------------------------------------------------- * send capability parameter *------------------------------------------------------------------- */ psaT30_Capabilities( ); /* *------------------------------------------------------------------- * check for T30 modification *------------------------------------------------------------------- */ if( frmTyp EQ FRT_DCS ) { if( cmhT30_Chk4TCHAdpt() ) { ccShrdPrm.datStat = DS_TCH_MDF; /* wait for TCH change */ } else { if( cmhT30_Modify() NEQ AT_EXCT ) { ccShrdPrm.datStat = DS_DSC_REQ; cmhT30_Deactivate(); } } } return( AT_EXCT ); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | ROUTINE : cmhT30_PPMRcvd | +-------------------------------------------------------------------+ PURPOSE : post page message was received */ /* does not seem to be called */ #if 0 GLOBAL void cmhT30_PPMRcvd ( UBYTE ppm ) { TRACE_FUNCTION ("cmhT30_PPMRcvd()"); /* determine type of post page message */ switch( ppm ) { case( SGN_MPS ): /* multi-page signal */ case( SGN_EOP ): /* end of procedure */ t30ShrdPrm.faxStat = FS_SND_DOC; /* stay in send document */ break; case( SGN_EOM ): /*--- no more doc available for polling if polled ---*/ if( ccShrdPrm.ctb[t30ShrdPrm.cId].calType EQ CT_MTC ) { fnd_cmhPrm[t30EntStat.entOwn].t30CmdPrm.FLPval = FLP_VAL_NoPollDoc; } t30ShrdPrm.faxStat = FS_DOC_TRF; /* switch to document transfered */ break; default: return; } /* send PPM to T.30 */ t30ShrdPrm.sgn_snd = ppm; if( PRIRcvdFlg AND fnd_cmhPrm[t30EntStat.entOwn].t30CmdPrm.FIEval EQ FIE_VAL_AcceptPRI) t30ShrdPrm.sgn_snd |= PRI_MRK; if( pageSentFlg EQ TRUE ) { if( psaT30_Ppm( ) < 0 ) /* T30 PPM request */ { TRACE_EVENT( "FATAL RETURN psaT30 in cmhT30_PPMRcvd" ); } } else ppmPendFlg = TRUE; } #endif /* 0 */ /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30S | | ROUTINE : cmhT30_PRIRcvd | +-------------------------------------------------------------------+ PURPOSE : procedure interrupt message was received */ GLOBAL void cmhT30_PRIRcvd ( void ) { TRACE_FUNCTION ("cmhT30_PRIRcvd()"); PRIRcvdFlg = TRUE; } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : CMH_T30 | | ROUTINE : cmhT30_FITTimeout | +-------------------------------------------------------------------+ PURPOSE : handle FAX inactivity timeout */ GLOBAL void cmhT30_FITTimeout ( void ) { TRACE_FUNCTION( "cmhT30_FITTimeout()" ); if (!psaCC_ctbIsValid (t30ShrdPrm.cId)) { TRACE_ERROR ("t30ShrdPrm.cId invalid"); return; } /* *------------------------------------------------------------------- * notify CC to release the call *------------------------------------------------------------------- */ t30ShrdPrm.faxStat = FS_IDL; t30EntStat.curCmd = AT_CMD_NONE; cmhCC_T30_Failed(); if( fnd_cmhPrm[t30EntStat.entOwn].t30CmdPrm.FITact EQ FIT_ACT_OnHookRst ) fnd_cmhPrm[t30EntStat.entOwn].t30CmdPrm.FCLASSclass = FCLASS_CLASS_Data; } #endif /* DTI OR FF_FAX*/ /*==== EOF ========================================================*/