FreeCalypso > hg > fc-tourmaline
view cdg-hybrid/cdginc/p_8010_153_cause_include.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 | 35f7a1dc9f7d |
children |
line wrap: on
line source
/* +--------------------------------------------------------------------------+ | PROJECT : PROTOCOL STACK | | FILE : p_8010_153_cause_include.h | | SOURCE : "sap\8010_153_cause_include.pdf" | | LastModified : "2004-11-30" | | IdAndVersion : "8010.153.04.032" | | SrcFileTime : "Thu Nov 29 09:29:16 2007" | | Generated by CCDGEN_2.5.5A on Fri Oct 14 21:41:52 2016 | | !!DO NOT MODIFY!!DO NOT MODIFY!!DO NOT MODIFY!! | +--------------------------------------------------------------------------+ */ /* PRAGMAS * PREFIX : CAUSE * COMPATIBILITY_DEFINES : NO * ALWAYS_ENUM_IN_VAL_FILE: YES * ENABLE_GROUP: NO * CAPITALIZE_TYPENAME: NO */ #ifndef P_8010_153_CAUSE_INCLUDE_H #define P_8010_153_CAUSE_INCLUDE_H #define CDG_ENTER__P_8010_153_CAUSE_INCLUDE_H #define CDG_ENTER__FILENAME _P_8010_153_CAUSE_INCLUDE_H #define CDG_ENTER__P_8010_153_CAUSE_INCLUDE_H__FILE_TYPE CDGINC #define CDG_ENTER__P_8010_153_CAUSE_INCLUDE_H__LAST_MODIFIED _2004_11_30 #define CDG_ENTER__P_8010_153_CAUSE_INCLUDE_H__ID_AND_VERSION _8010_153_04_032 #define CDG_ENTER__P_8010_153_CAUSE_INCLUDE_H__SRC_FILE_TIME _Thu_Nov_29_09_29_16_2007 #include "CDG_ENTER.h" #undef CDG_ENTER__P_8010_153_CAUSE_INCLUDE_H #undef CDG_ENTER__FILENAME #include "p_8010_153_cause_include.val" /* * typedef between var and valtab enums */ #ifndef __T_CAUSE_cc_cause__ #define __T_CAUSE_cc_cause__ typedef T_CAUSE_VAL_cc_cause T_CAUSE_cc_cause; #endif #ifndef __T_CAUSE_nwcc_cause__ #define __T_CAUSE_nwcc_cause__ typedef T_CAUSE_VAL_nwcc_cause T_CAUSE_nwcc_cause; #endif #ifndef __T_CAUSE_nwss_cause__ #define __T_CAUSE_nwss_cause__ typedef T_CAUSE_VAL_nwcc_cause T_CAUSE_nwss_cause; #endif #ifndef __T_CAUSE_dl_cause__ #define __T_CAUSE_dl_cause__ typedef T_CAUSE_VAL_dl_cause T_CAUSE_dl_cause; #endif #ifndef __T_CAUSE_l2r_cause__ #define __T_CAUSE_l2r_cause__ typedef T_CAUSE_VAL_l2r_cause T_CAUSE_l2r_cause; #endif #ifndef __T_CAUSE_llc_cause__ #define __T_CAUSE_llc_cause__ typedef T_CAUSE_VAL_llc_cause T_CAUSE_llc_cause; #endif #ifndef __T_CAUSE_mm_cause__ #define __T_CAUSE_mm_cause__ typedef T_CAUSE_VAL_mm_cause T_CAUSE_mm_cause; #endif #ifndef __T_CAUSE_nwmm_cause__ #define __T_CAUSE_nwmm_cause__ typedef T_CAUSE_VAL_nwmm_cause T_CAUSE_nwmm_cause; #endif #ifndef __T_CAUSE_ppp_cause__ #define __T_CAUSE_ppp_cause__ typedef T_CAUSE_VAL_ppp_cause T_CAUSE_ppp_cause; #endif #ifndef __T_CAUSE_rcm_cause__ #define __T_CAUSE_rcm_cause__ typedef T_CAUSE_VAL_rcm_cause T_CAUSE_rcm_cause; #endif #ifndef __T_CAUSE_rr_cause__ #define __T_CAUSE_rr_cause__ typedef T_CAUSE_VAL_rr_cause T_CAUSE_rr_cause; #endif #ifndef __T_CAUSE_nwrr_cause__ #define __T_CAUSE_nwrr_cause__ typedef T_CAUSE_VAL_nwrr_cause T_CAUSE_nwrr_cause; #endif #ifndef __T_CAUSE_rlp_cause__ #define __T_CAUSE_rlp_cause__ typedef T_CAUSE_VAL_rlp_cause T_CAUSE_rlp_cause; #endif #ifndef __T_CAUSE_rrc_cause__ #define __T_CAUSE_rrc_cause__ typedef T_CAUSE_VAL_rrc_cause T_CAUSE_rrc_cause; #endif #ifndef __T_CAUSE_nwrrc_cause__ #define __T_CAUSE_nwrrc_cause__ typedef T_CAUSE_VAL_nwrrc_cause T_CAUSE_nwrrc_cause; #endif #ifndef __T_CAUSE_sim_cause__ #define __T_CAUSE_sim_cause__ typedef T_CAUSE_VAL_sim_cause T_CAUSE_sim_cause; #endif #ifndef __T_CAUSE_sm_cause__ #define __T_CAUSE_sm_cause__ typedef T_CAUSE_VAL_sm_cause T_CAUSE_sm_cause; #endif #ifndef __T_CAUSE_nwsm_cause__ #define __T_CAUSE_nwsm_cause__ typedef T_CAUSE_VAL_nwsm_cause T_CAUSE_nwsm_cause; #endif #ifndef __T_CAUSE_sms_cause__ #define __T_CAUSE_sms_cause__ typedef T_CAUSE_VAL_sms_cause T_CAUSE_sms_cause; #endif #ifndef __T_CAUSE_nwsms_cp_cause__ #define __T_CAUSE_nwsms_cp_cause__ typedef T_CAUSE_VAL_nwsms_cp_cause T_CAUSE_nwsms_cp_cause; #endif #ifndef __T_CAUSE_nwsms_rp_cause__ #define __T_CAUSE_nwsms_rp_cause__ typedef T_CAUSE_VAL_nwsms_rp_cause T_CAUSE_nwsms_rp_cause; #endif #ifndef __T_CAUSE_nwsms_tp_cause__ #define __T_CAUSE_nwsms_tp_cause__ typedef T_CAUSE_VAL_nwsms_tp_cause T_CAUSE_nwsms_tp_cause; #endif #ifndef __T_CAUSE_sn_cause__ #define __T_CAUSE_sn_cause__ typedef T_CAUSE_VAL_sn_cause T_CAUSE_sn_cause; #endif #ifndef __T_CAUSE_upm_cause__ #define __T_CAUSE_upm_cause__ typedef T_CAUSE_VAL_upm_cause T_CAUSE_upm_cause; #endif #ifndef __T_CAUSE_rrlc_cause__ #define __T_CAUSE_rrlc_cause__ typedef T_CAUSE_VAL_rrlc_cause T_CAUSE_rrlc_cause; #endif #ifndef __T_CAUSE_value__ #define __T_CAUSE_value__ /* * Cause element containing result of operation * CCDGEN:WriteStruct_Count==1387 */ typedef union { U16 nwmm_cause; /*< 0: 2> T_CAUSE_nwmm_cause, Cause element from network peer MM */ U16 nwrr_cause; /*< 0: 2> T_CAUSE_nwrr_cause, Cause element from GSM peer RR */ U16 nwrrc_cause; /*< 0: 2> T_CAUSE_nwrrc_cause, Cause element from UTRAN peer RRC */ U16 nwsm_cause; /*< 0: 2> T_CAUSE_nwsm_cause, Cause element from network peer SM */ U16 nwss_cause; /*< 0: 2> T_CAUSE_nwss_cause, Cause element containing result of a SS operation */ U16 nwsms_cp_cause; /*< 0: 2> T_CAUSE_nwsms_cp_cause, Cause element containing result of an SMS operation */ U16 nwsms_rp_cause; /*< 0: 2> T_CAUSE_nwsms_rp_cause, Cause element containing result of an SMS operation */ U16 nwsms_tp_cause; /*< 0: 2> T_CAUSE_nwsms_tp_cause, Cause element containing result of an SMS operation */ U16 upper_nw_cause; /*< 0: 2> If ctrl_value is below is_from_nw the cause originates from NW. Do NOT use as real value of ctrl_value. */ U16 cc_cause; /*< 0: 2> T_CAUSE_cc_cause, Cause element containing result of a CC operation */ U16 dl_cause; /*< 0: 2> T_CAUSE_dl_cause, Cause element containing result of a DL operation */ U16 l2r_cause; /*< 0: 2> T_CAUSE_l2r_cause, Cause element containing result of a L2R operation */ U16 llc_cause; /*< 0: 2> T_CAUSE_llc_cause, Cause element containing result of a LLC operation */ U16 mm_cause; /*< 0: 2> T_CAUSE_mm_cause, Cause element containing result of an MM operation */ U16 nwcc_cause; /*< 0: 2> T_CAUSE_nwcc_cause, Cause element containing result of a CC operation */ U16 ppp_cause; /*< 0: 2> T_CAUSE_ppp_cause, Cause element containing result of a PPP operation */ U16 rcm_cause; /*< 0: 2> T_CAUSE_rcm_cause, Cause element containing result of an RCM operation */ U16 rr_cause; /*< 0: 2> T_CAUSE_rr_cause, Cause element containing result of an RR operation */ U16 rlp_cause; /*< 0: 2> T_CAUSE_rlp_cause, Cause element containing result of an RLP operation */ U16 rrc_cause; /*< 0: 2> T_CAUSE_rrc_cause, Cause element containing result of an RRC operation */ U16 sim_cause; /*< 0: 2> T_CAUSE_sim_cause, Cause element from SIM to ACI/SMS/MM */ U16 sm_cause; /*< 0: 2> T_CAUSE_sm_cause, Cause element containing result of an SM operation */ U16 sms_cause; /*< 0: 2> T_CAUSE_sms_cause, Cause element containing result of an SMS operation */ U16 sn_cause; /*< 0: 2> T_CAUSE_sn_cause, Cause element containing result of an SNDCP operation */ U16 upm_cause; /*< 0: 2> T_CAUSE_upm_cause, Cause element containing result of an UPM operation */ U16 upper_ue_cause; /*< 0: 2> If ctrl_value is between is_from_nw and is_from_ue the cause originates from UE. Do NOT use as real value of ctrl_value. */ U8 rrlc_cause; /*< 0: 1> T_CAUSE_rrlc_cause, cause */ } T_CAUSE_value; #endif #ifndef __T_CAUSE_ps_cause__ #define __T_CAUSE_ps_cause__ /* * Cause element containing result of operation * CCDGEN:WriteStruct_Count==1388 */ typedef struct { T_CAUSE_ctrl_value ctrl_value; /*< 0: 4> (enum=32bit) controller for union */ T_CAUSE_value value; /*< 4: 2> Cause element containing result of operation */ U8 _align0; /*< 6: 1> alignment */ U8 _align1; /*< 7: 1> alignment */ } T_CAUSE_ps_cause; #endif /* * End of substructure section, begin of primitive definition section */ #ifndef __T_CAUSE_EXPORT__ #define __T_CAUSE_EXPORT__ /* * * CCDGEN:WriteStruct_Count==1389 */ typedef struct { T_CAUSE_ps_cause ps_cause; /*< 0: 8> Cause element containing result of operation */ } T_CAUSE_EXPORT; #endif #include "CDG_LEAVE.h" #endif