view src/g23m-aci/aci/cmh.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-F&D (8411)
|  Modul   :  CMH
+----------------------------------------------------------------------------- 
|  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 AT Command Handler
+----------------------------------------------------------------------------- 
*/ 

#ifndef CMH_H
#define CMH_H

/*==== CONSTANTS ==================================================*/
typedef enum
{
  RAT_OK  = 0,
  RAT_CONNECT,
  RAT_CME,
  RAT_NO_CARRIER,
  RAT_CRING,
  RAT_DR,
  RAT_CR,
  RAT_CPIN,
  RAT_COPS,
  RAT_CREG,
  RAT_CCWA,
  RAT_CLIP,
  RAT_CDIP,  
  RAT_COLP,
  RAT_CRING_OFF,

#ifdef FF_FAX
  RAT_FCO,
  RAT_FIS,
  RAT_FTI,
  RAT_FCS,
  RAT_FCI,
#endif

  RAT_CMS,
  RAT_CSMS,
  RAT_CMGS,
  RAT_CMSS,
  RAT_CMGW,
  RAT_CDS,
  RAT_CMGC,
  RAT_CMGD,
  RAT_CMGR,
  RAT_CMGL,
  RAT_CMTI,
  RAT_CMT,
  RAT_CBM,
  RAT_CPMS,

#ifdef FF_FAX
  RAT_FHT,
  RAT_FHR,
  RAT_FSA,
  RAT_FPA,
  RAT_FPW,
  RAT_FET,
  RAT_FVO,
  RAT_FPO,
  RAT_FPI,
  RAT_FNF,
  RAT_FNS,
  RAT_FNC,
  RAT_FHS,
  RAT_FPS,
  RAT_FTC,
#endif

  RAT_ILRR,
  RAT_BUSY,
  RAT_NO_ANSWER,
  RAT_SIMREM,
  RAT_CLIR,
  RAT_COLR,
  RAT_CSSI,
  RAT_CSSU,
  RAT_CUSD,
  RAT_CCFC,
  RAT_CLCK,
  RAT_CIMI,
  RAT_SATI,
  RAT_SATE,
  RAT_KSIR,
  RAT_CPI,
  RAT_CTYI,
  RAT_CNUM,
  RAT_CPOL,
  RAT_CCCM,
  RAT_CTV,
  RAT_SATN,
  RAT_SATA,
  RAT_SMS_READY,
  RAT_PHB_STATUS,
  RAT_SIMINS,
  RAT_CRSM,
  RAT_CSIM,
  RAT_CCBS,
  RAT_CCWV,
  RAT_CNAP,
  RAT_SIG_SMS,
  RAT_CLAN,
  RAT_CLAE,
  RAT_CSQ,
  RAT_ALS,
  RAT_CTZV,
  RAT_P_CREG,
#ifdef REL99
  RAT_P_CMGRS,
#endif /* REL99 */
#ifdef GPRS
  RAT_CGACT,
  RAT_CGDATA,
  RAT_CGANS,
  RAT_CGEREP,
  RAT_CGREG,
  RAT_QOS_MOD,
  RAT_SNCNT,
  RAT_P_CGREG,
#ifdef REL99
  RAT_CGCMOD,
#endif
  RAT_P_CGEV,
#endif  /* GPRS */

#ifdef FF_EM_MODE
  RAT_EM,
  RAT_EMET,
  RAT_EMETS,
#endif /* FF_EM_MODE */

#ifdef FF_CPHS
  RAT_CPNUMS,
  RAT_CPVWI,
  RAT_CPROAM,
#endif /* FF_CPHS */

  RAT_CIEV,
  RAT_RDL,
#ifdef TI_PS_FF_AT_P_CMD_RDLB
  RAT_RDLB,
#endif /* TI_PS_FF_AT_P_CMD_RDLB */
  RAT_CCCN,
  RAT_CSSN,

  RAT_CSTAT,
  RAT_Z,
#ifdef TI_PS_FF_AT_P_CMD_CPRSM
  RAT_CPRSM,
#endif /*TI_PS_FF_AT_P_CMD_CPRSM*/
  RAT_P_CTZV,
  RAT_P_CPRI,
  RAT_P_SIMEF,
  RAT_P_CNIV,
  RAT_P_COPS,
  RAT_P_CMGR,
  RAT_P_CMGL,
#ifdef FF_CPHS_REL4
  RAT_P_CFIS,
  RAT_P_MWIS,
  RAT_P_MWI,
  RAT_P_MBI,
  RAT_P_MBDN,
#endif /* FF_CPHS_REL4 */
  RAT_MAX

} RAT_ID;

/*==== TYPES ======================================================*/
typedef struct entStatus          /* entity status */
{
  T_ACI_CMD_SRC  entOwn;          /* entity owner */
  T_ACI_AT_CMD   curCmd;          /* current command processing */
} T_ENT_STAT;

typedef struct mmCmdPrm          /* command parameters related to MM */
{
  T_ACI_COPS_FRMT COPSfrmt;
  T_ACI_NRG_RGMD  NRGregMode;
  T_ACI_NRG_SVMD  NRGsrvMode;
  T_ACI_NRG_FRMT  NRGoprFrmt;
  T_ACI_CSQ_MODE  CSQworkStat;
  T_ACI_CTZR_MODE CTZRMode;
  T_ACI_CTZU_MODE CTZUMode;
  T_ACI_PCTZV_MODE PCTZVMode;
  T_ACI_CNIV_MODE CNIVMode;
  T_ACI_IND_MODE  sIndicationParam;
} T_MM_CMD_PRM;

typedef struct ccCmdPrm          /* command parameters related to CC */
{
  T_ACI_CLIR_MOD  CLIRmode;
  T_ACI_DCD_MOD   DCDmode;
  T_ACI_TOA       CSTAtoa;
  BOOL            CSTAdef;
  T_ACI_CHLD_MOD  CHLDmode;
  T_ACI_CCUG_IDX  CCUGidx;
  T_ACI_CCUG_INFO CCUGinfo;
  T_ACI_CCUG_MOD  CCUGmode;
  USHORT           mltyCncFlg;
  USHORT           mltyDscFlg;
  T_ACI_ALS_MOD   ALSmode;      /* mode for Alternate Line Service */
  T_ACI_CTTY_MOD  CTTYmode;     /* TTY Service notification */
  T_ACI_CC_CSCN_MOD CSCNcc_mode;
} T_CC_CMD_PRM;

typedef struct simCmdPrm      /* command parameters related to SIM */
{
  UBYTE             CNUMActRec;
  UBYTE             CNUMOutput;
  T_ACI_CPOL_FRMT   CPOLfrmt;
  UBYTE             CPOLact;
  UBYTE             CPOLidx;
  UBYTE             CPOLidx2;
  T_ACI_CPOL_MOD    CPOLmode;
  UBYTE             CPOLplmn[3];
  UBYTE             CLANact;
} T_SIM_CMD_PRM;

typedef struct ssCmdPrm       /* command parameters related to SS */
{
  UBYTE           CXXXpwd[MAX_PWD_NUM+1];
  UBYTE           CXXXnewPwd[MAX_PWD_NUM+1];
  UBYTE           CXXXnewPwd2[MAX_PWD_NUM+1];
  USHORT           mltyTrnFlg;
  T_ACI_SS_CSCN_MOD CSCNss_mode;
} T_SS_CMD_PRM;

typedef struct phbCmdPrm      /* command parameters related to PHB */
{
  T_ACI_PB_STOR   cmhStor;
  UBYTE           phbStor;      /* T_PHB_TYPE */
  USHORT          order_num;    /* Next matching entry, 0 if none */
  SHORT           fndRec;
  UBYTE           wrtRec;
  T_ACI_CSVM_MOD  CSVMmode;
  T_ACI_CLAE_MOD  CLAEmode;
  UBYTE           curCmd;
  UBYTE           temp_cmhStor; /* These data types are used to hold */
  UBYTE           temp_phbStor; /* the phone book storage types temprorily, in
                                   case of SIM PIN-2 verification. These values
                                   are assigned to the actual storage fileds
                                   when SIM PIN-2 verification confirmation
                                   comes without any ERROR. */
} T_PHB_CMD_PRM;

/* Fax and data related command parameters have been moved to a specific
structure in cmh_ra.h */
typedef struct cmhCmdPrm      /* handler command parameter */
{
  T_MM_CMD_PRM  mmCmdPrm;
  T_CC_CMD_PRM  ccCmdPrm;
  T_SIM_CMD_PRM simCmdPrm;
  T_SS_CMD_PRM  ssCmdPrm;
  T_PHB_CMD_PRM phbCmdPrm;

} T_CMH_PRM;

/*==== PROTOTYPES =================================================*/
EXTERN void       cmh_Init            ( void );
EXTERN void       cmh_Reset           ( T_ACI_CMD_SRC srcId, BOOL atz );
EXTERN BOOL       cmh_IsVldCmdSrc     ( T_ACI_CMD_SRC cmdSrc );
EXTERN UBYTE      cmh_mergeTOA        ( UBYTE ton, UBYTE npi );
EXTERN UBYTE      cmh_mergeTOS        ( UBYTE tos, UBYTE oe );
EXTERN void       cmh_demergeTOA      ( UBYTE toa, UBYTE* ton, UBYTE* npi );
EXTERN void       cmh_demergeTOS      ( UBYTE tosa, UBYTE* tos, UBYTE* oe );
EXTERN CHAR*      cmh_setToaDef       ( CHAR* number, T_ACI_TOA *toa );
EXTERN USHORT     cmh_packBCD         ( UBYTE *bcd_out, const UBYTE *char_in,
                                        USHORT len_in);
EXTERN USHORT     cmh_unpackBCD       ( UBYTE *char_out, const UBYTE *bcd_in,
                                        USHORT len_in);
EXTERN void       cmh_unpackSCTS      ( T_ACI_VP_ABS *scts,
                                        const UBYTE *buf_in );
EXTERN void       cmh_logRslt         ( T_ACI_CMD_SRC dest, RAT_ID rat,
                                        T_ACI_AT_CMD cmd,   SHORT cId,
                                        T_ACI_BS_SPEED spd, T_ACI_CME_ERR err );
EXTERN void       cmh_cvtToDefGsm     ( CHAR*   in,
                                        CHAR*   out,
                                        USHORT* len );
EXTERN void       cmh_cvtFromDefGsm   ( CHAR*   in,
                                        USHORT  len,
                                        CHAR*   out );
EXTERN UBYTE      cmh_set_delayed_call( UCHAR (*call) (void*), void* arg );
EXTERN UBYTE      cmh_start_delayed_call ( ULONG ms );
EXTERN UBYTE      cmh_timeout         ( USHORT handle );
EXTERN SHORT      cmh_bldCalPrms      ( char * pDialStr, T_CLPTY_PRM * calPrm );
EXTERN UBYTE      qAT_CallActive        ( void );
EXTERN void        cmhSMS_disableAccess ( void );
EXTERN T_ACI_RETURN cmhSIM_ReadTranspEF ( T_ACI_CMD_SRC srcId,
                                          T_ACI_AT_CMD  cmd,
                                          BOOL          v_path_info,
                                          T_path_info   *path_info_ptr,
                                          USHORT        datafield,
                                          USHORT        offset,
                                          UBYTE         explen,
                                          UBYTE       * exchData,
                                          void      (*rplyCB)(SHORT));
EXTERN T_ACI_RETURN cmhSIM_WriteTranspEF (T_ACI_CMD_SRC srcId,
                                          T_ACI_AT_CMD  cmd,
                                          BOOL          v_path_info,
                                          T_path_info   *path_info_ptr,
                                          USHORT        datafield,
                                          USHORT        offset,
                                          UBYTE         datalen,
                                          UBYTE       * exchData,
                                          void      (*rplyCB)(SHORT));
#ifdef GPRS
GLOBAL void cp_pdp_primitive(T_SMREG_PDP_ACTIVATE_CNF * pdp_activate_cnf,
                             T_PPP_PDP_ACTIVATE_RES *activate_result);
#endif
GLOBAL T_ACI_RETURN cmhSIM_WriteRecordEF (T_ACI_CMD_SRC srcId,
                                          T_ACI_AT_CMD  cmd,
                                          BOOL          v_path_info,
                                          T_path_info   *path_info_ptr,
                                          USHORT        datafield,
                                          UBYTE         record,
                                          UBYTE         datalen,
                                          UBYTE       * exchData,
                                          void      (*rplyCB)(SHORT));
GLOBAL T_ACI_RETURN cmhSIM_ReadRecordEF ( T_ACI_CMD_SRC srcId,
                                          T_ACI_AT_CMD  cmd,
                                          BOOL          v_path_info,
                                          T_path_info   *path_info_ptr,
                                          USHORT        datafield,
                                          UBYTE         record,
                                          UBYTE         explen,
                                          UBYTE       * exchData,
                                          void      (*rplyCB)(SHORT));
GLOBAL T_ACI_RETURN cmhSMS_ReadParams (T_ACI_CMD_SRC  srcId,
                                       T_ACI_AT_CMD   cmd,
                                       SHORT          recNr);
GLOBAL T_ACI_RETURN cmhSMS_WriteParams (T_ACI_CMD_SRC  srcId,
                                        T_ACI_AT_CMD   cmd,
                                        SHORT          recNr);
GLOBAL T_ACI_RETURN cmhSIM_GetSIMError ( T_ACI_CMD_SRC srcBuf,
                                         T_ACI_AT_CMD cmdBuf  );
GLOBAL T_ACI_RETURN cmhSIM_CheckSimPinStatus ( T_ACI_CMD_SRC srcBuf,
                                               T_ACI_AT_CMD cmdBuf );
GLOBAL BOOL cmhSIM_CheckSimStatus();
GLOBAL T_ACI_RETURN cmhSIM_Read_AD     ( );

EXTERN void percentCSTAT_indication(T_ACI_ENTITY_ID_MSG     entityId, 
                                    T_ACI_ENTITY_STATE_MSG  entityState);

EXTERN void cmhSMS_ReadCbDtaDwnl ( T_SIM_MMI_INSERT_IND *sim_mmi_insert_ind );

GLOBAL void cmhSIM_Get_CSP();
GLOBAL void cmhSIM_Read_CSP();
#ifdef SIM_PERS
GLOBAL void cmhSIM_WriteDefaultValue_DCK();
#endif

/* Implements Measure#32: Row 118, 119, 980, 986, 987, 1036 & 1037 */
EXTERN void cmhMM_mcc_mnc_print( CHAR           *oper,
                                 SHORT          mcc,
                                 SHORT          mnc);
EXTERN void cmhSMS_sdu_buf_print ( U8     *buf,
                                   USHORT offset );

GLOBAL UBYTE cmhSIM_isplmnmodebit_set();

EXTERN BOOL aci_get_cb_cmd (RAT_ID cmd, T_ACI_CMD_SRC src);

GLOBAL T_ACI_CMD_MODE aci_cmd_src_mode_get(T_ACI_CMD_SRC src_id);
GLOBAL void aci_cmd_src_mode_set(UBYTE src_id,T_ACI_CMD_MODE mode);

/*==== MACROS =====================================================*/

EXTERN T_VOID_FUNC rat_fptr; /* new global function pointer */
EXTERN UBYTE srcId_cb;
EXTERN USHORT used_sources;

#define IS_SRC_USED(x)   ((used_sources >> x) & 0x01)
#define IS_SRC_BT(x)   ((used_sources >> (x + 8)) & 0x01)


/* we set the src id only when the src id NEQ local. Bec in ASC test we intentionally 
   set the src from TST to LCL for some purpose, but the srcId_cb should remain TST */

/* new macro, calling function. function is defined in cmh_f.c, prototype above */
#define R_AT(cmd,src)\
  if (aci_get_cb_cmd (cmd, src)) \
    (*rat_fptr)

#define ACI_ERR_DESC( errCls, errNr )\
  {aciErrDesc=(((errCls)<<16) | ((errNr)&0xFFFF));}

/*==== EXPORT =====================================================*/
#ifdef CMH_F_C

GLOBAL T_CMH_PRM      cmhPrm[OWN_SRC_MAX];
GLOBAL T_ACI_ALS_MOD  ALSlock = ALS_MOD_NOTPRESENT;
GLOBAL T_ACI_ERR_DESC aciErrDesc = (ULONG)-1; 

#else

EXTERN T_CMH_PRM      cmhPrm[OWN_SRC_MAX];
EXTERN T_ACI_ALS_MOD  ALSlock;
EXTERN T_ACI_ERR_DESC aciErrDesc;

EXTERN const T_VOID_FUNC RATJmpTbl[RAT_MAX][CMD_MODE_MAX];  /* SMI/MFW & ATI */

#endif  /* of #ifndef CMH_F_C */

/* Implements Measure 25 */
EXTERN UBYTE cmh_getAlphabetCb ( UBYTE dcs );

/* Implements Measure#32: Row 105, 1115 & 1151 */
EXTERN const char * const ffff_str;
/* Implements Measure#32: Row 110 & 981  */
EXTERN const char * const ef_plmn_id;
/* Implements Measure#32: Row 971, 976, 1023 & 1072 */
EXTERN const char * const ef_clng_id;
/* Implements Measure#32: Row 60 & 1039  */
EXTERN const char * const ef_mssup_id;
/* Implements Measure#32: Row 119, 980, 987, 1037 */
EXTERN const char * const format_03x02x_str;
/* Implements Measure#32: Row 118, 986, 1036 */
EXTERN const char * const format_03x03x_str;
/* Implements Measure#32: Row 969, 1027, 1239 & 1240 */
EXTERN const char * const num_112_str;
EXTERN const char * const num_911_str;
/* Implements Measure#32: Row 972, 1024 & 1041 */
EXTERN char * const au_str;
/* Implements Measure#32: Row 1245, 1277 & 1312 */
EXTERN const char * const format_2X_str;
/* Implements Measure#32: Row 73, 74, 103, 114 & 1071 */
EXTERN const char * const gsm_com_path;
EXTERN const char * const gsm_com_redialmode_path;
EXTERN const char * const gsm_com_alslock_path;
EXTERN const char * const gsm_com_rfcap_path;

#endif  /* CMH_H */

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