view src/g23m-gprs/grr/grr_psif.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 fa8dc04885d8
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  Project :  GPRS (8441)
|  Modul   :  GRR
+----------------------------------------------------------------------------- 
|  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 service PSI.
+----------------------------------------------------------------------------- 
*/ 

#ifndef GRR_PSIF_H
#define GRR_PSIF_H

#define INIT_NEEDED 1
#define INIT_NOT_NEEDED 0

typedef enum
{
  PSI1_OK,
  PSI1_COMPLETE_ACQ,
  PSI1_PARTIAL_ACQ,
  PSI1_PBCCH_RELEASED,
  PSI1_PBCCH_ESTABLISHED
}T_PSI1_RET;

typedef enum
{
  PSI2_OK,
  PSI2_REREAD
}T_PSI2_RET;

typedef enum
{
  PSI3_OK,
  PSI3_CELL_BARRED,
  PSI3_NCELL_VALID,
  PSI3_NCELL_INVALID
}T_PSI3_RET;

typedef enum
{
  PSI3BIS_OK
#if defined (REL99) AND defined (TI_PS_FF_EMR)
  , PSI3BIS_REREAD_PSI3_3BIS_3TER
#else
  , PSI3BIS_REREAD_PSI3_3BIS
#endif
  , PSI3BIS_REREAD_PSI3BIS,
  PSI3BIS_NCELL_VALID
}T_PSI3BIS_RET;

#if defined (REL99) AND defined (TI_PS_FF_EMR)
typedef enum
{
  PSI3TER_OK,
  PSI3TER_REREAD_PSI3_3BIS_3TER,
  PSI3TER_REREAD_PSI3TER
}T_PSI3TER_RET;
#endif

typedef enum
{
  PSI4_OK,
  PSI4_INT_LIST_VALID,
  PSI4_REREAD
}T_PSI4_RET;

typedef enum
{
  PSI5_OK,
  PSI5_MEAS_PARAM_VALID,
  PSI5_REREAD
}T_PSI5_RET;


#ifdef REL99
typedef enum
{
  PSI8_OK,
  PSI8_CONTENTS_INVALID,
  PSI8_REREAD
}T_PSI8_RET;
#endif

typedef enum
{
  SI13_OK,
  SI13_REREAD,
  SI13_PARTIAL_SI,
  SI13_COMPLETE_SI,
  SI13_COMPLETE_PSI
}T_SI13_RET;

typedef enum
{
  PSI13_OK,
  PSI13_PBCCH_RELEASED,
  PSI13_PBCCH_ESTABLISHED,
  PSI13_PARTIAL_SI,
  PSI13_COMPLETE_SI,
  PSI13_COMPLETE_PSI
}T_PSI13_RET;


typedef enum /* T_STATES_OF_PSI*/
{
  NOT_SEND,
  RECEIPT_OK,
  NEEDED
}T_STATES_OF_PSI;

typedef enum /* T_PSI_MESSAGES*/
{
  PSI1,
  PSI2,
  PSI3,
  PSI3bis,
#ifdef REL99
  PSI3ter,
#endif
  PSI4,
  PSI5,
#ifdef REL99
  PSI8,
#endif
  PSI13
}T_PSI_MESSAGES;

typedef enum
{
  ACQ_RUNNING,
  ACQ_PART_OK,
  ACQ_COMP_OK,
  ACQ_PERIOD_OK,
  ACQ_NPSI_OK
}T_ACQ_STATE_RET;

EXTERN T_ACQ_STATE_RET psi_check_acq_state ( void );

EXTERN void psi_reset_all ( void);

EXTERN void psi_stop_10sec ( void );

EXTERN void psi_start_10sec ( void );

EXTERN void psi_partial_acq ( void );

EXTERN void psi_init ( void );

EXTERN void psi_init_params ( void );

EXTERN void psi_complete_acq ( ACQ_TYPE acq_type  );

EXTERN void psi_send_psi_status ( void );

EXTERN void psi_stop_30sec ( BOOL start_again);

EXTERN void psi_start_30sec ( void );

EXTERN void psi_start_60sec ( void );

EXTERN void psi_stop_60sec ( BOOL start_again);

EXTERN T_PSI13_RET psi_process_psi13 ( T_PSI_13 * psi13 );

EXTERN T_SI13_RET psi_process_si13( T_D_SYS_INFO_13 *si13);

EXTERN T_PSI5_RET psi_process_psi5 ( T_PSI_5 *psi5);

EXTERN T_PSI4_RET psi_process_psi4 ( T_PSI_4 *psi4);

EXTERN T_PSI3BIS_RET psi_process_psi3bis ( T_PSI_3_BIS *psi3bis);

EXTERN T_PSI3_RET psi_process_psi3 ( T_PSI_3 *psi3);

EXTERN T_PSI2_RET psi_process_psi2 ( T_PSI_2 *psi2);

EXTERN T_PSI1_RET psi_process_psi1 ( T_PSI_1 *psi1);

EXTERN void psi_receive_psi ( UBYTE  psi_reading_type);

EXTERN void psi_process_prach ( T_prach_ctrl_par *prach );

EXTERN void psi_reset_si_entries ( void );

EXTERN T_ACQ_STATE_RET psi_acq_state_of_si( T_si_states  si_states );

EXTERN void psi_check_acq_state_of_si( UBYTE updated_si);

EXTERN BOOL psi_is_update_needed ( UBYTE si_change_field );

EXTERN void psi_stop_psi_reading(ACQ_TYPE acq_type_in_idle);

EXTERN void psi_update_data_to_request( UBYTE init_needed);

EXTERN BOOL psi_is_access_class_changed(void);

EXTERN void psi_stop_timer ( void );
EXTERN BOOL psi_is_access_allowed(void);
EXTERN void psi_reread_psi2(void);
#if defined (REL99) AND defined (TI_PS_FF_EMR)
EXTERN void psi_reread_psi3_3bis_3ter(void);
#else
EXTERN void psi_reread_psi3_and_3bis(void);
#endif
EXTERN void psi_reread_psi3bis(void);
#if defined (REL99) AND defined (TI_PS_FF_EMR)
EXTERN void psi_reread_psi3ter(void);
#endif
EXTERN void psi_reread_psi4(void);
EXTERN void psi_reread_psi5(void);

EXTERN void psi_handle_psi1(T_PSI_1 * psi);
EXTERN void psi_handle_psi2(T_PSI_2 * psi);
EXTERN void psi_handle_psi3(T_PSI_3 * psi);
EXTERN void psi_handle_psi3bis(T_PSI_3_BIS *psi);
#if defined (REL99) AND defined (TI_PS_FF_EMR)
EXTERN void psi_handle_psi3ter(T_PSI_3_TER *psi);
#endif
EXTERN void psi_handle_psi4(T_PSI_4 * psi);
#ifdef REL99
EXTERN void psi_handle_psi8(T_PSI_8 * psi);
#endif
EXTERN void psi_send_access_enable_if_needed(void);
EXTERN void psi_initiate_read_complete_si(void);
EXTERN void psi_initiate_read_complete_psi( UBYTE init_needed );
EXTERN void psi_initiate_pbcch_switching(T_PSI_DISABLE_CAUSE dc);

EXTERN void psi_prepare_scell_pbcch_req(T_MPHP_SCELL_PBCCH_REQ *mphp_scell_pbcch_req, 
                                        UBYTE  psi_reading_type);

EXTERN void psi_store_rel_pos(UBYTE *dest, UBYTE rel_pos, UBYTE max_dest);

#ifdef TI_PS_FF_QUAD_BAND_SUPPORT
EXTERN void att_update_std_band_indicator (UBYTE band_indicator);
#endif

#endif /* !GRR_PSIF_H */