FreeCalypso > hg > fc-tourmaline
view src/cs/services/dar/dar_api.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 | 4e78acac3d88 |
children |
line wrap: on
line source
/****************************************************************************/ /* */ /* File Name: dar_api.h */ /* */ /* Purpose: This file contains data structures and functions prototypes */ /* used to send events to the DAR SWE. */ /* */ /* Version 0.1 */ /* */ /* Date Modification */ /* ------------------------------------ */ /* 26 September 2001 Create */ /* */ /* Author Stephanie Gerthoux */ /* */ /* (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved*/ /****************************************************************************/ #include "rv/rv_defined_swe.h" #include "rvm/rvm_api.h" /* file used in recovery case */ #include "main/sys_types.h" #include "dar/dar_gen.h" #ifdef RVM_DAR_SWE #ifndef __DAR_API_H_ #define __DAR_API_H_ #ifdef __cplusplus extern "C" { #endif /***** Events *****/ #define DAR_EVENTS_MASK (0x5000) #define DAR_EVENT_EXTERN (0x0C00) /***** Definitions *****/ /*Define DAR use parameters */ typedef struct { UINT16 group_nb; UINT16 mask; }T_DAR_USE_ID; typedef struct { T_RV_HDR os_hdr; INT8 status; } T_DAR_STATUS; /********************************************************************************/ /* RECOVERY */ /********************************************************************************/ /***** Events *****/ #define DAR_RECOVERY_CONFIG (0x0001|DAR_EVENT_EXTERN) /***** Definitions ******/ /* Define return parameters. */ typedef UINT16 T_DAR_RECOVERY_STATUS; /* possible values */ #define DAR_POWER_ON_OFF (0x0) /* Power ON/OFF */ #define DAR_WATCHDOG (0xDD11) /* Watchdog reset */ #define DAR_NORMAL_SCUTTLING (0xDD22) /* Recovery module has decided to active the reset */ #define DAR_EMERGENCY_SCUTTLING (0xDD33) /* Emergency detection */ /* Define Recovery configuration parameters */ typedef struct{ UINT16 msg_id; /* id of the message */ T_DAR_BUFFER buffer_p; /* pointer on the buffer */ UINT8 length; /* buffer length */ } T_DAR_RECOVERY_CONFIG; /* Define register parameters */ #define DAR_NAME_MAX_LEN (15) typedef char T_DAR_NAME[DAR_NAME_MAX_LEN]; /***** Prototype *****/ /* Get and reset the status of the DAR entity */ T_RV_RET dar_recovery_get_status(T_DAR_RECOVERY_STATUS* status); T_RV_RET dar_recovery_config(T_RV_RET (*dar_store_recovery_data)( T_DAR_BUFFER buffer_p, UINT16 length)); T_RV_RET dar_get_recovery_data(T_DAR_BUFFER buffer_p,UINT16 length ); /********************************************************************************/ /* WATCHDOG */ /********************************************************************************/ /***** Prototype *****/ T_RV_RET dar_start_watchdog_timer(UINT16 timer); T_RV_RET dar_reload_watchdog_timer(void); T_RV_RET dar_stop_watchdog_timer(void); /********************************************************************************/ /* RESET */ /********************************************************************************/ /***** Prototype *****/ T_RV_RET dar_reset_system(void); /********************************************************************************/ /* DIAGNOSE */ /********************************************************************************/ /***** Definitions *****/ /* DAR level messages value ( Error, Warning or debug ) */ /* define with 8 bits: - the first for Error level */ /* - the second for Warning level */ /* - the other bits for debug level*/ /* Error level : 1000 0000 in binary*/ #define DAR_ERROR (0x80) /* Warning level : 0100 0000 in binary*/ #define DAR_WARNING (0x40) /* Debug level : 0000 0001 in binary*/ #define DAR_DEBUG (0x01) /* None level : 0000 0000 in binary*/ #define DAR_NO_DIAGNOSE (0x00) /* Exception level 1111 1111 in binary*/ #define DAR_EXCEPTION (0xFF) /* Causes a reset, if set when calling dar_diagnose_write_emergency() */ #define DAR_EMERGENCY_RESET (0x00000001) /* New data is appended to last entry, if set when calling dar_diagnose_write_emergency() */ #define DAR_NEW_ENTRY (0x00000002) /***** Prototype *****/ /* Diagnose prototypes */ T_RV_RET dar_diagnose_swe_filter ( T_RVM_USE_ID dar_use_id, T_DAR_LEVEL dar_level); T_RV_RET dar_diagnose_write( T_DAR_INFO *buffer_p, T_DAR_FORMAT format, T_DAR_LEVEL diagnose_info_level, T_RVM_USE_ID dar_use_id); T_RV_RET dar_diagnose_write_emergency( T_DAR_INFO *buffer_p, T_DAR_FORMAT format, T_RVM_USE_ID dar_use_id, UINT32 flags); T_RV_RET dar_diagnose_generate_emergency( T_DAR_INFO *buffer_p, T_DAR_FORMAT format, T_RVM_USE_ID dar_use_id); #ifdef __cplusplus } #endif #endif /* __DAR_API_H_ */ #endif /* #ifdef RVM_DAR_SWE */