FreeCalypso > hg > fc-tourmaline
view src/ui/mfw/mfw_cphs.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 | 92abb46dc1ba |
children |
line wrap: on
line source
/* +--------------------------------------------------------------------+ | PROJECT: GSM-MFW (8417) $Workfile:: mfw_cphs.h $| | $Author:: Vo $Revision:: 1 $| | CREATED: 14.7.00 $Modtime:: $| | STATE : code | +--------------------------------------------------------------------+ PURPOSE : Types defination for CPHS management May 30, 2006 DR: OMAPS00070657 x0pleela Description: CPHS feature on Locosto-Lite Solution: For ALS feature, a)Added function prototype "mfw_cphs_get_als_info()" which returns the current active line Oct 04, 2004 REF: CRR 25519 Deepa M.D Bug:Re-align structure members in MFW Fix:Structure elements have been realigned to avoid the structure padding */ #ifndef DEF_MFW_CPHS #define DEF_MFW_CPHS #include <string.h> #if defined (NEW_FRAME) #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #include "gsm.h" #else #include "STDDEFS.H" #include "custom.h" #include "gsm.h" #include "vsi.h" #endif #include "mfw_mfw.h" #include "mfw_nm.h" #include "mfw_sim.h" #include "mfw_simi.h" #include "mfw_sima.h" #include "mfw_nmi.h" #include "mfw_phb.h" #include "mfw_phbi.h" #include "mfw_cm.h" #include "mfw_cmi.h" #include "mfw_sms.h" #include "mfw_smsi.h" #include "drv_key.h" #include "ksd.h" #if defined (FAX_AND_DATA) #include "aci_fd.h" #endif #include "phb.h" #include "mfw_ss.h" #include "mfw_ssi.h" #include "mfw_sys.h" #ifdef NEPTUNE_BOARD #include "Ffs.h" #endif /* Constants define */ #define MFW_INVALID_SIM_DATA 0xFF #define MAX_CPHS_ENTRY 4 #define MAX_PCM_MAILBOX_LEN 10 typedef enum /* CPHS status */ { CPHS_NotPresent = 10, CPHS_ERR, //x0pleela 11 June, 2006 DR:OMAPS00079692 //changed from CPHS_OK to MFW_CPHS_OK MFW_CPHS_OK } T_MFW_CPHS_STATUS; typedef enum /* SIM operation status */ { MFW_SIMOP_UNKNOWN = 20, MFW_SIMOP_WRITE_ERR, MFW_SIMOP_WRITE_OK, MFW_SIMOP_READ_ERR, MFW_SIMOP_READ_OK } T_MFW_SIMOP_STATUS; typedef enum /* CPHS service */ { MFW_CPHS_CSP = 1, /* customer service profile */ MFW_CPHS_SST, /* service string table */ MFW_CPHS_MB_NUMBER, /* mailbox numbers */ MFW_CHPS_NAME_SHORT, /* operator name shortform */ MFW_CHPS_INFO_NUMBERS /* information numbers */ } T_MFW_CPHS_SERVICE; typedef enum /* index of mailbox-number/alternate-line service */ { MFW_SERV_NotPresent = -1, MFW_SERV_LINE1 = 0, MFW_SERV_LINE2, MFW_SERV_DATA, MFW_SERV_FAX } T_MFW_LINE_INDEX; typedef enum /* status of alternate line service */ { MFW_LINE_UNLOCKED = 0, MFW_LINE_LOCKED } T_MFW_LINE_STATUS; typedef enum /* voice message waiting flag and call forwarding flags */ { MFW_CFLAG_NotPresent = 0, MFW_CFLAG_SET = 0x0A, MFW_CFLAG_NOTSet = 0x05 } T_MFW_CFLAG_STATUS; /* events are organised as bitmaps */ #define E_CPHS_IND 0x0001 #define E_CPHS_OP_NAME 0x0002 #define E_CPHS_GET_VC_NUM 0x0004 #define E_CPHS_SET_VC_NUM 0x0008 #define E_CPHS_GET_VC_STAT 0x0010 #define E_CPHS_SET_VC_STAT 0x0020 #define E_CPHS_GET_DV_STAT 0x0040 #define E_CPHS_SET_DV_STAT 0x0080 #define E_CPHS_GET_ALS_STATUS 0x0100 #define E_CPHS_SET_LINE 0x0200 #define E_CPHS_SET_ALS_STATUS 0x0400 #define E_CPHS_GET_CSP 0x0800 #define E_CPHS_GET_INFO_NUM 0x1000 #define E_CPHS_GET_INFO_LIST 0x2000 #define E_CPHS_GET_SIM_FIELD 0x4000 //MC for generic sim reads #define E_CPHS_SET_SIM_FIELD 0x8000 //sbh for generic sim writes #define E_CPHS_MSP_IND 0x10000 #ifdef FF_CPHS_REL4 #define E_CPHS_REL4_GET_MBI 0x20000 #define E_CPHS_REL4_GET_MBDN 0x40000 #endif typedef struct /* Character */ { UBYTE len; /* length of string data */ UBYTE data[PHB_MAX_LEN]; /* string data */ } T_MFW_STRING; typedef struct /* Information numbers */ { UBYTE index; UBYTE entryStat; /* entry status */ T_MFW_PHB_TEXT alpha; /* alpha identifier */ } T_MFW_CPHS_INFO_NUMBER; typedef struct /* List of information numbers */ { UBYTE count; /* number of read entries */ UBYTE level; T_MFW_CPHS_INFO_NUMBER entry[MAX_CPHS_ENTRY]; /* entries */ } T_MFW_CPHS_INFONUM_LIST; typedef struct /* CPHS information */ { UBYTE phase; UBYTE opNS; /* operator name shortform */ UBYTE mbNum; /* mailbox numbers */ UBYTE sst; /* service string table */ UBYTE csp; /* customer service profile */ UBYTE iNum; /* information numbers */ } T_MFW_CPHS_INFO; typedef struct /* Operator name */ { T_MFW_LNAME longName; /* operator name string */ T_MFW_SNAME shortName; /* operator name shortform */ } T_MFW_CPHS_OP_NAME; #define MFW_CPHS_VM_NUMBER_MAXLEN ( PHB_MAX_LEN + 20 ) typedef struct /* Mailbox number */ { UBYTE index; /* index in phonebook table */ T_MFW_PHB_TEXT alpha; /* alpha identifier */ UBYTE number[MFW_CPHS_VM_NUMBER_MAXLEN]; /* telephone number */ UBYTE ton; /* type of number */ UBYTE npi; /* numbering plan identifier */ UBYTE service; /* indicates the line or fax/data */ UBYTE ext_rec_number; /* Number of EXT Records */ UBYTE ext_rec_idx[4]; UBYTE datalen; UBYTE list_index; /* Index / Position in the List */ } T_MFW_CPHS_ENTRY; typedef struct /* List of mailbox numbers */ { UBYTE count; /* numbers of the list */ T_MFW_CPHS_ENTRY entries[MAX_CPHS_ENTRY]; } T_MFW_CPHS_VC_NUM; /*Data structure to store MBI of registered profile*/ #ifdef FF_CPHS_REL4 typedef struct { UBYTE voice; /*stores record id of voice*/ UBYTE fax; /*stores record id of fax*/ UBYTE electronic; /*stores record id of electronic*/ UBYTE other; /*stores record id of other*/ UBYTE valid; /*1 - the info stored is valid 0 - the info stored is invalid*/ } T_MFW_CPHS_REL4_MBI; typedef struct { CHAR alpha[MAX_ALPHA_LEN]; CHAR number[MAX_MB_NUM_LEN]; T_ACI_TOA type; } T_MFW_MBDN; typedef struct { T_MFW_MBDN mailbox_numbers[4];/*mailbox numbers of voice,fax,electronic and other*/ UBYTE valid; /* 1st bit-voicemail, 2nd bit-fax,3rd bit-electronic,4th bit-other. bit set if valid, bit unset if invalid*/ } T_MFW_CPHS_REL4_MBDN; typedef enum { T_MFW_CPHS_REL4_MAILBOX_VOICE=0, T_MFW_CPHS_REL4_MAILBOX_FAX, T_MFW_CPHS_REL4_MAILBOX_ELECTRONIC, T_MFW_CPHS_REL4_MAILBOX_OTHER } T_MFW_CPHS_REL4_MAILBOX_TYPE; #endif typedef struct /* Voice message waiting information */ { UBYTE result; /* read error/no error */ T_MFW_CFLAG_STATUS line1; /* waiting status of line 1 */ T_MFW_CFLAG_STATUS line2; /* waiting status of line 2 */ T_MFW_CFLAG_STATUS fax; /* waiting status of fax */ T_MFW_CFLAG_STATUS data; /* waiting status of data */ } T_MFW_CPHS_VC_STAT; /*Data structure to store MWIS of a profile*/ #ifdef FF_CPHS_REL4 typedef struct { UBYTE mwisStat; UBYTE voicemail; UBYTE fax; UBYTE electronic; UBYTE other; } T_MFW_CPHS_REL4_MWIS; #endif typedef struct /* Status of diverted call indicators */ { UBYTE result; /* read error/no error */ T_MFW_CFLAG_STATUS line1; /* call forwarding unconditional status of line 1 */ T_MFW_CFLAG_STATUS line2; /* call forwarding unconditional status of line 2 */ T_MFW_CFLAG_STATUS fax; /* call forwarding unconditional status of fax */ T_MFW_CFLAG_STATUS data; /* call forwarding unconditional status of data */ } T_MFW_CPHS_DV_STAT; /*a0393213 cphs rel4 - added a structure for divert status*/ #ifdef FF_CPHS_REL4 typedef struct /* Status of diverted call indicators */ { T_MFW_CFLAG_STATUS voice; /* call forwarding unconditional status of voice */ T_MFW_CFLAG_STATUS fax; /* call forwarding unconditional status of fax */ T_MFW_CFLAG_STATUS data; /* call forwarding unconditional status of data */ char voice_dialling_number[PHB_MAX_LEN]; /*number to which voice has been forwarded*/ } T_MFW_CPHS_REL4_DV_STAT; #endif typedef struct /* Information about alternate line service */ { T_MFW_LINE_INDEX selectedLine; T_MFW_LINE_STATUS status; /* ALS is locked or unlocked */ } T_MFW_CPHS_ALS_STATUS; //Code 15: typedef struct /* Customer service profile */ { UBYTE result; /* read error/no error */ UBYTE csp[20]; /* size of MFW_CPHS_CSP_SIZE */ } T_MFW_CPHS_CSP; //Code 15 END typedef struct /* Information number entry */ { UBYTE result; /* read error/no error (only used for read information number) */ UBYTE index; UBYTE entryStat; T_MFW_PHB_TEXT alpha; /* alpha identifier */ UBYTE number[4]; UBYTE ton; UBYTE npi; } T_MFW_CPHS_INFONUM_ENTRY; #ifdef FF_CPHS_REL4 typedef struct { char alpha[MAX_ALPHA_LEN]; char number[MAX_PHB_NUM_LEN]; T_ACI_TOA type; T_ACI_BS_SPEED speed; T_ACI_CNUM_SERV service; T_ACI_CNUM_ITC itc; }T_MFW_CPHS_MSP_REC; typedef struct { UBYTE count; T_MFW_CPHS_MSP_REC profile[4]; UBYTE default_profile; UBYTE registered_profile; }T_MFW_CPHS_MSP_INFO; #endif /***************************Go-lite Optimization changes Start***********************/ //Oct 04, 2004 REF: CRR 25519 Deepa M.D //Structure elements (T_MFW_CPHS_READ_SIM_ENTRY)are realigned to avoid the structure padding typedef struct /* SIM read data */ { UBYTE* exchange_data; USHORT sim_result; /* read error/no error (only used for read information number) */ USHORT requested_field; UBYTE data_len; UBYTE record; /* sh */ } T_MFW_CPHS_READ_SIM_ENTRY; /***************************Go-lite Optimization changes end***********************/ /* CPHS Parameter */ typedef union { T_MFW_CPHS_STATUS stat; T_MFW_CPHS_OP_NAME oper_name; T_MFW_CPHS_VC_NUM vc_entry; UBYTE result; T_MFW_CPHS_VC_STAT vc_status; T_MFW_CPHS_DV_STAT dv_status; T_MFW_CPHS_ALS_STATUS als_status; T_MFW_CPHS_CSP csp; T_MFW_CPHS_INFONUM_LIST num_list; T_MFW_CPHS_INFONUM_ENTRY info_entry; T_MFW_CPHS_READ_SIM_ENTRY read_sim_entry; } T_MFW_CPHS_PARA; /* prototypes define */ void cphs_init (void); void cphs_exit (void); MfwHnd cphs_create (MfwHnd hWin, MfwEvt event, MfwCb cbfunc); MfwRes cphs_delete (MfwHnd h); T_MFW cphs_config (T_MFW_CPHS_INFO *cphs_info); T_MFW cphs_operator_name (void); void cphs_get_mailbox (void); T_MFW cphs_set_mailbox (T_MFW_CPHS_ENTRY *entry); T_MFW cphs_get_mailbox_status (void); T_MFW cphs_set_mailbox_status (T_MFW_CFLAG_STATUS line1, T_MFW_CFLAG_STATUS line2, T_MFW_CFLAG_STATUS fax, T_MFW_CFLAG_STATUS data); T_MFW cphs_get_divert_status (void); T_MFW cphs_set_divert_status (T_MFW_CFLAG_STATUS line1, T_MFW_CFLAG_STATUS line2, T_MFW_CFLAG_STATUS fax, T_MFW_CFLAG_STATUS data); /*a0393213 cphs rel4*/ #ifdef FF_CPHS_REL4 T_MFW cphs_rel4_set_divert_status(T_MFW_CFLAG_STATUS voice, T_MFW_CFLAG_STATUS fax, T_MFW_CFLAG_STATUS data, char number[PHB_MAX_LEN]); void sendCPHSSignal(UBYTE evt, void* para); T_MFW_CPHS_MSP_INFO* mfw_cphs_get_msp(void); T_MFW_CPHS_REL4_MWIS* get_mwis_stat(int); #endif void cphs_get_als_info (T_MFW_CPHS_ALS_STATUS *info); void cphs_select_line (T_MFW_LINE_INDEX line); T_MFW cphs_set_als_status (T_MFW_LINE_STATUS status); T_MFW cphs_get_csp (void); T_MFW cphs_get_info_num (UBYTE level, UBYTE startIndex); T_MFW cphs_select_info_num (UBYTE index); BOOL Read_Sim (USHORT dat_id, USHORT offset, UBYTE max_len, UBYTE *exDat); BOOL Read_Sim_Record (USHORT dat_id, USHORT record, UBYTE max_len, UBYTE *exDat); BOOL Write_Sim (USHORT dat_id, UBYTE len, UBYTE *exDat); BOOL Write_Sim_Record (USHORT dat_id, USHORT record, UBYTE len, UBYTE *exDat); //x0pleela 25 May2006 DR: OMAPS00070657 #ifdef FF_CPHS T_MFW mfw_cphs_get_als_info(void); #endif /* Added to remove warning Aug - 11 */ EXTERN UBYTE dspl_Enable (UBYTE in_Enable); #ifdef PCM_2_FFS EXTERN T_FFS_SIZE ffs_ReadRecord(const char *name, void * addr, int size, int index, int recsize); #endif /* PCM_2_FFS */ /* End - remove warning Aug - 11 */ /*a0393213 cphs rel4*/ #ifdef FF_CPHS_REL4 UBYTE mfw_cphs_get_reg_profile(void); #endif #endif