view src/aci2/aci/cmh.h @ 662:8cd8fd15a095

SIM speed enhancement re-enabled and made configurable TI's original code supported SIM speed enhancement, but Openmoko had it disabled, and OM's disabling of speed enhancement somehow caused certain SIM cards to start working which didn't work before (OM's bug #666). Because our FC community is much smaller in year 2020 than OM's community was in their day, we are not able to find one of those #666-affected SIMs, thus the real issue they had encountered remains elusive. Thus our solution is to re-enable SIM speed enhancement and simply wait for if and when someone runs into a #666-affected SIM once again. We provide a SIM_allow_speed_enhancement global variable that allows SIM speed enhancement to be enabled or disabled per session, and an /etc/SIM_spenh file in FFS that allows it to enabled or disabled on a non-volatile basis. SIM speed enhancement is now enabled by default.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 24 May 2020 05:02:28 +0000
parents 93999a60b835
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 GPRS
  RAT_CGACT,
  RAT_CGDATA,
  RAT_CGANS,
  RAT_CGEREP,
  RAT_CGREG,
  RAT_QOS_MOD,
  RAT_SNCNT,
  RAT_P_CGREG,
  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,
  RAT_RDLB,
  RAT_CCCN,
  RAT_CSSN,

  RAT_CSTAT,
  RAT_Z,
  RAT_CPRSM,
  RAT_P_CTZV,
  RAT_P_CPRI,
  RAT_P_SIMEF,
  RAT_P_CNIV,
  RAT_P_COPS,
  RAT_P_CMGR,
  RAT_P_CMGL,
  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,
                                          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,
                                          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,
                                          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,
                                          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 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


GLOBAL UBYTE cmhSIM_isplmnmodebit_set();

GLOBAL T_ACI_CMD_MODE aci_rat_cmd_mode(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_ACI_CMD_MODE _mode;
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 */
#define R_AT(cmd,src)\
  _mode=aci_rat_cmd_mode(cmd,src);\
  if (src > CMD_SRC_LCL)\
  srcId_cb=(UBYTE)src;\
  if (_mode NEQ CMD_MODE_NONE AND RATJmpTbl[cmd][_mode])\
    RATJmpTbl[cmd][_mode]


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

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

GLOBAL T_CMH_PRM      cmhPrm[OWN_MAX];
GLOBAL T_ACI_ALS_MOD  ALSlock = ALS_MOD_NOTPRESENT;
GLOBAL T_ACI_ERR_DESC aciErrDesc = -1;

#else

EXTERN T_CMH_PRM      cmhPrm[OWN_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 */

#endif  /* CMH_H */

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