view src/cs/layer1/include/l1_msgty.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

/************* Revision Controle System Header *************
 *                  GSM Layer 1 software 
 * L1_MSGTY.H
 *
 *        Filename l1_msgty.h
 *  Copyright 2003 (C) Texas Instruments  
 *
 ************* Revision Controle System Header *************/



/* channels types */
#define L2_CHANNEL_SACCH    1
#define L2_CHANNEL_SDCCH    2
#define L2_CHANNEL_FACCH_H  3
#define L2_CHANNEL_FACCH_F  4
#define L2_CHANNEL_CCCH     5
#define L2_CHANNEL_NBCCH    6
#define L2_CHANNEL_PCH      7
#define L2_CHANNEL_EPCH     8
#define L2_CHANNEL_CBCH     9
#define L2_CHANNEL_EBCCH   10

/****************************************************************/
/* Structure definition for L1S <-> DATA ADAPTOR data blocks    */
/* TCH/9.6 -> 30 bytes                                          */
/* TCH/4.8 -> 15 bytes                                          */
/* TCH/2.4 ->  9 bytes                                          */
/****************************************************************/
typedef struct 
{  
  UWORD8 A[30];  
}  
T_DATA_FRAME;

/****************************************************************/
/* Structure definition for L1A <-> MMI messages                */
/****************************************************************/

typedef struct 
{
  UWORD8  tx_flag;
  UWORD8  traffic_period;
  UWORD8  idle_period;
}  
T_MMI_ADC_REQ;

/****************************************************************/
/* Structure definition for L1S <-> L1A messages                */
/****************************************************************/
typedef T_PH_DATA_IND  T_L1_BCCH_INFO;
typedef T_PH_DATA_IND  T_L1_CCCH_INFO;

/****************************************************************/
/* Structure definition for new L3 <-> L1 messages              */
/****************************************************************/

#if (OP_L1_STANDALONE == 1)
/* Message used for hardware dynamic configuration */
typedef struct
{
  UWORD8   num_of_clock_cfg;    // Dynamic clock configuration index
}
T_TST_HW_CONFIG_REQ;
#endif // OP_L1_STANDALONE

typedef struct
{
  UWORD32  mf51_fn;
}
T_MPHC_START_CBCH_READING;

typedef struct
{
  T_RXLEV_MEAS     A[8]; 
  UWORD8           nbr_of_carriers;
  WORD8            s_rxlev;
  UWORD8           ba_id;
}
T_MPHC_RXLEV_PERIODIC_IND;

typedef struct
{
  TC_CHAN_LIST  chan_list;
  UWORD8        num_of_chans;
  UWORD8        ba_id;
  UWORD8        next_radio_freq_measured;  // index of first radio_freq to be measured
}
T_MPHC_RXLEV_PERIODIC_REQ;

typedef struct
{
  UWORD16  radio_freq;          // carrier id.
}
T_MPHC_NCELL_FB_SB_READ;

typedef struct
{
  UWORD16  radio_freq;          // carrier id.
}
T_MPHC_START_BCCH_READING;

typedef struct
{
  UWORD16  radio_freq;          // carrier id.
  UWORD32  fn_offset;      // offset between fn of this NCELL and the SCELL fn.
  UWORD32  time_alignmt;   // time alignment.
  UWORD8   bsic;           // BSIC.
  UWORD16  si_bit_map;     // System Info. bit map.
}
T_MPHC_NCELL_BCCH_READ;

typedef struct 
{
  UWORD32  fn;
  UWORD8   channel_request;
} 
T_MPHC_RA_CON;

typedef struct
{
  T_CHANNEL_DESCRIPTION  channel_desc;
  UWORD8                 timing_advance;
  T_MOBILE_ALLOCATION    frequency_list;
  T_STARTING_TIME        starting_time;
  T_MOBILE_ALLOCATION    frequency_list_bef_sti;
  UWORD8                 maio_bef_sti;
  BOOL                   dtx_allowed;
  T_BCCH_LIST            bcch_allocation;
  UWORD8                 ba_id;
  BOOL                   pwrc;
}  
T_MPHC_IMMED_ASSIGN_REQ;

typedef struct 
{
  T_CHANNEL_DESCRIPTION  channel_desc_1;
  UWORD8                 channel_mode_1;
  UWORD8                 txpwr;
  T_MOBILE_ALLOCATION    frequency_list;
  T_STARTING_TIME        starting_time;
  T_CHANNEL_DESCRIPTION  channel_desc_2;
  UWORD8         channel_mode_2;
  T_MOBILE_ALLOCATION    frequency_list_bef_sti;
  T_CHANNEL_DESCRIPTION  channel_desc_1_bef_sti;
  T_CHANNEL_DESCRIPTION  channel_desc_2_bef_sti;
  UWORD8                 cipher_mode;
  UWORD8                 a5_algorithm;
  T_ENCRYPTION_KEY       cipher_key;
  BOOL                   dtx_allowed;
  #if (AMR == 1)
    T_AMR_CONFIGURATION  amr_configuration;
  #endif
}  
T_MPHC_CHANNEL_ASSIGN_REQ;


typedef struct
{
  UWORD8   txpwr;
  UWORD8   rand;
  UWORD8   channel_request;
  UWORD8   powerclass_band1;
  UWORD8   powerclass_band2;

}
T_MPHC_RA_REQ;


typedef struct 
{
  T_HO_PARAMS          handover_command;
  UWORD32              fn_offset;     
  UWORD32              time_alignmt;  
  T_ENCRYPTION_KEY     cipher_key;
  #if (AMR == 1)  
    T_AMR_CONFIGURATION  amr_configuration;
  #endif
}
T_MPHC_ASYNC_HO_REQ;

typedef struct 
{
  T_HO_PARAMS          handover_command;
  UWORD32              fn_offset;     
  UWORD32              time_alignmt;  
  T_ENCRYPTION_KEY     cipher_key;
  BOOL                 nci;
  BOOL                 timing_advance_valid;
  UWORD8               timing_advance;
  #if (AMR == 1)  
    T_AMR_CONFIGURATION  amr_configuration;
  #endif
}  
T_MPHC_PRE_SYNC_HO_REQ;

typedef struct 
{
  T_HO_PARAMS       handover_command;
  UWORD32           fn_offset;     
  UWORD32           time_alignmt;  
  T_ENCRYPTION_KEY  cipher_key;
  BOOL              nci;
  UWORD8            real_time_difference;
}  
T_MPHC_PSEUDO_SYNC_HO_REQ;

typedef struct
{
  T_HO_PARAMS          handover_command;
  UWORD32              fn_offset;     
  UWORD32              time_alignmt;  
  T_ENCRYPTION_KEY     cipher_key;
  BOOL                 nci;
  #if (AMR == 1)  
    T_AMR_CONFIGURATION  amr_configuration;
  #endif
}  
T_MPHC_SYNC_HO_REQ;

typedef struct
{
  UWORD8  cause;
}  
T_MPHC_HANDOVER_FINISHED;

typedef struct 
{
  BOOL           dtx_used;
  BOOL           meas_valid;
  WORD16         rxlev_full_acc;
  UWORD8         rxlev_full_nbr_meas;
  WORD16         rxlev_sub_acc;
  UWORD8         rxlev_sub_nbr_meas;
  UWORD16        rxqual_full_acc_errors;
  UWORD16        rxqual_full_nbr_bits;
  UWORD16        rxqual_sub_acc_errors;
  UWORD16        rxqual_sub_nbr_bits;
  UWORD8         no_of_ncell_meas;
  T5_NCELL_MEAS  ncell_meas;
  UWORD8         ba_id;
  UWORD8         timing_advance;
  UWORD8         txpwr_used;

  // RESERVED: for trace/debug only
  UWORD8         facch_dl_count;
  UWORD8         facch_ul_count;
}  
T_MPHC_MEAS_REPORT;

typedef T_NEW_BA_LIST  T_MPHC_UPDATE_BA_LIST;


typedef struct 
{
  UWORD8  bs_pa_mfrms;
  UWORD8  bs_ag_blks_res;
  BOOL    bcch_combined;
  UWORD8  ccch_group;
  UWORD8  page_group;
  UWORD8  page_block_index;
  UWORD8  page_mode;
}
T_MPHC_START_CCCH_REQ;

typedef struct
{
  UWORD8   sb_flag;         //TRUE if SB found and belongs to PLMN, otherwise FALSE
  UWORD16  radio_freq;          // carrier id.
  UWORD8   bsic;           // BSIC.
  UWORD32  fn_offset;      // offset between fn of this NCELL and the SCELL fn.
  UWORD32  time_alignmt;   // time alignment.
}
T_MPHC_NCELL_SB_READ;

typedef T_FULL_LIST_MEAS           T_MPHC_RXLEV_REQ;
typedef T_FULL_LIST_MEAS           T_L1C_VALID_MEAS_INFO;
typedef T_MPHC_RXLEV_PERIODIC_IND  T_L1C_RXLEV_PERIODIC_DONE;



typedef struct
{
  UWORD8 radio_band_config; // frequency band configuration: E-GSM, DCS, GSM/DCS, PCS
}
T_MPHC_INIT_L1_REQ;

/****************************************************************/
/* Structure definition for Test <-> L1A messages                */
/****************************************************************/

typedef struct
{
  UWORD16  dsp_code_version;                      
  UWORD16  dsp_checksum;
  UWORD16  dsp_patch_version;
  UWORD16  mcu_tcs_program_release;
  UWORD16  mcu_tcs_official;
  UWORD16  mcu_tcs_internal;
}
T_TST_TEST_HW_CON;
  
typedef struct
{
  UWORD8  type;
}
T_L1_STATS_REQ;

////////////////////
// Trace messages //
////////////////////

#if ((TRACE_TYPE == 1) || (TRACE_TYPE == 4) || (TRACE_TYPE == 7))

#if (DSP_DEBUG_TRACE_ENABLE == 1)
// DSP DEBUG buffer display
typedef struct
{
  UWORD16  size;
  UWORD32  fn;
  UWORD16  debug_time;
  UWORD16  patch_version;
  UWORD16  trace_level;
  API      buffer[2];  // ANOTHER DEFINITION ???
}
T_DSP_DEBUG_INFO;

// DSP AMR trace
typedef struct
{
  UWORD16  size;
  UWORD32  fn;
  API      buffer[2];  // ANOTHER DEFINITION ???
}
T_DSP_AMR_DEBUG_INFO;

#endif

typedef struct
{
  UWORD32        trace_config;
  UWORD32        rtt_cell_enable[8];
  UWORD32        rtt_event;
}
T_TRACE_CONFIG_CHANGE;

#if (L1_GPRS)
// Packet transfer trace
typedef struct
{
  UWORD32 fn;
  UWORD8  rx_allocation;
  UWORD8  tx_allocation;
  BOOL    blk_status;
  UWORD8  dl_cs_type;
  UWORD8  dl_status[4];
  UWORD8  ul_status[8];
}
T_CONDENSED_PDTCH_INFO;
#endif

typedef struct
{
  UWORD8   debug_code;
  UWORD32  fn;
  UWORD32  tab[7];
}
T_QUICK_TRACE;

#endif

#if ((TRACE_TYPE == 1) || (TRACE_TYPE == 4) || (TRACE_TYPE == 7))
typedef struct
{
  UWORD8   debug_code;
  UWORD32  tab[8];
}
T_TRACE_INFO;
#endif

#if (TRACE_TYPE==7) // CPU LOAD

// Number of measurements before output to UART

#define C_MESURE_DEPTH    13

/*
 *  cpu        : hisr cpu load in microseconds
 *  cpu_access : lisr -> hisr begining cpu load in microseconds
 *  fn         : Frame number modulo 104 
 */

typedef struct
{
 UWORD16 cpu;
 UWORD16 cpu_access;
 UWORD8  fn;
 BOOL    valid;
} 
T_MESURE;

typedef struct
{
  UWORD8   debug_code;
  T_MESURE tab[C_MESURE_DEPTH];
}
T_TRACE_INFO_CPU_LOAD;

#endif


/****************************************************************/
/* Structure definition for POWER MANAGEMENt.                   */
/****************************************************************/
typedef struct
{
  UWORD8   sleep_mode;
  UWORD16  clocks;
}
T_TST_SLEEP_REQ;

// ...................NEW FOR ALR....................
typedef struct
{
  UWORD8            schedule_array_size;
  T_BCCHS_SCHEDULE  schedule_array[10];
}
T_MPHC_SCELL_NBCCH_REQ;

typedef struct
{
  UWORD8            schedule_array_size;
  T_BCCHS_SCHEDULE  schedule_array[10];
}
T_MPHC_SCELL_EBCCH_REQ;

typedef struct
{
  UWORD16  radio_freq;
  UWORD32  fn_offset;
  UWORD32  time_alignmt;
  UWORD8   tsc;
  UWORD16  bcch_blks_req;
#if L1_GPRS
  UWORD8   gprs_priority;
#endif
}
T_MPHC_NCELL_BCCH_REQ;

typedef struct
{
  UWORD16        radio_freq;
  UWORD8         l2_channel;
  BOOL           error_flag;
  T_RADIO_FRAME  l2_frame;
  UWORD8         tc;
  WORD8          ccch_lev;
  UWORD32        fn;

  // L1S -> L1A data only
  UWORD8         neigh_id;
}
T_MPHC_DATA_IND;

typedef T_MPHC_DATA_IND  T_MPHC_NCELL_BCCH_IND;
typedef T_MPHC_DATA_IND  T_L1C_BCCHS_INFO;
typedef T_MPHC_DATA_IND  T_L1C_BCCHN_INFO;

typedef struct
{
  UWORD16     radio_freq;
  UWORD32     fn_offset;
  UWORD32     time_alignmt;
  UWORD8      timing_validity;
  UWORD8      search_mode;
}
T_MPHC_NETWORK_SYNC_REQ;

typedef struct
{
  UWORD16     radio_freq;
  BOOL        sb_flag;
  UWORD32     fn_offset;
  UWORD32     time_alignmt;
  UWORD8      bsic;
}
T_MPHC_NETWORK_SYNC_IND;

typedef struct
{
  UWORD16     radio_freq;
  UWORD32     fn_offset;
  UWORD32     time_alignmt;
  UWORD8      timing_validity;
}
T_MPHC_NCELL_SYNC_REQ;

#if (L1_12NEIGH ==1)
typedef struct
{
  UWORD8     eotd;
  UWORD8     list_size;
  T_MPHC_NCELL_SYNC_REQ ncell_list[NBR_NEIGHBOURS];
}
T_MPHC_NCELL_LIST_SYNC_REQ;
#endif



typedef struct
{
  UWORD16     radio_freq;
  BOOL        sb_flag;          // used to fill "data_valid" field for Cursor
  UWORD32     fn_offset;
  UWORD32     time_alignmt;
  UWORD8      bsic;

  // L1S -> L1A data only
  UWORD8      neigh_id;
  UWORD8      attempt;

  // RESERVED: for trace/debug and test mode only
  UWORD32     pm;
  UWORD32     toa;
  UWORD32     angle;
  UWORD32     snr;

  // EOTD data : L1S -> L1A
#if (L1_EOTD==1)
  UWORD8      eotd_data_valid;  // indicates to L3 that it's an EOTD result
  UWORD8      mode;             // indicates to CURSOR that it's Idle(0) or Dedicated (1)
  WORD16      d_eotd_first;
  WORD16      d_eotd_max;
  UWORD32     d_eotd_nrj;
  WORD16      a_eotd_crosscor[18];
  UWORD32     timetag; 
  UWORD32     fn_sb_neigh;      // used for Timetag computation
  UWORD32     fn_in_SB;         // sent to CURSOR for SC fn (header=46 ...) 

  // TOA correction for timetag in dedicated mode...
  WORD32      toa_correction;

  // for Debug traces ............
  UWORD32     delta_fn;
  WORD32      delta_qbit;
#endif 
}
T_MPHC_NCELL_SYNC_IND;

typedef T_MPHC_NCELL_SYNC_IND  T_L1C_SB_INFO;
typedef T_MPHC_NCELL_SYNC_IND  T_L1C_SBCONF_INFO;

typedef struct
{
  UWORD16     radio_freq;
  UWORD32     fn_offset;
  UWORD32     time_alignmt;
  UWORD8      bsic;
}
T_MPHC_NEW_SCELL_REQ;

typedef struct
{
  BOOL    fb_flag;
  WORD8   ntdma;
  UWORD8  neigh_id;
#if (L1_12NEIGH ==1)
  // L1S --> L1A data only 
  UWORD8   attempt;
#endif
  // RESERVED: for Trace/Debug and test mode only
  UWORD32  pm;
  UWORD32  toa;
  UWORD32  angle;
  UWORD32  snr;
  UWORD16 radio_freq;
}
T_L1C_FB_INFO;

typedef struct
{
  WORD8     radio_freq_array_size;
#if (L1_12NEIGH ==1)
  UWORD16   radio_freq_array[NBR_NEIGHBOURS];
#else
  UWORD16   radio_freq_array[6];
#endif
}
T_MPHC_STOP_NCELL_SYNC_REQ;

typedef struct
{
  UWORD8    radio_freq_array_size;
  UWORD16   radio_freq_array[6];
}
T_MPHC_STOP_NCELL_BCCH_REQ;

typedef struct
{
  T_CHANNEL_DESCRIPTION cbch_desc;
  T_MOBILE_ALLOCATION   cbch_freq_list;
}
T_MPHC_CONFIG_CBCH_REQ;

typedef struct
{
  BOOL    extended_cbch;
  UWORD8  schedule_length;
  UWORD32 first_block_0;
  UWORD16 first_block_1;
}
T_MPHC_CBCH_SCHEDULE_REQ;

typedef struct
{
  UWORD8  tb_bitmap;
}
T_MPHC_CBCH_INFO_REQ;

typedef struct
{
  BOOL    extended_cbch;
  UWORD32 first_block_0;
  UWORD16 first_block_1;
}
T_MPHC_CBCH_UPDATE_REQ;

typedef struct
{
  BOOL  normal_cbch;
  BOOL  extended_cbch;
}
T_MPHC_STOP_CBCH_REQ;

// ...................NEW FOR ALR....................

/****************************************************************/
/* Structure definition for L1 configuration.                   */
/****************************************************************/
typedef struct
{
 UWORD8   std;
 UWORD8   swap_iq_band1;
 UWORD8   swap_iq_band2;
 UWORD8   pwr_mngt;
 UWORD8   tx_pwr_code;
 UWORD16  dwnld;
 UWORD8   pwr_mngt_mode_authorized;
 UWORD32  pwr_mngt_clocks;
}
T_MMI_L1_CONFIG;