view src/g23m-aci/aci/cmh_ss.h @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +0000
parents fa8dc04885d8
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  Project :  GSM-PS (6147)
|  Modul   :  CMH_SS
+----------------------------------------------------------------------------- 
|  Copyright 2002 Texas Instruments Berlin, AG 
|                 All rights reserved. 
| 
|                 This file is confidential and a trade secret of Texas 
|                 Instruments Berlin, AG 
|                 The receipt of or possession of this file does not convey 
|                 any rights to reproduce or disclose its contents or to 
|                 manufacture, use, or sell anything it may describe, in 
|                 whole, or in part, without the specific written consent of 
|                 Texas Instruments Berlin, AG. 
+----------------------------------------------------------------------------- 
|  Purpose :  Definitions for the command handler of the 
|             Subscriber Identity Module ( SIM )
+----------------------------------------------------------------------------- 
*/ 

#ifndef CMH_SS_H
#define CMH_SS_H

/*==== CONSTANTS ==================================================*/
#define MAX_CF_FEAT_NR  (5) /* maximum number of forwarding feature
                               list entries */
#define MAX_CB_INFO_NR  (5) /* maximum number of barring info list
                               entries */
#define MAX_CW_BSG_NR   (5) /* maximum number of basic service group
                               entries */
#define MAX_CC_FEAT_NR  (5) /* maximum number of call completion feature
                               entries */
#define CCFC_TIME_MAX   (30)/* +CCFC parameter <time> */
#define CCFC_TIME_MIN   (5) 

/*==== TYPES ======================================================*/

/* Structure for Index to String mapping, i.e. to each number in "idx" field corresponds "cod" string*/
typedef struct
{
  BYTE idx; 
  char* cod; 
} T_IDX_TO_STR_MAP;

/* Structure for Index to Digits mapping, i.e. to each number in "idx" field corresponds "cod" number*/
typedef struct
{
  SHORT idx; 
  SHORT cod; 
} T_IDX_TO_DIG_MAP;

typedef enum
{
  CUSDR_EXT_USSD_RES_Not_Pending = 0,
  CUSDR_EXT_USSD_RES_Request,
  CUSDR_EXT_USSD_RES_Notify
}
T_CUSDR_EXT_USSD_RES;

 
/*==== PROTOTYPES =================================================*/
/* Implements Measure # 85 */
EXTERN BOOL cmhSS_checkCCFC_RSN(T_ACI_CCFC_RSN reason, UBYTE *ssCd);
/* Implements Measure # 166 */
EXTERN BOOL cmhSS_getSSCd(T_ACI_FAC fac, UBYTE *ssCd);
EXTERN BOOL checkSSforFDN(char *cSSString);
EXTERN T_ACI_RETURN checkFDNSendSS(T_ACI_CMD_SRC srcId, CHAR *pSSString);

EXTERN char *mapIdxToString(const T_IDX_TO_STR_MAP *table, BYTE index);
EXTERN BYTE mapIdxToDigit(const T_IDX_TO_DIG_MAP *table, BYTE index, BYTE * result);

#ifdef SIM_TOOLKIT
  EXTERN T_ACI_RETURN cmhSS_SendToSAT(T_ACI_CMD_SRC srcId, CHAR *pSSString);
#endif /* SIM_TOOLKIT */

EXTERN T_ACI_RETURN cmhSS_CF_SAT_Handle(T_ACI_CMD_SRC srcId,
                                    T_ACI_CCFC_RSN reason,
                                    T_ACI_CCFC_MOD mode,
                                    CHAR*          number,
                                    T_ACI_TOA*     type,
                                    T_ACI_CLASS    class_type,
                                    CHAR*          subaddr,
                                    T_ACI_TOS*     satype,
                                    SHORT          time);
EXTERN T_ACI_RETURN cmhSS_CW_SAT_Handle(T_ACI_CMD_SRC srcId,
                                    T_ACI_CCFC_MOD mode,
                                    T_ACI_CLASS    class_type);

T_ACI_RETURN cmhSS_CLIP_SAT_Handle(T_ACI_CMD_SRC srcId);
T_ACI_RETURN cmhSS_CLIR_SAT_Handle(T_ACI_CMD_SRC srcId);
T_ACI_RETURN cmhSS_COLP_SAT_Handle(T_ACI_CMD_SRC srcId);
T_ACI_RETURN cmhSS_COLR_SAT_Handle(T_ACI_CMD_SRC srcId);
T_ACI_RETURN cmhSS_CCBS_SAT_Handle(T_ACI_CMD_SRC srcId, T_ACI_CCBS_MOD mode, SHORT idx);
T_ACI_RETURN cmhSS_CNAP_SAT_Handle(T_ACI_CMD_SRC srcId);
T_ACI_RETURN cmhSS_Call_Barr_SAT_Handle(T_ACI_CMD_SRC srcId, 
                        T_ACI_CLCK_MOD mode, 
                        T_ACI_FAC fac, 
                        CHAR  *passwd, 
                        T_ACI_CLASS    class_type);


EXTERN SHORT cmhSS_TransFail             ( SHORT sId );

EXTERN T_ACI_CLASS cmhSS_GetClass        ( T_basicService * bs );
EXTERN T_ACI_CLASS cmhSS_GetClassType    ( UBYTE bsTp, UBYTE bsCd );
EXTERN T_ACI_CLASS cmhSS_GetCbClassType  ( UBYTE bsTp, UBYTE bsCd );
EXTERN T_ACI_CLASS cmhSS_GetClassLst     ( T_basicServiceGroupList * bs );
EXTERN BOOL        cmhSS_CheckClass      ( T_ACI_CLASS class_type,
                                           UBYTE *bs1, UBYTE *bst1,
                                           UBYTE *bs2, UBYTE *bst2,
                                           BOOL  *mltyTrnFlg );
EXTERN BOOL        cmhSS_CheckCbClass    ( T_ACI_CLASS class_type,
                                           UBYTE *bs1, UBYTE *bst1,
                                           UBYTE *bs2, UBYTE *bst2,
                                           BOOL  *mltyTrnFlg );
EXTERN BOOL cmhSS_CheckClassInterr       ( T_ACI_CLASS class_type);
EXTERN BOOL cmhSS_CheckCbClassInterr     ( T_ACI_CLASS class_type);
EXTERN void        cmhSS_GetBscSrv       ( T_basicService * p, 
                                           UBYTE * bs,
                                           UBYTE * bst );
EXTERN BOOL        cmhSS_CheckBscSrv     ( UBYTE bsCd,
                                           UBYTE *bs, UBYTE *bst, T_ACI_CLASS *class_type );
EXTERN void        cmhSS_flagTrn         ( SHORT sId, USHORT * flags );
EXTERN BOOL        cmhSS_tstAndUnflagTrn ( SHORT sId, USHORT * flags );
EXTERN void        cmhSS_SSResultFailure ( SHORT sId );
EXTERN void        cmhSS_SSInterrogated  ( SHORT sId, 
                                           T_INTERROGATE_SS_RES *irgtSS );
EXTERN void        cmhSS_SSRegistrated   ( SHORT sId, 
                                           T_REGISTER_SS_RES *regSS );
EXTERN void        cmhSS_SSErased        ( SHORT sId, 
                                           T_ERASE_SS_RES *ersSS );
EXTERN void        cmhSS_SSActivated     ( SHORT sId, 
                                           T_ACTIVATE_SS_RES *actSS );
EXTERN void        cmhSS_SSDeactivated   ( SHORT sId, 
                                           T_DEACTIVATE_SS_RES *deactSS );
EXTERN void        cmhSS_getPassword     ( SHORT sId, 
                                           T_GET_PWD_INV *getPWD );
EXTERN void        cmhSS_SSPWDRegistrated( SHORT sId, 
                                           T_REGISTER_PWD_RES *regPWD );
EXTERN void        cmhSS_CCNtryErased    ( SHORT sId, 
                                           T_ERASE_CC_ENTRY_RES *ersCCNtry );
EXTERN void        cmhSS_USSDRequest     ( SHORT sId, 
                                           T_USSD_REQ_INV *ussdReq );
EXTERN void        cmhSS_USSDNotify      ( SHORT sId, 
                                           T_USSD_NOTIFY_INV *ussdNtfy );
EXTERN void        cmhSS_USSDReqProcessed( SHORT sId, 
                                           T_PROCESS_USSD_REQ_RES *prcUSSDReq );
EXTERN void        cmhSS_USSDDatProcessed( SHORT sId, 
                                           T_PROCESS_USSD_RES *prcUSSDdat );
EXTERN void        cmhSS_FwdChckSS       ( SHORT sId );

#ifdef KSD_H
EXTERN T_ACI_RETURN cmhSS_ksdCL          ( T_ACI_CMD_SRC srcId,
                                           T_ACI_KSD_CL_PRM * clPrm );
/* Implements Measure # 38 */
/* cmhSS_ksdCWCBStartTrans() directly called from cmhCC_chkKeySeq() */
EXTERN T_ACI_RETURN cmhSS_ksdUBLK        ( T_ACI_CMD_SRC srcId,
                                           T_ACI_KSD_UBLK_PRM * ublkPrm );
EXTERN T_ACI_RETURN cmhSS_ksdPW          ( T_ACI_CMD_SRC srcId,
                                           T_ACI_KSD_PWD_PRM * pwPrm );
/* Implements Measure # 38 */
/* cmhSS_ksdCWCBStartTrans() directly called from cmhCC_chkKeySeq() */
EXTERN T_ACI_RETURN cmhSS_ksdCF          ( T_ACI_CMD_SRC srcId,
                                           T_ACI_KSD_CF_PRM * cfPrm );
EXTERN T_ACI_RETURN cmhSS_ksdUSSD        ( T_ACI_CMD_SRC srcId,
                                           T_ACI_KSD_USSD_PRM * ussdPrm );
EXTERN T_ACI_RETURN cmhSS_ksdCCBS        ( T_ACI_CMD_SRC srcId,
                                           T_ACI_KSD_CCBS_PRM * ccbsPrm );
EXTERN T_ACI_RETURN cmhSS_ksdIMEI        ( T_ACI_CMD_SRC srcId );
#endif /* KSD_H */

EXTERN UBYTE        cmhSS_ksdGetOpCd     ( UBYTE opcSS );
EXTERN void         cmhSS_ksdBuildErrRslt( SHORT sId, T_ACI_KSIR * ksStat, UBYTE err );
EXTERN UBYTE        cmhSS_ksdFillFwdFeatList( T_forwardingFeatureList * ffSS,
                                              T_CF_FEAT * cfFeat );
EXTERN UBYTE        cmhSS_ksdFillCbFeatList( T_callBarringFeatureList * bfSS,
                                             T_CB_INFO * cbInfo );
EXTERN UBYTE        cmhSS_ksdFillBSGList ( T_basicServiceGroupList * bsgSS,
                                           T_Cx_BSG * cxBSG );
EXTERN void         cmhSS_ksdFillFwdRes  ( T_forwardingInfo * fiSS,
                                           T_ACI_KSIR *ksStat,
                                           T_CF_FEAT * cfFeat );
EXTERN void         cmhSS_ksdFillCbRes   ( T_callBarringInfo * biSS,
                                           T_ACI_KSIR *ksStat,
                                           T_CB_INFO * cbInfo );
EXTERN void         cmhSS_ksdFillCwRes   ( T_ssData   *datSS,
                                           T_ACI_KSIR *ksStat,
                                           T_Cx_BSG   *cwBSG );
EXTERN UBYTE        cmhSS_ksdFillCCBSFeatList( T_ccbsFeatureList * ccbsfSS,
                                               T_CC_FEAT * ccFeat );

#ifdef TI_PS_FF_AT_P_CMD_CSCN
EXTERN T_ACI_RETURN cmhSS_sendFie        ( T_ACI_FAC_DIR        tDirection,
                                           T_ACI_FAC_TRANS_TYPE tType,
                                           T_fac_inf           *fie );
#endif /* TI_PS_FF_AT_P_CMD_CSCN */

EXTERN UBYTE cmhSS_getCdFromImei         ( T_ACI_IMEI* imei );

/* Implements Measure # 38 */
EXTERN T_ACI_RETURN cmhSS_ksdCWCBStartTrans( T_ACI_CMD_SRC srcId,  
                                             T_ACI_KSD_CMD ksdCmd,
                                             T_KSD_SEQPARAM * seqPrm );

/*==== EXPORT =====================================================*/
#endif /* CMH_SS_H */

/*==== EOF =======================================================*/