FreeCalypso > hg > fc-magnetite
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 =======================================================*/