FreeCalypso > hg > fc-tourmaline
view src/ui/mfw/mfw_gprs.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: MMI-Framework (8417) $Workfile:: mfw_gprs.h $| | $Author: KGT $Revision:: 1 $| | CREATED: 13.02.2001 $Modtime:: 13.02.2001 $| | STATE : code | +--------------------------------------------------------------------+ MODULE : MFW_GPRS PURPOSE : This modul contains definition needed for the GPRS management in MFW. $History: Mfw_gprs.h Feb 24, 2006 REF:DR OMAPS00068976 x0035544 Description: GPRS attach icon - MMI follow up issue of OMAPS00051034 solution: Added the structure variable p_reg_State to the union and named it as Reg_state. This structure stores the network registration status information given by qAT_percentCREG(). 15/05/2003 - SPR#1983 - SH - Updated to latest from 1.6.3 version. $End */ #ifndef DEF_MFW_GPRS_HEADER #define DEF_MFW_GPRS_HEADER /* GPRS events -----------------------------------------------------*/ #define E_MFW_GPRS_S_CNTXT 0x00000001 #define E_MFW_GPRS_S_ATT 0x00000002 #define E_MFW_GPRS_S_ACT 0x00000004 #define E_MFW_GPRS_R_ACT 0x00000008 #define E_MFW_GPRS_S_DATA 0x00000010 #define E_MFW_GPRS_R_DATA 0x00000020 #define E_MFW_GPRS_S_QOS 0x00000040 #define E_MFW_GPRS_R_QOS 0x00000080 #define E_MFW_GPRS_S_QOS_MIN 0x00000100 #define E_MFW_GPRS_S_CLASS 0x00000200 #define E_MFW_GPRS_S_PDPADDR 0x00000400 #define E_MFW_GPRS_S_AUTORESP 0x00000800 #define E_MFW_GPRS_S_ANS 0x00001000 #define E_MFW_GPRS_R_ANS 0x00002000 #define E_MFW_GPRS_S_EREP 0x00004000 #define E_MFW_GPRS_R_EREP_RJ 0x00008000 #define E_MFW_GPRS_R_EREP_ATT 0x00010000 #define E_MFW_GPRS_R_EREP_ACT 0x00020000 #define E_MFW_GPRS_R_EREP_DEACT 0x00040000 #define E_MFW_GPRS_R_EREP_CLASS 0x00080000 #define E_MFW_GPRS_R_REG 0x00200000 #define E_MFW_GPRS_S_SMSSERV 0x00400000 #define E_MFW_GPRS_OK 0x00800000 #define E_MFW_GPRS_ERROR 0x01000000 #define E_MFW_GPRS_CONNECT 0x02000000 #define E_MFW_GPRS_ERR_CONNECT 0x04000000 #define E_MFW_GPRS_COUNTER 0x08000000 #define E_MFW_GPRS_ALL_EVENTS 0x0FFFFFFF /* GPRS Parameter --------------------------------------------------*/ /* Data Counter */ typedef struct { UBYTE c_id; ULONG octets_uplink; /* No. of bytes transferred in uplink */ ULONG octets_downlink; /* No. of bytes transferred in downlink */ ULONG packets_uplink; /* No. of packets transferred in uplink */ ULONG packets_downlink; /* No. of packets transferred in uplink */ } T_MFW_GPRS_COUNTER; /* Structure to store cell reselection information. */ typedef struct { T_CGREG_STAT stat; USHORT lac; USHORT ci; } T_MFW_GPRS_CELL_STRUCT; typedef struct { T_P_CGREG_STAT stat; USHORT lac; USHORT ci; } T_MFW_GPRS_CELL_STRUCT_P; typedef struct { #ifdef FF_2TO1_PS U8 id; /* context id */ T_PDP_CONTEXT_INTERNAL data; /* context data */ #else USHORT id; /* context id */ T_PDP_CONTEXT_INTERNAL data; /* context data */ #endif BOOL activated; /* context mode */ char *L2P; /* layer 2 protocol */ } T_MFW_GPRS_CONTEXT; typedef struct { USHORT *ids; /* context ids */ BOOL state; /* activation state */ } T_MFW_GPRS_CNTXT_ACT; typedef struct { USHORT *ids; /* context ids */ char *L2P; /* layer 2 protocol */ } T_MFW_GPRS_CNTXT_L2P; typedef struct { T_CGEREP_MODE mode; /* event reporting mode */ T_CGEREP_BFR bfr; /* effect control on buffered events */ } T_MFW_GPRS_EVENTREP; typedef struct { T_MFW_GPRS_CONTEXT *contexts; /* list of defined contexts */ USHORT numContexts; /* number of defined contexts */ T_CGATT_STATE attached; /* Now T_CGATT_STATE instead of BOOL*/ BOOL autoResponse; /* auto response mode */ T_MFW_GPRS_EVENTREP eventRep; /* event reporting */ T_CGCLASS_CLASS tclass; /* GPRS class mode */ //x0035544 Feb 23, 2006 DR:OMAPS00068976 union { T_CGREG_STAT regState; /* network registration state */ T_P_CGREG_STAT p_reg_State;/* present network registration state */ }Reg_state; T_CGSMS_SERVICE SMSService; /* service to use for SMS */ USHORT link_id; /* link identifier for data transfer */ T_MFW_GPRS_COUNTER counter; /* Data uplink/downlink counter */ USHORT lac; /* Location area code */ USHORT ci; /* Cell id */ } T_MFW_GPRS_DATA; typedef union { SHORT cID; T_MFW_GPRS_CONTEXT context; T_MFW_GPRS_CNTXT_ACT contextAct; T_MFW_GPRS_CNTXT_L2P contextL2P; BOOL mode; T_CGATT_STATE attached; /* Now T_CGATT_STATE instead of BOOL*/ T_CGCLASS_CLASS tclass; T_MFW_GPRS_EVENTREP eventRep; T_EVENT_REJECT erepReject; T_EVENT_ACT erepAct; T_MFW_GPRS_CELL_STRUCT cell; /* Cell reselection data */ T_CGSMS_SERVICE service; USHORT link_id; T_ACI_AT_CMD cmdId; T_MFW_GPRS_COUNTER counter; /* Data uplink/downlink counter */ } T_MFW_GPRS_PARA; /* MFW Control Block for GPRS --------------------------------------*/ typedef struct { T_MFW_EVENT emask; /* events of interest */ T_MFW_EVENT event; /* current event */ T_MFW_CB handler; /* callback handler */ T_MFW_GPRS_DATA data; /* GPRS data */ } T_MFW_GPRS; /* MFW internal functions ------------------------------------------*/ void gprs_init ( void ); void gprs_exit ( void ); T_MFW_HND gprs_create ( T_MFW_HND hWin, T_MFW_EVENT event, T_MFW_CB cbfunc ); T_MFW_RES gprs_delete ( T_MFW_HND h ); int gprsCommand ( U32 cmd, void *h ); void gprs_signal ( T_MFW_EVENT event, void *para ); void gprs_ok(T_ACI_AT_CMD cmdId); void gprs_error(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err); void gprs_connect(SHORT cId); void gprs_err_connect(SHORT cId); /* MMI-MFW Interface Functions -------------------------------------*/ #ifndef FF_2TO1_PS T_MFW_RES gprs_definePDPContext ( SHORT cid, T_PDP_CONTEXT *inputCtxt ); T_MFW_RES gprs_setQOS ( SHORT cid , T_PS_qos *inputQos ); T_MFW_RES gprs_setQOSMin ( SHORT cid , T_PS_qos *inputQos); T_MFW_RES gprs_attach ( T_CGATT_STATE state); /* SPR#1983 - SH - Added function to cancel CGATT command */ T_MFW_RES gprs_attach_abort(void); T_MFW_RES gprs_contextActivation( T_CGACT_STATE state, SHORT *cids); T_MFW_RES gprs_setData ( char *L2P, SHORT *cids); T_MFW_RES gprs_showPDPAddress ( SHORT *cids, T_NAS_ip *pdp_address); #else T_MFW_RES gprs_definePDPContext ( SHORT cid, T_PDP_CONTEXT *inputCtxt ); T_MFW_RES gprs_setQOS ( SHORT cid , T_PS_qos *inputQos ); T_MFW_RES gprs_setQOSMin ( SHORT cid , T_PS_qos *inputQos); T_MFW_RES gprs_attach ( T_CGATT_STATE state); /* SPR#1983 - SH - Added function to cancel CGATT command */ T_MFW_RES gprs_attach_abort(void); T_MFW_RES gprs_contextActivation( T_CGACT_STATE state, SHORT *cids); T_MFW_RES gprs_setData ( char *L2P, SHORT *cids); T_MFW_RES gprs_showPDPAddress ( SHORT *cids, T_NAS_ip *pdp_address); #endif T_MFW_RES gprs_setAutoResponse ( T_CGAUTO_N mode); T_MFW_RES gprs_ManualResponse ( USHORT response, char *l2p, SHORT cid); T_MFW_RES gprs_setClass ( T_CGCLASS_CLASS m_class); T_MFW_RES gprs_setEventReporting( T_CGEREP_MODE mode, T_CGEREP_BFR bfr); T_MFW_RES gprs_setServiceSMS ( T_CGSMS_SERVICE service); T_CGSMS_SERVICE gprs_getServiceSMS(void); /* Interface for SNCNT command */ T_MFW_RES gprs_counter(BOOL reset_counter); /* SPR#1983 - SH - Added function to cancel SNCNT command */ T_MFW_RES gprs_counter_abort(void); T_CGREG_STAT gprs_status(void); //x0035544 Feb 23, 2006 DR:OMAPS00068976 /* Added function to querry and update the gprs status */ T_P_CGREG_STAT p_gprs_status(void); #ifdef NEPTUNE_BOARD /* OMAPS00074454 - 24-04-2006 */ int mfw_gprs_edge_status(int *iStatus); /* END */ #endif /* ACI callback functions ------------------------------------------*/ void rAT_PlusCGACT ( SHORT link_id ); /* link_id: Link identifier */ void rAT_PlusCGDATA ( SHORT link_id ); /* link_id: Link identifier */ void rAT_PlusCGANS ( SHORT link_id ); /* link_id: Link identifier */ void rAT_PlusCGEREP ( T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param ); /* event : GPRS event param : event parameter */ void rAT_PercentCGEV ( T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param ); /* event : GPRS event param : event parameter */ void rAT_PlusCGREG ( T_CGREG_STAT stat, USHORT lac, USHORT ci ); /* stat : indicates the current registration lac : two byte location area code ci : two byte cell ID */ /* ACI CHANGES - 5-10-2005 */ void rAT_PercentCGREG ( T_P_CGREG_STAT stat, USHORT lac, USHORT ci, BOOL bActiveContext ); // BOOL bActiveContext ); /* stat : indicates the current registration lac : two byte location area code ci : two byte cell ID bActiveContext : boolean: shows wether a PDP context is established or not*/ #ifdef FF_2TO1_PS void rAT_changedQOS ( U8 cid, T_PS_qos *qos ); /* cid : context id *qos : quality of service profile */ #else void rAT_changedQOS ( SHORT cid, T_PS_qos *qos ); /* cid : context id *qos : quality of service profile */ #endif /* END */ GLOBAL void rAT_PercentSNCNT ( UBYTE c_id, ULONG octets_uplink, ULONG octets_downlink, ULONG packets_uplink, ULONG packets_downlink ); /* Added to remove warning Aug - 11 */ EXTERN UBYTE dspl_Enable (UBYTE in_Enable); /* End - remove warning Aug - 11 */ #endif