FreeCalypso > hg > freecalypso-sw
view gsm-fw/L1/include/l1_defty.h @ 721:fc7158e1bda3
mm_fors.c compiles
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sat, 04 Oct 2014 01:16:19 +0000 |
parents | b0af3534ef35 |
children |
line wrap: on
line source
/************* Revision Controle System Header ************* * GSM Layer 1 software * L1_DEFTY.H * * Filename l1_defty.h * Copyright 2003 (C) Texas Instruments * ************* Revision Controle System Header *************/ #if (L1_RF_KBD_FIX == 1) #include "l1_macro.h" #if(OP_L1_STANDALONE == 0) #include "kpd/kpd_scan_functions.h" #endif #endif #include "../../gpf/inc/cust_os.h" #if(L1_DYN_DSP_DWNLD == 1) #include "../dyn_dwl_include/l1_dyn_dwl_defty.h" #endif #if (L1_AAC == 1) //ADDED for AAC -sajal #include "l1aac_defty.h" #endif typedef struct { UWORD8 enable; // activation of FACCH test UWORD8 period; // period of FACCH test } T_FACCH_TEST_PARAMS; typedef struct { UWORD16 modulus; UWORD16 relative_position; } T_BCCHS_SCHEDULE; typedef struct { UWORD8 schedule_array_size; T_BCCHS_SCHEDULE schedule_array[10]; } T_BCCHS; typedef struct { UWORD8 srr; /* SACCH Repetition Request - UL */ UWORD8 sro; /* SACCH Repetition Order - DL */ UWORD8 buffer[22+1]; /* New uplink buffer to save the repetition block data in case of retransmission */ BOOL buffer_empty; /* It is equal to 1 if the UL repetion buffer should be empty otherwise 0 */ } T_REPEAT_SACCH; typedef struct { API buffer[12]; /* New buffer to save the DL data for comparison */ UWORD8 buffer_empty; /* To indicate the saved buffer */ }T_REPEAT_FACCH_PIPELINE; typedef struct { T_REPEAT_FACCH_PIPELINE pipeline[2]; UWORD8 counter; UWORD8 counter_candidate; } T_REPEAT_FACCH; typedef struct { BOOL status; UWORD16 radio_freq; UWORD32 fn_offset; UWORD32 time_alignmt; UWORD8 sb26_attempt; UWORD8 tsc; UWORD16 bcch_blks_req; UWORD8 timing_validity; UWORD8 search_mode; UWORD8 gprs_priority; UWORD8 sb26_offset; // Set to 1 when SB26 RX win is entirely in frame 25. #if (L1_12NEIGH ==1) UWORD32 fn_offset_mem; UWORD32 time_alignmt_mem; #endif // (L1_12NEIGH ==1) #if ((REL99 == 1) && ((FF_BHO == 1) || (FF_RTD == 1))) UWORD8 nb_fb_attempt ; UWORD8 fb26_position; // used for RTD feature #endif } T_NCELL_SINGLE; #if ((REL99 == 1) && (FF_BHO == 1)) typedef struct { UWORD8 fb_found_attempt; UWORD16 radio_freq; UWORD32 fn_offset; UWORD32 time_alignmt; UWORD32 fb_toa; } T_BHO_PARAM; #endif // #if ((REL99 == 1) && (FF_BHO == 1)) typedef struct { UWORD8 active_neigh_id_norm; UWORD8 active_neigh_tc_norm; UWORD8 active_neigh_id_top; UWORD8 active_neigh_tc_top; UWORD8 current_list_size; T_NCELL_SINGLE list[6]; } T_BCCHN_LIST; typedef struct { UWORD8 active_fb_id; UWORD8 active_sbconf_id; UWORD8 active_sb_id; UWORD8 current_list_size; UWORD8 first_in_list; //point at oldest element in list. Used when parsing the list. #if (L1_EOTD==1) #if L1_EOTD_QBIT_ACC // Store serving fn_offset and time_alignmt, so that they can be tracked // independently. UWORD32 serv_fn_offset; UWORD32 serv_time_alignmt; #endif // Need to track any TOA updates in dedicated mode else // QB errors are introduced in the results... UWORD8 eotd_toa_phase; WORD32 eotd_toa_tracking; WORD32 eotd_cache_toa_tracking; UWORD8 eotd_meas_session; UWORD32 fn_sb_serv; // for methods 1 & 2 UWORD32 ta_sb_serv; // for methods 1 & 2 WORD32 teotdS; // for method 2 only UWORD32 fn_offset_serv; // for method 2 only #endif #if (L1_12NEIGH==1) T_NCELL_SINGLE list[NBR_NEIGHBOURS+1]; // 1 place (13th) for S.C in EOTD. #else T_NCELL_SINGLE list[6]; #endif } T_NSYNC_LIST; typedef struct { UWORD8 cbch_state; UWORD32 starting_fn; UWORD32 first_block[48]; UWORD8 cbch_num; UWORD8 schedule_length; UWORD8 next; WORD32 start_continuous_fn; } T_CBCH_HEAD_SCHEDULE; typedef struct { UWORD8 cbch_num; UWORD8 next; UWORD32 start_fn[6]; } T_CBCH_INFO_SCHEDULE; /*=========================================================================*/ /* Moved type definitions from Debis files. */ /*=========================================================================*/ #if (AMR == 1) // AMR ver 1.0 parameters typedef struct { BOOL noise_suppression_bit; BOOL initial_codec_mode_indicator; UWORD8 initial_codec_mode; UWORD8 active_codec_set; UWORD8 threshold[3]; UWORD8 hysteresis[3]; } T_AMR_CONFIGURATION; #endif typedef struct { #if(L1_A5_3 == 1 && OP_L1_STANDALONE != 1) UWORD8 A[15+1]; #else UWORD8 A[7+1]; #endif } T_ENCRYPTION_KEY; typedef struct { UWORD8 A[22+1]; } T_RADIO_FRAME; typedef struct { UWORD8 n32; UWORD8 n51; UWORD8 n26; } T_SHORT_FRAME_NUMBER; typedef struct { UWORD16 A[31+1]; } T_CHAN_LIST; typedef struct { UWORD16 num_of_chans; T_CHAN_LIST chan_number; } T_BCCH_LIST; typedef struct { UWORD16 rf_chan_num; UWORD8 l2_channel_type; UWORD8 error_cause; T_RADIO_FRAME l2_frame; UWORD8 bsic; UWORD8 tc; } T_PH_DATA_IND; typedef struct { UWORD16 A[63+1]; } T_MA_FIELD; typedef struct { UWORD16 rf_chan_cnt; T_MA_FIELD rf_chan_no; } T_MOBILE_ALLOCATION; typedef struct { BOOL start_time_present; T_SHORT_FRAME_NUMBER start_time; } T_STARTING_TIME; typedef struct { UWORD16 radio_freq_no; WORD8 rxlev; } T_RXLEV_MEAS; typedef struct { UWORD8 maio; UWORD8 hsn; } T_HOPPING_RF; typedef struct { UWORD16 radio_freq; } T_SINGLE_RF; typedef union { T_SINGLE_RF single_rf; T_HOPPING_RF hopping_rf; } T_CHN_SEL_CHOICE; typedef struct { BOOL h; T_CHN_SEL_CHOICE rf_channel; } T_CHN_SEL; typedef struct { T_CHN_SEL chan_sel; UWORD8 channel_type; UWORD8 subchannel; UWORD8 timeslot_no; UWORD8 tsc; } T_CHANNEL_DESCRIPTION; typedef struct { UWORD8 ncc; UWORD8 bcc; UWORD16 bcch_carrier; } T_CELL_DESC; typedef struct { T_CELL_DESC cell_description; T_CHANNEL_DESCRIPTION channel_desc_1; UWORD8 channel_mode_1; T_STARTING_TIME starting_time; UWORD8 ho_acc; UWORD8 txpwr; BOOL report_time_diff; T_MOBILE_ALLOCATION frequency_list; 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; BOOL cipher_mode; UWORD8 a5_algorithm; } T_HO_PARAMS; typedef struct { UWORD8 subchannel; UWORD8 channel_mode; #if (AMR == 1) T_AMR_CONFIGURATION amr_configuration; #endif } T_MPHC_CHANNEL_MODE_MODIFY_REQ; typedef struct { UWORD8 sub_channel; UWORD8 frame_erasure; } T_OML1_CLOSE_TCH_LOOP_REQ; typedef struct { #if (defined _WINDOWS && (OP_RIV_AUDIO == 1)) T_RV_HDR header; #endif UWORD8 tested_device; } T_OML1_START_DAI_TEST_REQ; /***********************************************************/ /* Type definitions for DEBUG... */ /***********************************************************/ typedef struct // translate string in int and int in string { CHAR *message; WORD32 SignalCode; WORD32 size; } MSG_DEBUG; typedef struct // translate string in int and int in string { CHAR *name; } TASK_TRACE; /***********************************************************/ /* Type definitions for data structures used for MFTAB */ /* managment... */ /***********************************************************/ typedef struct { void (*fct_ptr)(UWORD8,UWORD8); CHAR param1; CHAR param2; } T_FCT; typedef struct { T_FCT fct[L1_MAX_FCT]; } T_FRM; typedef struct { T_FRM frmlst[MFTAB_SIZE]; } T_MFTAB; typedef struct { const T_FCT *address; UWORD8 size; } T_TASK_MFTAB; #if (GSM_IDLE_RAM != 0) typedef struct { BOOL l1s_full_exec; BOOL trff_ctrl_enable_cause_int; WORD32 hw_timer; WORD32 os_load; UWORD32 sleep_mode; #if GSM_IDLE_RAM_DEBUG UWORD32 killing_flash_access; UWORD32 killing_ext_ram_access; UWORD32 irq; UWORD32 fiq; UWORD32 nb_inth; #if (CHIPSET == 10) && (OP_WCP == 1) UWORD16 TC_true_control; #endif // CHIPSET && OP_WCP #endif // GSM_IDLE_RAM_DEBUG UWORD32 task_bitmap_idle_ram[SIZE_TAB_L1S_MONITOR]; UWORD32 mem_task_bitmap_idle_ram[SIZE_TAB_L1S_MONITOR]; } T_L1S_GSM_IDLE_INTRAM; #endif // GSM_IDLE_RAM /***********************************************************/ /* TPU controle register components definition. */ /***********************************************************/ #if (CODE_VERSION==SIMULATION) typedef struct // contents of REG_CMD register { unsigned int tpu_reset_bit : 1; // TPU_RESET bit : ON (reset TPU) unsigned int tpu_pag_bit : 1; // TPU_PAG bit : 0 (page 0) unsigned int tpu_enb_bit : 1; // TPU_ENB bit : ON (TPU commun.int.) unsigned int dsp_pag_bit : 1; // DSP_PAG bit : 0 (page 0) unsigned int dsp_enb_bit : 1; // DSP_ENB bit : ON (DSP commun.int.) unsigned int tpu_stat_bit : 1; // TPU_STAT bit : ON (if TPU active) OFF (if TPU in IDLE) unsigned int tpu_idle_bit : 1; // TPU_IDLE bit : ON (force IDLE mode) } T_reg_cmd; // Rem: we must keep "unsigned int" type for bitmap. #else typedef struct // contents of REG_CMD register { unsigned int tpu_reset_bit : 1; // TPU_RESET bit : ON (reset TPU) unsigned int tpu_pag_bit : 1; // TPU_PAG bit : 0 (page 0) unsigned int tpu_enb_bit : 1; // TPU_ENB bit : ON (TPU commun.int.) unsigned int unused_1 : 1; // unsigned int dsp_enb_bit : 1; // DSP_ENB bit : ON (DSP commun.int.) unsigned int unused_2 : 1; // unsigned int unused_3 : 1; // unsigned int tsp_reset_bit : 1; // TSP_RESET bit : ON (reset TSP) unsigned int tpu_idle_bit : 1; // TPU_IDLE bit : ON (force IDLE mode) unsigned int tup_wait_bit : 1; // TPU_WAIT bit : ON (TPU ready) unsigned int tpu_ck_enb_bit: 1; // TPU_CLK bit : ON (TPU clock on) } T_reg_cmd; #endif /***********************************************************/ /* */ /* Data structure for global info components. */ /* */ /***********************************************************/ typedef struct { API d_task_d; // 0x0800 (0) Downlink task command. API d_burst_d; // 0x0801 (1) Downlink burst identifier. API d_task_u; // 0x0802 (2) Uplink task command. API d_burst_u; // 0x0803 (3) Uplink burst identifier. API d_task_md; // 0x0804 (4) Downlink Monitoring (FB/SB) command. #if (DSP >= 33) API d_background; // 0x0805 (5) Background tasks #else API d_reserved; // 0x0805 (5) Reserved #endif API d_debug; // 0x0806 (6) Debug/Acknowledge/general purpose word. API d_task_ra; // 0x0807 (7) RA task command. API d_fn; // 0x0808 (8) FN, in Rep. period and FN%104, used for TRAFFIC/TCH only. // bit [0..7] -> b_fn_report, FN in the normalized reporting period. // bit [8..15] -> b_fn_sid, FN % 104, used for SID positionning. API d_ctrl_tch; // 0x0809 (9) Tch channel description. // bit [0..3] -> b_chan_mode, channel mode. // bit [4..5] -> b_chan_type, channel type. // bit [6] -> reset SACCH // bit [7] -> vocoder O // bit [8] -> b_sync_tch_ul, synchro. TCH/UL. // bit [9] -> b_sync_tch_dl, synchro. TCH/DL. // bit [10] -> b_stop_tch_ul, stop TCH/UL. // bit [11] -> b_stop_tch_dl, stop TCH/DL. // bit [12.13] -> b_tch_loop, tch loops A/B/C. API hole; // 0x080A (10) unused hole. #if ((ANALOG == 1) || (ANALOG == 2) || (ANALOG == 3) || (ANALOG == 11)) API d_ctrl_abb; // 0x080B (11) Bit field indicating the analog baseband register to send. // bit [0] -> b_ramp: the ramp information(a_ramp[]) is located in NDB // bit [1.2] -> unused // bit [3] -> b_apcdel: delays-register in NDB // bit [4] -> b_afc: freq control register in DB // bit [5..15] -> unused #endif API a_a5fn[2]; // 0x080C (12..13) Encryption Frame number. // word 0, bit [0..4] -> T2. // word 0, bit [5..10] -> T3. // word 1, bit [0..11] -> T1. API d_power_ctl; // 0x080E (14) Power level control. API d_afc; // 0x080F (15) AFC value (enabled by "b_afc" in "d_ctrl_TCM4400 or in d_ctrl_abb"). API d_ctrl_system; // 0x0810 (16) Controle Register for RESET/RESUME. // bit [0..2] -> b_tsq, training sequence. // bit [3] -> b_bcch_freq_ind, BCCH frequency indication. // bit [15] -> b_task_abort, DSP task abort command. // bit [4] -> B_SWH_APPLY_WHITENING, Apply whitening. //#if (((DSP == 36)||(DSP == 37)||(DSP == 38) || (DSP == 39))) // API d_swh_ApplyWhitening_db; // 0x0811 SWH Whitening Activation Flag //#endif } T_DB_MCU_TO_DSP; #if (DSP == 38) || (DSP == 39) // DB COMMON to GSM and GPRS typedef struct { API d_dco_algo_ctrl_nb; // DRP DCO enable/disable for normal burst API d_dco_algo_ctrl_sb; // DRP DCO enable/disable for synchro burst API d_dco_algo_ctrl_pw; // DRP DCO enable/disable for power burst API d_swh_ctrl_db; API d_fast_paging_ctrl; } T_DB_COMMON_MCU_TO_DSP; #endif // DSP == 38 || DSP == 39 /* DSP CPU load measurement */ #if (DSP == 38) || (DSP == 39) // DB COMMON to GSM and GPRS typedef struct { API d_dsp_fgd_tsk_tim0; API d_dsp_fgd_tsk_tim1; API d_tdma_dsp_fn; API d_dsp_page_read; } T_DB_MCU_TO_DSP_CPU_LOAD; #endif // DSP == 38 || DSP == 39 typedef struct { API d_task_d; // 0x0828 (0) Downlink task command. API d_burst_d; // 0x0829 (1) Downlink burst identifier. API d_task_u; // 0x082A (2) Uplink task command. API d_burst_u; // 0x082B (3) Uplink burst identifier. API d_task_md; // 0x082C (4) Downlink Monitoring (FB/SB) task command. #if (DSP >= 33) API d_background; // 0x082D (5) Background tasks #else API d_reserved; // 0x082D (5) Reserved #endif API d_debug; // 0x082E (6) Debug/Acknowledge/general purpose word. API d_task_ra; // 0x082F (7) RA task command. #if (DSP >= 33) API a_serv_demod[4]; // 0x0830 ( 8..11) Serv. cell demod. result, array of 4 words (D_TOA,D_PM,D_ANGLE,D_SNR). API a_pm[3]; // 0x0834 (12..14) Power measurement results, array of 3 words. API a_sch[5]; // 0x0837 (15..19) Header + SB information, array of 5 words. #else API a_pm[3]; // ( 8..10) Power measurement results, array of 3 words. API a_serv_demod[4]; // (11..14) Serv. cell demod. result, array of 4 words (D_TOA,D_PM,D_ANGLE,D_SNR). API a_sch[5]; // (15..19) Header + SB information, array of 5 words. #endif } T_DB_DSP_TO_MCU; #if (DSP == 38) || (DSP == 39) typedef struct { // MISC Tasks API d_dsp_page; // 0x08D4 // DSP status returned (DSP --> MCU). API d_error_status; // 0x08D5 // RIF control (MCU -> DSP). // following is removed for Locosto API d_spcx_rif_hole; // 0x08D6 API d_tch_mode; // 0x08D7 TCH mode register. // bit [0..1] -> b_dai_mode. // bit [2] -> b_dtx. API d_debug1; // 0x08D8 bit 0 at 1 enable dsp f_tx delay for Omega API d_dsp_test; // 0x08D9 // Words dedicated to Software version (DSP code + Patch) API d_version_number1; // 0x08DA API d_version_number2; // 0x08DB API d_debug_ptr; // 0x08DC API d_debug_bk; // 0x08DD API d_pll_config; // 0x08DE // GSM/GPRS DSP Debug trace support API p_debug_buffer; // 0x08DF API d_debug_buffer_size; // 0x08E0 API d_debug_trace_type; // 0x08E1 #if (W_A_DSP_IDLE3 == 1) // DSP report its state: 0 run, 1 Idle1, 2 Idle2, 3 Idle3. API d_dsp_state; // 0x08E2 // 5 words are reserved for any possible mapping modification API d_hole1_ndb[2]; // 0x08E3 #else // 6 words are reserved for any possible mapping modification API d_hole1_ndb[3]; #endif #if (AMR == 1) API p_debug_amr; // 0x08E5??? DSP doc says reserved #else API d_hole_debug_amr; #endif API d_dsp_iq_scaling_factor; // 0x08E6 API d_mcsi_select; // 0x08E7 // New words APCDEL1 and APCDEL2 for 2TX: TX/PRACH combinations API d_apcdel1_bis; // 0x08E8 API d_apcdel2_bis; // New registers due to IOTA analog base band API d_apcdel2; API d_vbctrl2_hole; // 0x08EB API d_bulgcal_hole; // 0x08EC // Analog Based Band - removed in ROM 38 API d_afcctladd_hole; // 0x08ED API d_vbuctrl_hole; // 0x08EE - removed in ROM38 API d_vbdctrl_hole; // 0x08EF - removed in ROM38 API d_apcdel1; // 0x08F0 // New Variables Added due to the APC Switch // But for when DSP is in Idle3 all writes from MCU to APC are routed via DSP API d_apclev; // APCLEV - 0x08F1 (In ROM36 - apcoff ) // NOTE: Used Only in Test mode // Only when l1_config.tmode.rf_params.down_up == TMODE_UPLINK; API d_apcctrl2; // APCCTRL2 - 0x08F2 (In ROM36 - bulioff) API d_bulqoff_hole; // 0x08F3 API d_dai_onoff; // 0x08F4 API d_auxdac_hole; // 0x08F5 API d_vbctrl_hole; // 0x08F6 - removed in ROM38 API d_bbctrl_hole; // 0x08F7 - removed in ROM38 // Monitoring tasks control (MCU <- DSP) // FB task API d_fb_det; // 0x08F8 FB detection result. (1 for FOUND). API d_fb_mode; // Mode for FB detection algorithm. API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR). // SB Task API a_sch26[5]; // 0x08FE Header + SB information, array of 5 words. API d_audio_gain_ul; // 0x0903 API d_audio_gain_dl; // 0x0904 // Controller of the melody E2 audio compressor - removed in ROM 38 API d_audio_compressor_ctrl_hole; // 0x0905 - removed in ROM37,38 // AUDIO module API d_audio_init; // 0x0906 API d_audio_status; // // Audio tasks // TONES (MCU -> DSP) API d_toneskb_init; API d_toneskb_status; API d_k_x1_t0; API d_k_x1_t1; API d_k_x1_t2; API d_pe_rep; API d_pe_off; API d_se_off; API d_bu_off; // 0x0910 API d_t0_on; API d_t0_off; API d_t1_on; API d_t1_off; API d_t2_on; API d_t2_off; API d_k_x1_kt0; API d_k_x1_kt1; API d_dur_kb; API d_shiftdl; API d_shiftul; // 0x091B API d_aec_18_hole; // 0x091C API d_es_level_api; API d_mu_api; // Melody Ringer module API d_melo_osc_used; // 0x091F API d_melo_osc_active; // 0x0920 API a_melo_note0[4]; API a_melo_note1[4]; API a_melo_note2[4]; API a_melo_note3[4]; API a_melo_note4[4]; API a_melo_note5[4]; API a_melo_note6[4]; API a_melo_note7[4]; // selection of the melody format API d_melody_selection; // 0x0941 // Holes due to the format melody E1 API a_melo_holes[3]; // Speech Recognition module - Removed in ROM38 API d_sr_holes[19]; // 0x0945 // Audio buffer API a_dd_1[22]; // 0x0958 Header + DATA traffic downlink information, sub. chan. 1. API a_du_1[22]; // 0x096E Header + DATA traffic uplink information, sub. chan. 1. // V42bis module API d_v42b_nego0; // 0x0984 API d_v42b_nego1; API d_v42b_control; API d_v42b_ratio_ind; API d_mcu_control; API d_mcu_control_sema; // Background tasks API d_background_enable; // 0x098A API d_background_abort; API d_background_state; API d_max_background; API a_background_tasks[16]; // 0x098E API a_back_task_io[16]; //0x099E // GEA module defined in l1p_deft.h (the following section is overlaid with GPRS NDB memory) API d_gea_mode_ovly_hole; // 0x09AE API a_gea_kc_ovly_hole[4]; // 0x09AF API d_hole3_ndb[6]; //0x09B3 API d_dsp_aud_hint_flag; // 0x09B9; // word used for the init of USF threshold API d_thr_usf_detect; // 0x09BA // Encryption module API d_a5mode; // Encryption Mode. API d_sched_mode_gprs_ovly; // 0x09Bc #if (FF_L1_IT_DSP_USF == 1) || (FF_L1_IT_DSP_DTX == 1) API d_hole1_fast_ndb[1]; // 0x09BD; API d_dsp_hint_flag; // 0x09BE; //used for fast usf and fast dtx and other dyn dwn // 6 words are reserved for any possible mapping modification #if FF_L1_IT_DSP_DTX API d_fast_dtx_enable;//used for enabling fast dtx- 0x09BF API d_fast_dtx_enc_data;//fast usf written by DSP to indicate tx data is there or not- 0x09C0 #else // FF_L1_IT_DSP_DTX API d_hole3_fast_ndb[2]; // 0x09BF #endif // FF_L1_IT_DSP_USF #if (FF_L1_FAST_DECODING == 1) API d_fast_paging_data; // 0x9C1 #else API d_hole_fast_paging_ndb; #endif /* FF_L1_FAST_DECODING*/ #else // 7 words are reserved for any possible mapping modification API d_hole4_ndb[5]; // 0x09BD #endif // Ramp definition for Omega device API a_ramp_hole[16]; //0x09C2 // CCCH/SACCH downlink information...(!!) API a_cd[15]; //0x09D2 Header + CCCH/SACCH downlink information. // FACCH downlink information........(!!) API a_fd[15]; // 0x09E1 Header + FACCH downlink information. // Traffic downlink data frames......(!!) API a_dd_0[22]; // 0x09F0 Header + DATA traffic downlink information, sub. chan. 0. // CCCH/SACCH uplink information.....(!!) API a_cu[15]; // 0x0A06 Header + CCCH/SACCH uplink information. // FACCH downlink information........(!!) API a_fu[15]; // 0x0A15 Header + FACCH uplink information // Traffic downlink data frames......(!!) API a_du_0[22]; // 0x0A24 Header + DATA traffic uplink information, sub. chan. 0. // Random access.....................(MCU -> DSP). API d_rach; // 0x0A3A RACH information. //...................................(MCU -> DSP). API a_kc[4]; // 0x0A3B Encryption Key Code. // Integrated Data Services module API d_ra_conf; API d_ra_act; API d_ra_test; API d_ra_statu; API d_ra_statd; API d_fax; API a_data_buf_ul[21]; // 0x0A45 API a_data_buf_dl[37]; // 0x0A5A API a_sr_holes0[422]; // 0x0A7F #if (L1_AEC == 1) #if (L1_NEW_AEC) API d_cont_filter; API d_granularity_att; API d_coef_smooth; API d_es_level_max; API d_fact_vad; API d_thrs_abs; API d_fact_asd_fil; API d_fact_asd_mut; API d_far_end_pow_h; API d_far_end_pow_l; API d_far_end_noise_h; API d_far_end_noise_l; #else API a_sr_hole1[12]; #endif #else API a_sr_hole2[12]; #endif // Speech recognition model API a_sr_holes1[145]; // 0x0C31 // Correction of PR G23M/L1_MCU-SPR-15494 API d_cport_init; // 0x0CC2 API d_cport_ctrl; API a_cport_cfr[2]; API d_cport_tcl_tadt; API d_cport_tdat; API d_cport_tvs; API d_cport_status; API d_cport_reg_value; API a_cport_holes[1011]; API a_model_holes[1041]; // EOTD buffer #if (L1_EOTD==1) API d_eotd_first; API d_eotd_max; API d_eotd_nrj_high; API d_eotd_nrj_low; API a_eotd_crosscor[18]; #else API a_eotd_holes[22]; #endif // AMR ver 1.0 buffers API a_amr_config[4]; // 0x14E5 API a_ratscch_ul[6]; API a_ratscch_dl[6]; API d_amr_snr_est; // estimation of the SNR of the AMR speech block #if (L1_VOICE_MEMO_AMR) API d_amms_ul_voc; #else API a_voice_memo_amr_holes[1]; #endif API d_thr_onset_afs; // thresh detection ONSET AFS API d_thr_sid_first_afs; // thresh detection SID_FIRST AFS API d_thr_ratscch_afs; // thresh detection RATSCCH AFS API d_thr_update_afs; // thresh detection SID_UPDATE AFS API d_thr_onset_ahs; // thresh detection ONSET AHS API d_thr_sid_ahs; // thresh detection SID frames AHS API d_thr_ratscch_marker; // thresh detection RATSCCH MARKER API d_thr_sp_dgr; // thresh detection SPEECH DEGRADED/NO_DATA API d_thr_soft_bits; // 0x14FF API a_amrschd_debug[30]; // 0x1500 #if (W_A_AMR_THRESHOLDS) API a_d_macc_thr_afs[8]; // 0x151E API a_d_macc_thr_ahs[6]; // 0x1526 #else API d_holes[14]; // 0x151E #endif // There is no melody E2 in DSP ROM38 as of now -> Only Holes API d_melody_e2_holes[17]; // 0x152C API d_vol_ul_level_hole; // 0x153D API d_vol_dl_level_hole; // 0x153E API d_vol_speed_hole; // 0x153F API d_sidetone_level_hole; // 0x1540 // Audio control area API d_es_ctrl; // 0x1541 API d_anr_ul_ctrl; API d_aec_ul_ctrl; API d_agc_ul_ctrl; //API d_aqi_ctrl_hole1[4]; // Reserved for future UL modules earlier code now modified and added d_vad_noise_ene_ndb API d_aqi_ctrl_hole1[1]; // Reserved for future UL modules API d_vad_noise_ene_ndb[2]; //NAVC API address-0x1546-MSB, 0x1547-LSB-> 2-WORDs API d_navc_ctrl_status; // NAVC control API d_iir_dl_ctrl; // 0x1549 API d_lim_dl_ctrl; API d_drc_dl_ctrl; API d_agc_dl_ctrl; API d_audio_apps_ctrl; // Reserved for future DL modules API d_audio_apps_status; API d_aqi_status; #if (L1_IIR == 1) API d_iir_input_scaling; // 0x1550 API d_iir_fir_scaling; // API d_iir_input_gain_scaling; // API d_iir_output_gain_scaling; // API d_iir_output_gain; // API d_iir_feedback; // API d_iir_nb_iir_blocks; // API d_iir_nb_fir_coefs; // API a_iir_iir_coefs[80]; // 0x1558 API a_iir_fir_coefs[32]; // 0x15A8 #if (L1_ANR == 1) API d_anr_min_gain; API d_anr_vad_thr; API d_anr_gamma_slow; API d_anr_gamma_fast; API d_anr_gamma_gain_slow; API d_anr_gamma_gain_fast; API d_anr_thr2; API d_anr_thr4; API d_anr_thr5; API d_anr_mean_ratio_thr1; API d_anr_mean_ratio_thr2; API d_anr_mean_ratio_thr3; API d_anr_mean_ratio_thr4; API d_anr_div_factor_shift; API d_anr_ns_level; #else API d_anr_hole[15]; #endif #elif (L1_IIR == 2) //Srart address= 0x1550. API d_iir4x_control; API d_iir4x_frame_size; API d_iir4x_fir_swap; API d_iir4x_fir_enable; API d_iir4x_fir_length; API_SIGNED d_iir4x_fir_shift; API_SIGNED a_iir4x_fir_taps[40]; API d_iir4x_sos_enable; API d_iir4x_sos_number; API_SIGNED d_iir4x_sos_fact_1; API_SIGNED d_iir4x_sos_fact_form_1; API_SIGNED a_iir4x_sos_den_1[2]; API_SIGNED a_iir4x_sos_num_1[3]; API_SIGNED d_iir4x_sos_num_form_1; API_SIGNED d_iir4x_sos_fact_2; API_SIGNED d_iir4x_sos_fact_form_2; API_SIGNED a_iir4x_sos_den_2[2]; API_SIGNED a_iir4x_sos_num_2[3]; API_SIGNED d_iir4x_sos_num_form_2; API_SIGNED d_iir4x_sos_fact_3; API_SIGNED d_iir4x_sos_fact_form_3; API_SIGNED a_iir4x_sos_den_3[2]; API_SIGNED a_iir4x_sos_num_3[3]; API_SIGNED d_iir4x_sos_num_form_3; API_SIGNED d_iir4x_sos_fact_4; API_SIGNED d_iir4x_sos_fact_form_4; API_SIGNED a_iir4x_sos_den_4[2]; API_SIGNED a_iir4x_sos_num_4[3]; API_SIGNED d_iir4x_sos_num_form_4; API_SIGNED d_iir4x_sos_fact_5; API_SIGNED d_iir4x_sos_fact_form_5; API_SIGNED a_iir4x_sos_den_5[2]; API_SIGNED a_iir4x_sos_num_5[3]; API_SIGNED d_iir4x_sos_num_form_5; API_SIGNED d_iir4x_sos_fact_6; API_SIGNED d_iir4x_sos_fact_form_6; API_SIGNED a_iir4x_sos_den_6[2]; API_SIGNED a_iir4x_sos_num_6[3]; API_SIGNED d_iir4x_sos_num_form_6; API_SIGNED d_iir4x_gain; //End address= 0x15B0 #if (L1_AGC_UL == 1) //Start address= 0x15B1 // AGC uplink API d_agc_ul_control; API d_agc_ul_frame_size; API_SIGNED d_agc_ul_targeted_level; API_SIGNED d_agc_ul_signal_up; API_SIGNED d_agc_ul_signal_down; API_SIGNED d_agc_ul_max_scale; API_SIGNED d_agc_ul_gain_smooth_alpha; API_SIGNED d_agc_ul_gain_smooth_alpha_fast; API_SIGNED d_agc_ul_gain_smooth_beta; API_SIGNED d_agc_ul_gain_smooth_beta_fast; API_SIGNED d_agc_ul_gain_intp_flag; #else API d_agc_ul_holes[11]; #endif //End address= 0x15BB #if (L1_AGC_DL == 1) // AGC downlink API d_agc_dl_control; //Start Address= 0x15BC API d_agc_dl_frame_size; API_SIGNED d_agc_dl_targeted_level; API_SIGNED d_agc_dl_signal_up; API_SIGNED d_agc_dl_signal_down; API_SIGNED d_agc_dl_max_scale; API_SIGNED d_agc_dl_gain_smooth_alpha; API_SIGNED d_agc_dl_gain_smooth_alpha_fast; API_SIGNED d_agc_dl_gain_smooth_beta; API_SIGNED d_agc_dl_gain_smooth_beta_fast; API_SIGNED d_agc_dl_gain_intp_flag; #else API d_agc_dl_holes[11]; #endif //End address= 0x15C6 #if(L1_AEC == 2) API d_aec_mode; //Start address= 0x15C7 API d_mu; API d_cont_filter; API d_scale_input_ul; API d_scale_input_dl; API d_div_dmax; API d_div_swap_good; API d_div_swap_bad; API d_block_init; API d_fact_vad; API d_fact_asd_fil; API d_fact_asd_mut; API d_thrs_abs; API d_es_level_max; API d_granularity_att; API d_coef_smooth; //End address= 0x15D6 #else #if (L1_ANR == 1) API d_iir_holes[1]; API d_anr_min_gain; API d_anr_vad_thr; API d_anr_gamma_slow; API d_anr_gamma_fast; API d_anr_gamma_gain_slow; API d_anr_gamma_gain_fast; API d_anr_thr2; API d_anr_thr4; API d_anr_thr5; API d_anr_mean_ratio_thr1; API d_anr_mean_ratio_thr2; API d_anr_mean_ratio_thr3; API d_anr_mean_ratio_thr4; API d_anr_div_factor_shift; API d_anr_ns_level; #else API d_iir_anr_hole[16]; #endif #endif #else API d_iir_holes_1[97]; #if (L1_AGC_UL == 1) // AGC uplink API d_agc_ul_control; API d_agc_ul_frame_size; API_SIGNED d_agc_ul_targeted_level; API_SIGNED d_agc_ul_signal_up; API_SIGNED d_agc_ul_signal_down; API_SIGNED d_agc_ul_max_scale; API_SIGNED d_agc_ul_gain_smooth_alpha; API_SIGNED d_agc_ul_gain_smooth_alpha_fast; API_SIGNED d_agc_ul_gain_smooth_beta; API_SIGNED d_agc_ul_gain_smooth_beta_fast; API_SIGNED d_agc_ul_gain_intp_flag; #else API d_agc_ul_holes[11]; #endif #if (L1_AGC_DL == 1) // AGC downlink API d_agc_dl_control; API d_agc_dl_frame_size; API_SIGNED d_agc_dl_targeted_level; API_SIGNED d_agc_dl_signal_up; API_SIGNED d_agc_dl_signal_down; API_SIGNED d_agc_dl_max_scale; API_SIGNED d_agc_dl_gain_smooth_alpha; API_SIGNED d_agc_dl_gain_smooth_alpha_fast; API_SIGNED d_agc_dl_gain_smooth_beta; API_SIGNED d_agc_dl_gain_smooth_beta_fast; API_SIGNED d_agc_dl_gain_intp_flag; #else API d_agc_dl_holes[11]; #endif #if(L1_AEC == 2) API d_aec_mode; API d_mu; API d_cont_filter; API d_scale_input_ul; API d_scale_input_dl; API d_div_dmax; API d_div_swap_good; API d_div_swap_bad; API d_block_init; API d_fact_vad; API d_fact_asd_fil; API d_fact_asd_mut; API d_thrs_abs; API d_es_level_max; API d_granularity_att; API d_coef_smooth; #else #if(L1_ANR == 1) API d_iir_holes[1]; API d_anr_min_gain; API d_anr_vad_thr; API d_anr_gamma_slow; API d_anr_gamma_fast; API d_anr_gamma_gain_slow; API d_anr_gamma_gain_fast; API d_anr_thr2; API d_anr_thr4; API d_anr_thr5; API d_anr_mean_ratio_thr1; API d_anr_mean_ratio_thr2; API d_anr_mean_ratio_thr3; API d_anr_mean_ratio_thr4; API d_anr_div_factor_shift; API d_anr_ns_level; #else API d_iir_anr_hole[16]; #endif #endif #endif //L1_IIR #if (L1_LIMITER == 1) API a_lim_mul_low[2]; // 0x15D7 API a_lim_mul_high[2]; API d_lim_gain_fall_q15; // 0x15DB API d_lim_gain_rise_q15; // API d_lim_block_size; // 0x15DD API d_lim_nb_fir_coefs; // API d_lim_slope_update_period; API a_lim_filter_coefs[16]; // 0x15E0 #else API d_lim_hole[25]; #endif #if (L1_ES == 1) API d_es_mode; // 0x15F0 API d_es_gain_dl; API d_es_gain_ul_1; API d_es_gain_ul_2; API d_es_tcl_fe_ls_thr; API d_es_tcl_dt_ls_thr; API d_es_tcl_fe_ns_thr; API d_es_tcl_dt_ns_thr; API d_es_tcl_ne_thr; API d_es_ref_ls_pwr; API d_es_switching_time; API d_es_switching_time_dt; API d_es_hang_time; API a_es_gain_lin_dl_vect[4]; API a_es_gain_lin_ul_vect[4]; #else API d_es_hole[21]; #endif #if (L1_ANR == 2) API_SIGNED d_anr_ns_level; // start address= 0x1605 API_SIGNED d_anr_control; API_SIGNED d_anr_tone_ene_th; API_SIGNED d_anr_tone_cnt_th; #else API d_anr_hole_2[4]; #endif //End address= 0x1608 #if (L1_WCM == 1) // start address= 0x1609 API_SIGNED d_wcm_mode; API_SIGNED d_wcm_frame_size; API_SIGNED d_wcm_num_sub_frames; API_SIGNED d_wcm_ratio; API_SIGNED d_wcm_threshold; API_SIGNED a_wcm_gain[16]; #else API_SIGNED d_wcm_holes[21]; #endif API a_tty_holes1[24]; // 0x161E #if (L1_GTT == 1) API d_tty_status; // 0x1636 API d_ctm_detect_shift; // 0x1637 API d_tty2x_baudot_mod_amplitude_scale; API d_tty2x_samples_per_baudot_stop_bit; API d_tty_reset_buffer_ul; API d_tty_loop_ctrl; API p_tty_loop_buffer; API d_ctm_mod_norm; API d_tty2x_offset_normalization; API d_tty2x_threshold_startbit; API d_tty2x_threshold_diff; // 0x1640 API d_tty2x_duration_startdetect; // 0x1641 API d_tty2x_startbit_thres; // 0x1642 API d_tty2x_hole_init_mute_frame_count; // 0x1643 API d_tty2x_dl_bypass_mute; // 0x1644 #else API a_tty_holes2[15]; #endif API a_tty_fifo_holes[131]; // 0x1645 // New DRP Releated Variables Start Here API a_drp_holes_1[6]; // 0x16C8 API d_drp_apcctrl2_hole; // 0x16CE - APC control register 2 API d_drp_afc_add_api; // 0x16CF - Address where AFC value needs to be written API a_drp_holes_2[12]; // 0x16D0 API a_drp_ramp[20]; // 0x16DC - Power ramp up/down in DRP registers format API a_drp_holes_3[271]; // 0x16F0 API d_dsp_write_debug_pointer; // 0x17FF #if (MELODY_E2) API a_dsp_trace[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_DSP_TRACE]; // 0x1800 API a_melody_e2_instrument_wave[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_INSTRUMENT]; API a_dsp_after_trace_holes[7440-(SC_AUDIO_MELODY_E2_MAX_SIZE_OF_DSP_TRACE + SC_AUDIO_MELODY_E2_MAX_SIZE_OF_INSTRUMENT)]; #else API a_dsp_trace[C_DEBUG_BUFFER_SIZE]; // 0x1800; API a_dsp_after_trace_holes[7440-C_DEBUG_BUFFER_SIZE]; // 0x1800 + C_DEBUG_BUFFER_SIZE // In this region MP3 variables are placed + holes #endif #if (L1_PCM_EXTRACTION) API a_pcm_api_download[160]; API a_pcm_api_upload[160]; API a_pcm_holes1[8]; API d_pcm_api_upload; API d_pcm_api_download; API d_pcm_api_error; API a_pcm_holes2[1181]; #else API a_pcm_holes[1512]; #endif #if REL99 #if FF_EMR API a_mean_cv_bep_page_0[3];//0x3AF8 API a_mean_cv_bep_padding_0; API a_mean_cv_bep_page_1[3]; API a_mean_cv_bep_padding_1; API a_emr_holes2[378]; #endif #else // L1_R99 API a_emr_holes1[386]; #endif // L1_R99 // SAIC related API a_swh_hole[16]; // 0x3C7A API d_swh_flag_ndb; // 0x3C8A - SWH (whitening) on / off flag API d_swh_Clipping_Threshold_ndb; // 0x3C8B - Threshold to which the DSP shall clip the SNR // A5/3 related API a_a5_kc[8]; // 0x3C8C // DCO related API d_dco_samples_per_symbol; // 0x3C94 No. of samples per symbol (IQ pair) API d_dco_fcw; // 0x3C95 Control word to tell the IF Frequency API a_dco_hole[15]; // 0x3C96 Hole related to DCO // A5/3 related // API a_a5_holes[801]; // 0x3CA5 #if ((FF_REPEATED_SACCH == 1) || (FF_REPEATED_DL_FACCH == 1 )) API a_a5_holes[286]; // 0x3CA5 API d_chase_comb_ctrl; // 0x3DC3 Control for the chase combine feature API a_a5_holes1[514]; // 0x3DC4 #else // A5/3 related API a_a5_holes[801]; // 0x3CA5 #endif /* (FF_REPEATED_SACCH == 1) */ } T_NDB_MCU_DSP; #elif (DSP == 34) || (DSP == 35) || (DSP == 36) || (DSP == 37) // NDB GSM typedef struct { // MISC Tasks API d_dsp_page; // DSP status returned (DSP --> MCU). API d_error_status; // RIF control (MCU -> DSP). API d_spcx_rif; API d_tch_mode; // TCH mode register. // bit [0..1] -> b_dai_mode. // bit [2] -> b_dtx. API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega API d_dsp_test; // Words dedicated to Software version (DSP code + Patch) API d_version_number1; API d_version_number2; API d_debug_ptr; API d_debug_bk; API d_pll_config; // GSM/GPRS DSP Debug trace support API p_debug_buffer; API d_debug_buffer_size; API d_debug_trace_type; #if (W_A_DSP_IDLE3 == 1) // DSP report its state: 0 run, 1 Idle1, 2 Idle2, 3 Idle3. API d_dsp_state; // 5 words are reserved for any possible mapping modification API d_hole1_ndb[2]; #else // 6 words are reserved for any possible mapping modification API d_hole1_ndb[3]; #endif #if (AMR == 1) API p_debug_amr; #else API d_hole_debug_amr; #endif #if ((CHIPSET == 12) || (CHIPSET == 4) || ((CHIPSET == 10) && (OP_WCP == 1))) // Calypso+ or Perseus2 #if (DSP == 35) || (DSP == 36) || (DSP == 37) API d_hole2_ndb[1]; API d_mcsi_select; #else API d_hole2_ndb[2]; #endif #else API d_hole2_ndb[2]; #endif // New words APCDEL1 and APCDEL2 for 2TX: TX/PRACH combinations API d_apcdel1_bis; API d_apcdel2_bis; // New registers due to IOTA analog base band API d_apcdel2; API d_vbctrl2; API d_bulgcal; // Analog Based Band API d_afcctladd; API d_vbuctrl; API d_vbdctrl; API d_apcdel1; API d_apcoff; API d_bulioff; API d_bulqoff; API d_dai_onoff; API d_auxdac; #if (ANALOG == 1) API d_vbctrl; #elif ((ANALOG == 2) || (ANALOG == 3)) API d_vbctrl1; #endif API d_bbctrl; // Monitoring tasks control (MCU <- DSP) // FB task API d_fb_det; // FB detection result. (1 for FOUND). API d_fb_mode; // Mode for FB detection algorithm. API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR). // SB Task API a_sch26[5]; // Header + SB information, array of 5 words. API d_audio_gain_ul; API d_audio_gain_dl; // Controller of the melody E2 audio compressor API d_audio_compressor_ctrl; // AUDIO module API d_audio_init; API d_audio_status; // Audio tasks // TONES (MCU -> DSP) API d_toneskb_init; API d_toneskb_status; API d_k_x1_t0; API d_k_x1_t1; API d_k_x1_t2; API d_pe_rep; API d_pe_off; API d_se_off; API d_bu_off; API d_t0_on; API d_t0_off; API d_t1_on; API d_t1_off; API d_t2_on; API d_t2_off; API d_k_x1_kt0; API d_k_x1_kt1; API d_dur_kb; API d_shiftdl; API d_shiftul; API d_aec_ctrl; API d_es_level_api; API d_mu_api; // Melody Ringer module API d_melo_osc_used; API d_melo_osc_active; API a_melo_note0[4]; API a_melo_note1[4]; API a_melo_note2[4]; API a_melo_note3[4]; API a_melo_note4[4]; API a_melo_note5[4]; API a_melo_note6[4]; API a_melo_note7[4]; // selection of the melody format API d_melody_selection; // Holes due to the format melody E1 API a_melo_holes[3]; // Speech Recognition module API d_sr_status; // status of the DSP speech reco task API d_sr_param; // paramters for the DSP speech reco task: OOV threshold. API d_sr_bit_exact_test; // bit exact test API d_sr_nb_words; // number of words used in the speech recognition task API d_sr_db_level; // estimate voice level in dB API d_sr_db_noise; // estimate noise in dB API d_sr_mod_size; // size of the model API a_n_best_words[4]; // array of the 4 best words API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length) // Audio buffer API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1. API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1. // V42bis module API d_v42b_nego0; API d_v42b_nego1; API d_v42b_control; API d_v42b_ratio_ind; API d_mcu_control; API d_mcu_control_sema; // Background tasks API d_background_enable; API d_background_abort; API d_background_state; API d_max_background; API a_background_tasks[16]; API a_back_task_io[16]; // GEA module defined in l1p_deft.h (the following section is overlaid with GPRS NDB memory) API d_gea_mode_ovly; API a_gea_kc_ovly[4]; #if (ANALOG == 3) // SYREN specific registers API d_vbpop; API d_vau_delay_init; API d_vaud_cfg; API d_vauo_onoff; API d_vaus_vol; API d_vaud_pll; API d_togbr2; #elif ((ANALOG == 1) || (ANALOG == 2)) API d_hole3_ndb[7]; #endif // word used for the init of USF threshold API d_thr_usf_detect; // Encryption module API d_a5mode; // Encryption Mode. API d_sched_mode_gprs_ovly; // 7 words are reserved for any possible mapping modification API d_hole4_ndb[5]; // Ramp definition for Omega device API a_ramp[16]; // CCCH/SACCH downlink information...(!!) API a_cd[15]; // Header + CCCH/SACCH downlink information. // FACCH downlink information........(!!) API a_fd[15]; // Header + FACCH downlink information. // Traffic downlink data frames......(!!) API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0. // CCCH/SACCH uplink information.....(!!) API a_cu[15]; // Header + CCCH/SACCH uplink information. // FACCH downlink information........(!!) API a_fu[15]; // Header + FACCH uplink information // Traffic downlink data frames......(!!) API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0. // Random access.....................(MCU -> DSP). API d_rach; // RACH information. //...................................(MCU -> DSP). API a_kc[4]; // Encryption Key Code. // Integrated Data Services module API d_ra_conf; API d_ra_act; API d_ra_test; API d_ra_statu; API d_ra_statd; API d_fax; API a_data_buf_ul[21]; API a_data_buf_dl[37]; // GTT API mapping for DSP code 34 (for test only) #if (L1_GTT == 1) API d_tty_status; API d_ctm_detect_shift; API d_tty2x_baudot_mod_amplitude_scale; API d_tty2x_samples_per_baudot_stop_bit; API d_tty_reset_buffer_ul; API d_tty_loop_ctrl; API p_tty_loop_buffer; API d_ctm_mod_norm; API d_tty2x_offset_normalization; API d_tty2x_threshold_startbit; API d_tty2x_threshold_diff; API d_tty2x_duration_startdetect; API d_tty2x_startbit_thres; #else API a_tty_holes[13]; #endif API a_sr_holes0[409]; #if (L1_NEW_AEC) // new AEC API d_cont_filter; API d_granularity_att; API d_coef_smooth; API d_es_level_max; API d_fact_vad; API d_thrs_abs; API d_fact_asd_fil; API d_fact_asd_mut; API d_far_end_pow_h; API d_far_end_pow_l; API d_far_end_noise_h; API d_far_end_noise_l; #else API a_new_aec_holes[12]; #endif // L1_NEW_AEC // Speech recognition model API a_sr_holes1[145]; // Correction of PR G23M/L1_MCU-SPR-15494 #if ((CHIPSET == 12) || (CHIPSET == 4) || (CODE_VERSION == SIMULATION)) API d_cport_init; API d_cport_ctrl; API a_cport_cfr[2]; API d_cport_tcl_tadt; API d_cport_tdat; API d_cport_tvs; API d_cport_status; API d_cport_reg_value; API a_cport_holes[1011]; #else // CHIPSET != 12 API a_cport_holes[1020]; #endif // CHIPSET == 12 API a_model[1041]; // EOTD buffer #if (L1_EOTD==1) API d_eotd_first; API d_eotd_max; API d_eotd_nrj_high; API d_eotd_nrj_low; API a_eotd_crosscor[18]; #else API a_eotd_holes[22]; #endif // AMR ver 1.0 buffers API a_amr_config[4]; API a_ratscch_ul[6]; API a_ratscch_dl[6]; API d_amr_snr_est; // estimation of the SNR of the AMR speech block #if (L1_VOICE_MEMO_AMR) API d_amms_ul_voc; #else API a_voice_memo_amr_holes[1]; #endif API d_thr_onset_afs; // thresh detection ONSET AFS API d_thr_sid_first_afs; // thresh detection SID_FIRST AFS API d_thr_ratscch_afs; // thresh detection RATSCCH AFS API d_thr_update_afs; // thresh detection SID_UPDATE AFS API d_thr_onset_ahs; // thresh detection ONSET AHS API d_thr_sid_ahs; // thresh detection SID frames AHS API d_thr_ratscch_marker; // thresh detection RATSCCH MARKER API d_thr_sp_dgr; // thresh detection SPEECH DEGRADED/NO_DATA API d_thr_soft_bits; #if ((CODE_VERSION == SIMULATION) || (DSP != 37)) #if (MELODY_E2) API d_melody_e2_osc_stop; API d_melody_e2_osc_active; API d_melody_e2_semaphore; API a_melody_e2_osc[16][3]; API d_melody_e2_globaltimefactor; API a_melody_e2_instrument_ptr[8]; API d_melody_e2_deltatime; #else API d_melody_e2_holes[61]; #endif #else // (DSP == 37) API a_amrschd_debug[30]; // 0x1500 #if (W_A_AMR_THRESHOLDS) API a_d_macc_thr_afs[8]; // 0x151E API a_d_macc_thr_ahs[6]; // 0x1526 #else API a_d_macc_thr_holes[14]; // 0x151E #endif API d_melody_e2_holes[17]; //0x152C - This is not a melody E2 hole; But named like that; #endif #if ((CHIPSET == 12) || (CHIPSET == 4) || ((CHIPSET == 10) && (OP_WCP == 1)) || (CODE_VERSION == SIMULATION)) // Calypso+ or Perseus2 or Samson API d_vol_ul_level; API d_vol_dl_level; API d_vol_speed; API d_sidetone_level; // Audio control area API d_es_ctrl; API d_anr_ul_ctrl; #if ((DSP == 36) || (DSP == 37)) API d_aqi_ctrl_hole1_1[3]; #if (L1_SAIC != 0) API d_swh_flag_ndb; API d_swh_Clipping_Threshold_ndb; #else API d_swh_hole[2]; #endif API d_aqi_ctrl_hole1_2[1]; #else API d_aqi_ctrl_hole1[6]; // Reserved for future UL modules #endif API d_iir_dl_ctrl; API d_lim_dl_ctrl; API d_aqi_ctrl_hole2[4]; // Reserved for future DL modules API d_aqi_status; #if (L1_IIR == 1) API d_iir_input_scaling; API d_iir_fir_scaling; API d_iir_input_gain_scaling; API d_iir_output_gain_scaling; API d_iir_output_gain; API d_iir_feedback; API d_iir_nb_iir_blocks; API d_iir_nb_fir_coefs; API a_iir_iir_coefs[80]; API a_iir_fir_coefs[32]; #else API d_iir_hole[120]; #endif #if (L1_ANR == 1) API d_anr_min_gain; API d_anr_vad_thr; API d_anr_gamma_slow; API d_anr_gamma_fast; API d_anr_gamma_gain_slow; API d_anr_gamma_gain_fast; API d_anr_thr2; API d_anr_thr4; API d_anr_thr5; API d_anr_mean_ratio_thr1; API d_anr_mean_ratio_thr2; API d_anr_mean_ratio_thr3; API d_anr_mean_ratio_thr4; API d_anr_div_factor_shift; API d_anr_ns_level; #else API d_anr_hole[15]; #endif #if (L1_LIMITER == 1) API a_lim_mul_low[2]; API a_lim_mul_high[2]; API d_lim_gain_fall_q15; API d_lim_gain_rise_q15; API d_lim_block_size; API d_lim_nb_fir_coefs; API d_lim_slope_update_period; API a_lim_filter_coefs[16]; #else API d_lim_hole[25]; #endif #if (L1_ES == 1) API d_es_mode; API d_es_gain_dl; API d_es_gain_ul_1; API d_es_gain_ul_2; API d_es_tcl_fe_ls_thr; API d_es_tcl_dt_ls_thr; API d_es_tcl_fe_ns_thr; API d_es_tcl_dt_ns_thr; API d_es_tcl_ne_thr; API d_es_ref_ls_pwr; API d_es_switching_time; API d_es_switching_time_dt; API d_es_hang_time; API a_es_gain_lin_dl_vect[4]; API a_es_gain_lin_ul_vect[4]; #else API d_es_hole[21]; #endif #else // CALYPSO+ or PERSEUS2 API a_calplus_holes[200]; #endif #if (W_A_AMR_THRESHOLDS) API d_holes[492]; #if (CODE_VERSION == SIMULATION) || (DSP != 37) API a_d_macc_thr_afs[8]; // In ROM37 this is moved from 0x17F1 to 0x151E API a_d_macc_thr_ahs[6]; #else API d_holes_rom37[14]; // In ROM37 this is moved from 0x17F1 to 0x151E #endif API d_one_hole[1]; #else API d_holes[507]; #endif #if (MELODY_E2) API a_dsp_trace[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_DSP_TRACE]; API a_melody_e2_instrument_wave[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_INSTRUMENT]; #endif } T_NDB_MCU_DSP; #elif (DSP == 33) // NDB GSM typedef struct { // MISC Tasks API d_dsp_page; // DSP status returned (DSP --> MCU). API d_error_status; // RIF control (MCU -> DSP). API d_spcx_rif; API d_tch_mode; // TCH mode register. // bit [0..1] -> b_dai_mode. // bit [2] -> b_dtx. API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega API d_dsp_test; // Words dedicated to Software version (DSP code + Patch) API d_version_number1; API d_version_number2; API d_debug_ptr; API d_debug_bk; API d_pll_config; // GSM/GPRS DSP Debug trace support API p_debug_buffer; API d_debug_buffer_size; API d_debug_trace_type; #if (W_A_DSP_IDLE3 == 1) // DSP report its state: 0 run, 1 Idle1, 2 Idle2, 3 Idle3. API d_dsp_state; // 10 words are reserved for any possible mapping modification API d_hole1_ndb[5]; #else // 11 words are reserved for any possible mapping modification API d_hole1_ndb[6]; #endif // New words APCDEL1 and APCDEL2 for 2TX: TX/PRACH combinations API d_apcdel1_bis; API d_apcdel2_bis; // New registers due to IOTA analog base band API d_apcdel2; API d_vbctrl2; API d_bulgcal; // Analog Based Band API d_afcctladd; API d_vbuctrl; API d_vbdctrl; API d_apcdel1; API d_apcoff; API d_bulioff; API d_bulqoff; API d_dai_onoff; API d_auxdac; #if (ANALOG == 1) API d_vbctrl; #elif ((ANALOG == 2) || (ANALOG == 3)) API d_vbctrl1; #endif API d_bbctrl; // Monitoring tasks control (MCU <- DSP) // FB task API d_fb_det; // FB detection result. (1 for FOUND). API d_fb_mode; // Mode for FB detection algorithm. API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR). // SB Task API a_sch26[5]; // Header + SB information, array of 5 words. API d_audio_gain_ul; API d_audio_gain_dl; // Controller of the melody E2 audio compressor API d_audio_compressor_ctrl; // AUDIO module API d_audio_init; API d_audio_status; // Audio tasks // TONES (MCU -> DSP) API d_toneskb_init; API d_toneskb_status; API d_k_x1_t0; API d_k_x1_t1; API d_k_x1_t2; API d_pe_rep; API d_pe_off; API d_se_off; API d_bu_off; API d_t0_on; API d_t0_off; API d_t1_on; API d_t1_off; API d_t2_on; API d_t2_off; API d_k_x1_kt0; API d_k_x1_kt1; API d_dur_kb; API d_shiftdl; API d_shiftul; API d_aec_ctrl; API d_es_level_api; API d_mu_api; // Melody Ringer module API d_melo_osc_used; API d_melo_osc_active; API a_melo_note0[4]; API a_melo_note1[4]; API a_melo_note2[4]; API a_melo_note3[4]; API a_melo_note4[4]; API a_melo_note5[4]; API a_melo_note6[4]; API a_melo_note7[4]; // selection of the melody format API d_melody_selection; // Holes due to the format melody E1 API a_melo_holes[3]; // Speech Recognition module API d_sr_status; // status of the DSP speech reco task API d_sr_param; // paramters for the DSP speech reco task: OOV threshold. API d_sr_bit_exact_test; // bit exact test API d_sr_nb_words; // number of words used in the speech recognition task API d_sr_db_level; // estimate voice level in dB API d_sr_db_noise; // estimate noise in dB API d_sr_mod_size; // size of the model API a_n_best_words[4]; // array of the 4 best words API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length) // Audio buffer API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1. API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1. // V42bis module API d_v42b_nego0; API d_v42b_nego1; API d_v42b_control; API d_v42b_ratio_ind; API d_mcu_control; API d_mcu_control_sema; // Background tasks API d_background_enable; API d_background_abort; API d_background_state; API d_max_background; API a_background_tasks[16]; API a_back_task_io[16]; // GEA module defined in l1p_deft.h (the following section is overlaid with GPRS NDB memory) API d_gea_mode_ovly; API a_gea_kc_ovly[4]; API d_hole3_ndb[8]; // Encryption module API d_a5mode; // Encryption Mode. API d_sched_mode_gprs_ovly; // 7 words are reserved for any possible mapping modification API d_hole4_ndb[5]; // Ramp definition for Omega device API a_ramp[16]; // CCCH/SACCH downlink information...(!!) API a_cd[15]; // Header + CCCH/SACCH downlink information. // FACCH downlink information........(!!) API a_fd[15]; // Header + FACCH downlink information. // Traffic downlink data frames......(!!) API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0. // CCCH/SACCH uplink information.....(!!) API a_cu[15]; // Header + CCCH/SACCH uplink information. // FACCH downlink information........(!!) API a_fu[15]; // Header + FACCH uplink information // Traffic downlink data frames......(!!) API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0. // Random access.....................(MCU -> DSP). API d_rach; // RACH information. //...................................(MCU -> DSP). API a_kc[4]; // Encryption Key Code. // Integrated Data Services module API d_ra_conf; API d_ra_act; API d_ra_test; API d_ra_statu; API d_ra_statd; API d_fax; API a_data_buf_ul[21]; API a_data_buf_dl[37]; #if (L1_NEW_AEC) // new AEC API a_new_aec_holes[422]; API d_cont_filter; API d_granularity_att; API d_coef_smooth; API d_es_level_max; API d_fact_vad; API d_thrs_abs; API d_fact_asd_fil; API d_fact_asd_mut; API d_far_end_pow_h; API d_far_end_pow_l; API d_far_end_noise_h; API d_far_end_noise_l; #endif // Speech recognition model #if (L1_NEW_AEC) API a_sr_holes[1165]; #else API a_sr_holes[1599]; #endif // L1_NEW_AEC API a_model[1041]; // EOTD buffer #if (L1_EOTD==1) API d_eotd_first; API d_eotd_max; API d_eotd_nrj_high; API d_eotd_nrj_low; API a_eotd_crosscor[18]; #else API a_eotd_holes[22]; #endif #if (MELODY_E2) API a_melody_e2_holes0[27]; API d_melody_e2_osc_used; API d_melody_e2_osc_active; API d_melody_e2_semaphore; API a_melody_e2_osc[16][3]; API d_melody_e2_globaltimefactor; API a_melody_e2_instrument_ptr[8]; API a_melody_e2_holes1[708]; API a_dsp_trace[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_DSP_TRACE]; API a_melody_e2_instrument_wave[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_INSTRUMENT]; #endif } T_NDB_MCU_DSP; #elif ((DSP == 32) || (DSP == 31)) typedef struct { // Monitoring tasks control..........(MCU <- DSP) API d_fb_det; // FB detection result. (1 for FOUND). API d_fb_mode; // Mode for FB detection algorithm. API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR). // CCCH/SACCH downlink information...(!!) API a_cd[15]; // Header + CCCH/SACCH downlink information. // FACCH downlink information........(!!) API a_fd[15]; // Header + FACCH downlink information. // Traffic downlink data frames......(!!) API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0. API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1. // CCCH/SACCH uplink information.....(!!) API a_cu[15]; // Header + CCCH/SACCH uplink information. #if (SPEECH_RECO) // FACCH downlink information........(!!) API a_fu[3]; // Header + FACCH uplink information // The size of this buffer is 15 word but some speech reco words // are overlayer with this buffer. This is the reason why the size is 3 instead of 15. API d_sr_status; // status of the DSP speech reco task API d_sr_param; // paramters for the DSP speech reco task: OOV threshold. API sr_hole1; // hole API d_sr_bit_exact_test; // bit exact test API d_sr_nb_words; // number of words used in the speech recognition task API d_sr_db_level; // estimate voice level in dB API d_sr_db_noise; // estimate noise in dB API d_sr_mod_size; // size of the model API sr_holes_1[4]; // hole #else // FACCH downlink information........(!!) API a_fu[15]; // Header + FACCH uplink information #endif // Traffic uplink data frames........(!!) API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0. API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1. // Random access.....................(MCU -> DSP). API d_rach; // RACH information. //...................................(MCU -> DSP). API d_a5mode; // Encryption Mode. API a_kc[4]; // Encryption Key Code. API d_tch_mode; // TCH mode register. // bit [0..1] -> b_dai_mode. // bit [2] -> b_dtx. // OMEGA...........................(MCU -> DSP). #if ((ANALOG == 1) || (ANALOG == 2)) API a_ramp[16]; #if (MELODY_E1) API d_melo_osc_used; API d_melo_osc_active; API a_melo_note0[4]; API a_melo_note1[4]; API a_melo_note2[4]; API a_melo_note3[4]; API a_melo_note4[4]; API a_melo_note5[4]; API a_melo_note6[4]; API a_melo_note7[4]; #if (DSP==31) // selection of the melody format API d_melody_selection; API holes[9]; #else // DSP==32 API d_dco_type; // Tide API p_start_IQ; API d_level_off; API d_dco_dbg; API d_tide_resa; API d_asynch_margin; // Perseus Asynch Audio Workaround API hole[4]; #endif // DSP 32 #else // NO MELODY E1 #if (DSP==31) // selection of the melody format API d_melody_selection; API holes[43]; // 43 unused holes. #else // DSP==32 API holes[34]; // 34 unused holes. API d_dco_type; // Tide API p_start_IQ; API d_level_off; API d_dco_dbg; API d_tide_resa; API d_asynch_margin; // Perseus Asynch Audio Workaround API hole[4]; #endif //DSP == 32 #endif // NO MELODY E1 API d_debug3; API d_debug2; API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega API d_afcctladd; API d_vbuctrl; API d_vbdctrl; API d_apcdel1; API d_aec_ctrl; API d_apcoff; API d_bulioff; API d_bulqoff; API d_dai_onoff; API d_auxdac; #if (ANALOG == 1) API d_vbctrl; #elif (ANALOG == 2) API d_vbctrl1; #endif API d_bbctrl; #else #error DSPCODE not supported with given ANALOG #endif //(ANALOG)1, 2 //...................................(MCU -> DSP). API a_sch26[5]; // Header + SB information, array of 5 words. // TONES.............................(MCU -> DSP) API d_toneskb_init; API d_toneskb_status; API d_k_x1_t0; API d_k_x1_t1; API d_k_x1_t2; API d_pe_rep; API d_pe_off; API d_se_off; API d_bu_off; API d_t0_on; API d_t0_off; API d_t1_on; API d_t1_off; API d_t2_on; API d_t2_off; API d_k_x1_kt0; API d_k_x1_kt1; API d_dur_kb; // PLL...............................(MCU -> DSP). API d_pll_clkmod1; API d_pll_clkmod2; // DSP status returned..........(DSP --> MCU). API d_error_status; // RIF control.......................(MCU -> DSP). API d_spcx_rif; API d_shiftdl; API d_shiftul; API p_saec_prog; API p_aec_prog; API p_spenh_prog; API a_ovly[75]; API d_ra_conf; API d_ra_act; API d_ra_test; API d_ra_statu; API d_ra_statd; API d_fax; #if (SPEECH_RECO) API a_data_buf_ul[3]; API a_n_best_words[4]; // array of the 4 best words API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length) API sr_holes_2[6]; API a_data_buf_dl[37]; API a_hole[24]; API d_sched_mode_gprs_ovly; API fir_holes1[384]; API a_fir31_uplink[31]; API a_fir31_downlink[31]; API d_audio_init; API d_audio_status; API a_model[1041]; // array of the speech reco model #else API a_data_buf_ul[21]; API a_data_buf_dl[37]; API a_hole[24]; API d_sched_mode_gprs_ovly; API fir_holes1[384]; API a_fir31_uplink[31]; API a_fir31_downlink[31]; API d_audio_init; API d_audio_status; #if (L1_EOTD ==1) API a_eotd_hole[369]; API d_eotd_first; API d_eotd_max; API d_eotd_nrj_high; API d_eotd_nrj_low; API a_eotd_crosscor[18]; #endif #endif } T_NDB_MCU_DSP; #else // OTHER DSP CODE like 17 typedef struct { // Monitoring tasks control..........(MCU <- DSP) API d_fb_det; // FB detection result. (1 for FOUND). API d_fb_mode; // Mode for FB detection algorithm. API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR). // CCCH/SACCH downlink information...(!!) API a_cd[15]; // Header + CCCH/SACCH downlink information. // FACCH downlink information........(!!) API a_fd[15]; // Header + FACCH downlink information. // Traffic downlink data frames......(!!) #if (DATA14_4 == 0) API a_dd_0[20]; // Header + DATA traffic downlink information, sub. chan. 0. API a_dd_1[20]; // Header + DATA traffic downlink information, sub. chan. 1. #endif #if (DATA14_4 == 1) API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0. API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1. #endif // CCCH/SACCH uplink information.....(!!) API a_cu[15]; // Header + CCCH/SACCH uplink information. #if (SPEECH_RECO) // FACCH downlink information........(!!) API a_fu[3]; // Header + FACCH uplink information // The size of this buffer is 15 word but some speech reco words // are overlayer with this buffer. This is the reason why the size is 3 instead of 15. API d_sr_status; // status of the DSP speech reco task API d_sr_param; // paramters for the DSP speech reco task: OOV threshold. API sr_hole1; // hole API d_sr_bit_exact_test; // bit exact test API d_sr_nb_words; // number of words used in the speech recognition task API d_sr_db_level; // estimate voice level in dB API d_sr_db_noise; // estimate noise in dB API d_sr_mod_size; // size of the model API sr_holes_1[4]; // hole #else // FACCH downlink information........(!!) API a_fu[15]; // Header + FACCH uplink information #endif // Traffic uplink data frames........(!!) #if (DATA14_4 == 0) API a_du_0[20]; // Header + DATA traffic uplink information, sub. chan. 0. API a_du_1[20]; // Header + DATA traffic uplink information, sub. chan. 1. #endif #if (DATA14_4 == 1) API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0. API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1. #endif // Random access.....................(MCU -> DSP). API d_rach; // RACH information. //...................................(MCU -> DSP). API d_a5mode; // Encryption Mode. API a_kc[4]; // Encryption Key Code. API d_tch_mode; // TCH mode register. // bit [0..1] -> b_dai_mode. // bit [2] -> b_dtx. // OMEGA...........................(MCU -> DSP). #if ((ANALOG == 1) || (ANALOG == 2)) API a_ramp[16]; #if (MELODY_E1) API d_melo_osc_used; API d_melo_osc_active; API a_melo_note0[4]; API a_melo_note1[4]; API a_melo_note2[4]; API a_melo_note3[4]; API a_melo_note4[4]; API a_melo_note5[4]; API a_melo_note6[4]; API a_melo_note7[4]; #if (DSP == 17) // selection of the melody format API d_dco_type; // Tide API p_start_IQ; API d_level_off; API d_dco_dbg; API d_tide_resa; API d_asynch_margin; // Perseus Asynch Audio Workaround API hole[4]; #else API d_melody_selection; API holes[9]; #endif #else // NO MELODY E1 // selection of the melody format #if (DSP == 17) API holes[34]; // 34 unused holes. API d_dco_type; // Tide API p_start_IQ; API d_level_off; API d_dco_dbg; API d_tide_resa; API d_asynch_margin; // Perseus Asynch Audio Workaround API hole[4] #else // selection of the melody format API d_melody_selection; API holes[43]; // 43 unused holes. #endif #endif API d_debug3; API d_debug2; API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega API d_afcctladd; API d_vbuctrl; API d_vbdctrl; API d_apcdel1; API d_aec_ctrl; API d_apcoff; API d_bulioff; API d_bulqoff; API d_dai_onoff; API d_auxdac; #if (ANALOG == 1) API d_vbctrl; #elif (ANALOG == 2) API d_vbctrl1; #endif API d_bbctrl; #else #error DSPCODE not supported with given ANALOG #endif //(ANALOG)1, 2 //...................................(MCU -> DSP). API a_sch26[5]; // Header + SB information, array of 5 words. // TONES.............................(MCU -> DSP) API d_toneskb_init; API d_toneskb_status; API d_k_x1_t0; API d_k_x1_t1; API d_k_x1_t2; API d_pe_rep; API d_pe_off; API d_se_off; API d_bu_off; API d_t0_on; API d_t0_off; API d_t1_on; API d_t1_off; API d_t2_on; API d_t2_off; API d_k_x1_kt0; API d_k_x1_kt1; API d_dur_kb; // PLL...............................(MCU -> DSP). API d_pll_clkmod1; API d_pll_clkmod2; // DSP status returned..........(DSP --> MCU). API d_error_status; // RIF control.......................(MCU -> DSP). API d_spcx_rif; API d_shiftdl; API d_shiftul; #if (AEC == 1) // AEC control.......................(MCU -> DSP). #if (VOC == FR_EFR) API p_aec_init; API p_aec_prog; API p_spenh_init; API p_spenh_prog; #endif #if (VOC == FR_HR_EFR) API p_saec_prog; API p_aec_prog; API p_spenh_prog; #endif #endif API a_ovly[75]; API d_ra_conf; API d_ra_act; API d_ra_test; API d_ra_statu; API d_ra_statd; API d_fax; #if (SPEECH_RECO) API a_data_buf_ul[3]; API a_n_best_words[4]; // array of the 4 best words API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length) API sr_holes_2[6]; API a_data_buf_dl[37]; API fir_holes1[409]; API a_fir31_uplink[31]; API a_fir31_downlink[31]; API d_audio_init; API d_audio_status; API a_model[1041]; // array of the speech reco model #else API a_data_buf_ul[21]; API a_data_buf_dl[37]; API fir_holes1[409]; API a_fir31_uplink[31]; API a_fir31_downlink[31]; API d_audio_init; API d_audio_status; #endif } T_NDB_MCU_DSP; #endif #if (DSP >= 34) typedef struct { API_SIGNED d_transfer_rate; // 0x0C31 // Common GSM/GPRS // These words specified the latencies to applies on some peripherics API_SIGNED d_lat_mcu_bridge; API_SIGNED d_lat_mcu_hom2sam; API_SIGNED d_lat_mcu_bef_fast_access; API_SIGNED d_lat_dsp_after_sam; // DSP Start address API_SIGNED d_gprs_install_address; API_SIGNED d_misc_config; API_SIGNED d_cn_sw_workaround; API_SIGNED d_hole2_param[4]; // 0x0C39 //...................................Frequency Burst. API_SIGNED d_fb_margin_beg; // 0x0C3D API_SIGNED d_fb_margin_end; API_SIGNED d_nsubb_idle; API_SIGNED d_nsubb_dedic; API_SIGNED d_fb_thr_det_iacq; API_SIGNED d_fb_thr_det_track; //...................................Demodulation. API_SIGNED d_dc_off_thres; API_SIGNED d_dummy_thres; API_SIGNED d_dem_pond_gewl; API_SIGNED d_dem_pond_red; //...................................TCH Full Speech. API_SIGNED d_maccthresh1; API_SIGNED d_mldt; API_SIGNED d_maccthresh; API_SIGNED d_gu; API_SIGNED d_go; API_SIGNED d_attmax; API_SIGNED d_sm; API_SIGNED d_b; // V42Bis module API_SIGNED d_v42b_switch_hyst; API_SIGNED d_v42b_switch_min; API_SIGNED d_v42b_switch_max; API_SIGNED d_v42b_reset_delay; //...................................TCH Half Speech. API_SIGNED d_ldT_hr; // 0x0C53 API_SIGNED d_maccthresh_hr; API_SIGNED d_maccthresh1_hr; API_SIGNED d_gu_hr; API_SIGNED d_go_hr; API_SIGNED d_b_hr; API_SIGNED d_sm_hr; API_SIGNED d_attmax_hr; //...................................TCH Enhanced FR Speech. API_SIGNED c_mldt_efr; API_SIGNED c_maccthresh_efr; API_SIGNED c_maccthresh1_efr; API_SIGNED c_gu_efr; API_SIGNED c_go_efr; API_SIGNED c_b_efr; API_SIGNED c_sm_efr; API_SIGNED c_attmax_efr; //...................................CHED API_SIGNED d_sd_min_thr_tchfs; // 0x0C63 API_SIGNED d_ma_min_thr_tchfs; API_SIGNED d_md_max_thr_tchfs; API_SIGNED d_md1_max_thr_tchfs; API_SIGNED d_sd_min_thr_tchhs; API_SIGNED d_ma_min_thr_tchhs; API_SIGNED d_sd_av_thr_tchhs; API_SIGNED d_md_max_thr_tchhs; API_SIGNED d_md1_max_thr_tchhs; API_SIGNED d_sd_min_thr_tchefs; API_SIGNED d_ma_min_thr_tchefs; API_SIGNED d_md_max_thr_tchefs; API_SIGNED d_md1_max_thr_tchefs; API_SIGNED d_wed_fil_ini; API_SIGNED d_wed_fil_tc; API_SIGNED d_x_min; API_SIGNED d_x_max; API_SIGNED d_slope; API_SIGNED d_y_min; API_SIGNED d_y_max; API_SIGNED d_wed_diff_threshold; API_SIGNED d_mabfi_min_thr_tchhs; // FACCH module API_SIGNED d_facch_thr; // 0x0C79 // IDS module API_SIGNED d_max_ovsp_ul; // API_SIGNED d_sync_thres; API_SIGNED d_idle_thres; API_SIGNED d_m1_thres; API_SIGNED d_max_ovsp_dl; API_SIGNED d_gsm_bgd_mgt; // FIR coefficients API a_fir_holes[4]; API a_fir31_uplink[31]; // 0x0C84 API a_fir31_downlink[31]; } T_PARAM_MCU_DSP; #elif (DSP == 33) typedef struct { API_SIGNED d_transfer_rate; // Common GSM/GPRS // These words specified the latencies to applies on some peripherics API_SIGNED d_lat_mcu_bridge; API_SIGNED d_lat_mcu_hom2sam; API_SIGNED d_lat_mcu_bef_fast_access; API_SIGNED d_lat_dsp_after_sam; // DSP Start address API_SIGNED d_gprs_install_address; API_SIGNED d_misc_config; API_SIGNED d_cn_sw_workaround; #if DCO_ALGO API_SIGNED d_cn_dco_param; API_SIGNED d_hole2_param[3]; #else API_SIGNED d_hole2_param[4]; #endif //...................................Frequency Burst. API_SIGNED d_fb_margin_beg; API_SIGNED d_fb_margin_end; API_SIGNED d_nsubb_idle; API_SIGNED d_nsubb_dedic; API_SIGNED d_fb_thr_det_iacq; API_SIGNED d_fb_thr_det_track; //...................................Demodulation. API_SIGNED d_dc_off_thres; API_SIGNED d_dummy_thres; API_SIGNED d_dem_pond_gewl; API_SIGNED d_dem_pond_red; //...................................TCH Full Speech. API_SIGNED d_maccthresh1; API_SIGNED d_mldt; API_SIGNED d_maccthresh; API_SIGNED d_gu; API_SIGNED d_go; API_SIGNED d_attmax; API_SIGNED d_sm; API_SIGNED d_b; // V42Bis module API_SIGNED d_v42b_switch_hyst; API_SIGNED d_v42b_switch_min; API_SIGNED d_v42b_switch_max; API_SIGNED d_v42b_reset_delay; //...................................TCH Half Speech. API_SIGNED d_ldT_hr; API_SIGNED d_maccthresh_hr; API_SIGNED d_maccthresh1_hr; API_SIGNED d_gu_hr; API_SIGNED d_go_hr; API_SIGNED d_b_hr; API_SIGNED d_sm_hr; API_SIGNED d_attmax_hr; //...................................TCH Enhanced FR Speech. API_SIGNED c_mldt_efr; API_SIGNED c_maccthresh_efr; API_SIGNED c_maccthresh1_efr; API_SIGNED c_gu_efr; API_SIGNED c_go_efr; API_SIGNED c_b_efr; API_SIGNED c_sm_efr; API_SIGNED c_attmax_efr; //...................................CHED API_SIGNED d_sd_min_thr_tchfs; API_SIGNED d_ma_min_thr_tchfs; API_SIGNED d_md_max_thr_tchfs; API_SIGNED d_md1_max_thr_tchfs; API_SIGNED d_sd_min_thr_tchhs; API_SIGNED d_ma_min_thr_tchhs; API_SIGNED d_sd_av_thr_tchhs; API_SIGNED d_md_max_thr_tchhs; API_SIGNED d_md1_max_thr_tchhs; API_SIGNED d_sd_min_thr_tchefs; API_SIGNED d_ma_min_thr_tchefs; API_SIGNED d_md_max_thr_tchefs; API_SIGNED d_md1_max_thr_tchefs; API_SIGNED d_wed_fil_ini; API_SIGNED d_wed_fil_tc; API_SIGNED d_x_min; API_SIGNED d_x_max; API_SIGNED d_slope; API_SIGNED d_y_min; API_SIGNED d_y_max; API_SIGNED d_wed_diff_threshold; API_SIGNED d_mabfi_min_thr_tchhs; // FACCH module API_SIGNED d_facch_thr; // IDS module API_SIGNED d_max_ovsp_ul; API_SIGNED d_sync_thres; API_SIGNED d_idle_thres; API_SIGNED d_m1_thres; API_SIGNED d_max_ovsp_dl; API_SIGNED d_gsm_bgd_mgt; // FIR coefficients API a_fir_holes[4]; API a_fir31_uplink[31]; API a_fir31_downlink[31]; } T_PARAM_MCU_DSP; #else typedef struct { //...................................Frequency Burst. API_SIGNED d_nsubb_idle; API_SIGNED d_nsubb_dedic; API_SIGNED d_fb_thr_det_iacq; API_SIGNED d_fb_thr_det_track; //...................................Demodulation. API_SIGNED d_dc_off_thres; API_SIGNED d_dummy_thres; API_SIGNED d_dem_pond_gewl; API_SIGNED d_dem_pond_red; API_SIGNED hole[1]; API_SIGNED d_transfer_rate; //...................................TCH Full Speech. API_SIGNED d_maccthresh1; API_SIGNED d_mldt; API_SIGNED d_maccthresh; API_SIGNED d_gu; API_SIGNED d_go; API_SIGNED d_attmax; API_SIGNED d_sm; API_SIGNED d_b; #if (VOC == FR_HR) || (VOC == FR_HR_EFR) //...................................TCH Half Speech. API_SIGNED d_ldT_hr; API_SIGNED d_maccthresh_hr; API_SIGNED d_maccthresh1_hr; API_SIGNED d_gu_hr; API_SIGNED d_go_hr; API_SIGNED d_b_hr; API_SIGNED d_sm_hr; API_SIGNED d_attmax_hr; #endif #if (VOC == FR_EFR) || (VOC == FR_HR_EFR) //...................................TCH Enhanced FR Speech. API_SIGNED c_mldt_efr; API_SIGNED c_maccthresh_efr; API_SIGNED c_maccthresh1_efr; API_SIGNED c_gu_efr; API_SIGNED c_go_efr; API_SIGNED c_b_efr; API_SIGNED c_sm_efr; API_SIGNED c_attmax_efr; #endif //...................................TCH Full Speech. API_SIGNED d_sd_min_thr_tchfs; API_SIGNED d_ma_min_thr_tchfs; API_SIGNED d_md_max_thr_tchfs; API_SIGNED d_md1_max_thr_tchfs; #if (VOC == FR) || (VOC == FR_HR) || (VOC == FR_HR_EFR) //...................................TCH Half Speech. API_SIGNED d_sd_min_thr_tchhs; API_SIGNED d_ma_min_thr_tchhs; API_SIGNED d_sd_av_thr_tchhs; API_SIGNED d_md_max_thr_tchhs; API_SIGNED d_md1_max_thr_tchhs; #endif #if (VOC == FR_EFR) || (VOC == FR_HR_EFR) //...................................TCH Enhanced FR Speech. API_SIGNED d_sd_min_thr_tchefs; //(24L *C_POND_RED) API_SIGNED d_ma_min_thr_tchefs; //(1200L *C_POND_RED) API_SIGNED d_md_max_thr_tchefs; //(2000L *C_POND_RED) API_SIGNED d_md1_max_thr_tchefs; //(160L *C_POND_RED) API_SIGNED d_hole1; #endif API_SIGNED d_wed_fil_ini; API_SIGNED d_wed_fil_tc; API_SIGNED d_x_min; API_SIGNED d_x_max; API_SIGNED d_slope; API_SIGNED d_y_min; API_SIGNED d_y_max; API_SIGNED d_wed_diff_threshold; API_SIGNED d_mabfi_min_thr_tchhs; API_SIGNED d_facch_thr; API_SIGNED d_dsp_test; #if (DATA14_4 == 0 ) || (VOC == FR_HR_EFR) API_SIGNED d_patch_addr1; API_SIGNED d_patch_data1; API_SIGNED d_patch_addr2; API_SIGNED d_patch_data2; API_SIGNED d_patch_addr3; API_SIGNED d_patch_data3; API_SIGNED d_patch_addr4; API_SIGNED d_patch_data4; #endif //................................... API_SIGNED d_version_number; // DSP patch version API_SIGNED d_ti_version; // customer number. No more used since 1.5 API_SIGNED d_dsp_page; #if IDS API_SIGNED d_max_ovsp_ul; API_SIGNED d_sync_thres; API_SIGNED d_idle_thres; API_SIGNED d_m1_thres; API_SIGNED d_max_ovsp_dl; #endif } T_PARAM_MCU_DSP; #endif #if (DSP_DEBUG_TRACE_ENABLE == 1) typedef struct { API d_debug_ptr_begin; API d_debug_ptr_end; } T_DB2_DSP_TO_MCU; #endif /*************************************************************/ /* Time informations... */ /*************************************************************/ /* */ /*************************************************************/ typedef struct { UWORD32 fn; // FN count UWORD16 t1; // FN div (26*51), (0..2047). UWORD8 t2; // FN modulo 26. UWORD8 t3; // FN modulo 51. UWORD8 tc; // Scell: TC UWORD8 fn_in_report; // FN modulo 102 or 104. UWORD16 fn_mod42432; // FN modulo 42432. UWORD8 fn_mod13; // FN modulo 13. UWORD8 fn_mod13_mod4; // FN modulo 13 modulo 4. #if L1_GPRS UWORD8 fn_mod52; // FN modulo 52. UWORD8 fn_mod104; // FN modulo 104. UWORD32 block_id; // Block ID #endif } T_TIME_INFO; /*************************************************************/ /* Idle mode tasks information... */ /*************************************************************/ /* must be filled according to Idle parameters... */ /* ... */ /*************************************************************/ typedef struct { UWORD8 pg_position; // Paging block starting frame. UWORD8 extpg_position; // Extended Paging block starting frame. } T_IDLE_TASK_INFO; /*************************************************************/ /* SDCCH information structure. */ /*************************************************************/ /* */ /* */ /*************************************************************/ typedef struct { UWORD8 dl_sdcch_position; UWORD8 dl_sacch_position; UWORD8 ul_sdcch_position; UWORD8 ul_sacch_position; UWORD8 mon_area_position; } T_SDCCH_DESC; /*************************************************************/ /* Random Access Task information structure. */ /*************************************************************/ /* */ /* */ /*************************************************************/ typedef struct { WORD32 rand; // 16 bit signed !! UWORD8 channel_request; UWORD8 ra_to_ctrl; UWORD8 ra_num; } T_RA_TASK_INFO; /***************************************************************************************/ /* Measurement info element for last input level table */ /***************************************************************************************/ typedef struct { UWORD8 lna_off; // 1 if lna switch is off. UWORD8 input_level; // last measured input level in dbm. } T_INPUT_LEVEL; /***************************************************************************************/ /* Measurement info element for Neighbor cell lists. */ /***************************************************************************************/ typedef struct { UWORD16 radio_freq; // carrier id. WORD32 acc; // Accumulation of measurements already performed. UWORD8 nbr_meas; } T_MEAS_INFO; typedef struct { UWORD16 bcch_freq; WORD16 rxlev_acc; UWORD8 rxlev_nbr_meas; } T5_CELL_MEAS; typedef struct { T5_CELL_MEAS A[33]; } T5_NCELL_MEAS; /***************************************************************************************/ /* Measurement info element serving cell in dedicated mode */ /***************************************************************************************/ typedef struct { WORD32 acc_sub; // Subset: accu. rxlev meas. UWORD32 nbr_meas_sub; // Subset: nbr meas. of rxlev. UWORD32 qual_acc_full; // Fullset: accu. rxqual meas. UWORD32 qual_acc_sub; // Subset: accu. rxqual meas. UWORD32 qual_nbr_meas_full; // Fullset: nbr meas. of rxqual. UWORD32 qual_nbr_meas_sub; // Subset: nbr meas. of rxqual. UWORD8 dtx_used; // Set when DTX as been used in current reporting period. } T_SMEAS; #if REL99 #if FF_EMR typedef struct { WORD16 rxlev_val_acc; // Accumulated value of RXLEV_VAL UWORD8 rxlev_val_nbr_meas; // Number of RXLEV_VAL value accumulated on block bases UWORD8 nbr_rcvd_blocks; // Number of correctly decoded blocks excluding SACCH FACCH etc Refer 05.08 UWORD32 mean_bep_block_acc; // Accumulated value of MEAN_BEP UWORD16 cv_bep_block_acc; // Accumulated value of CV_BEP UWORD8 mean_bep_block_num; // Number of blocks over MEAN_BEP is accumulated. UWORD8 cv_bep_block_num; // Number of blocks over CV_BEP is accumulated. } T_SMEAS_EMR; typedef struct { UWORD8 task; // task id (TCHTH, TCHTF, DDL, ADL, TCHA) UWORD8 burst_id; // burst ID only used for SDCCH. UWORD8 channel_mode; // channel mode in case of half / full rate UWORD8 subchannel; // subchannel number UWORD32 normalised_fn_mod13_mod4; // used to find block boundary in case of half rate BOOL facch_present; // necessary for processing to indicate reception of Facch BOOL facch_fire1; // necessary for processing to indicate good/bad reception of Facch UWORD8 a_ntd; // used for Data : FCS OK/FCS KO UWORD8 a_dd_0_blud; // check data/speech block presence on sub 0 UWORD8 a_dd_0_bfi; // check data/speech block integrity on sub 0 UWORD8 a_dd_1_blud; // check data/speech block presence on sub 1 UWORD8 a_dd_1_bfi; // check data/speech block integrity on sub 1 UWORD8 b_m1; // used for Data 14.4 M1 = 1 for second half block RLP UWORD8 b_f48blk_dl; // used for Data 4.8 : = 1 for second half block RLP UWORD8 b_ce; // used for Data : transparent / not transparent UWORD8 a_cd_fire1; // check SDCCH bloch integrity UWORD8 sid_present_sub0; // check sid present on sub 0 UWORD8 sid_present_sub1; // check sid present on sub 1 #if (AMR ==1) BOOL amr_facch_present; // necessary for AMR processing to indicate reception of Facch BOOL amr_facch_fire1; // necessary for AMR processing to indicate good/bad reception of Facch UWORD8 b_ratscch_blud; // check ratscch present UWORD8 ratscch_rxtype; // check type of AMR block UWORD8 amr_rx_type_sub0; // AMR type on sub 0 UWORD8 amr_rx_type_sub1; // AMR type on sub 1 #endif } T_EMR_PARAMS; #endif //FF_EMR #endif //REL99 /***************************************************************************************/ /* */ /***************************************************************************************/ typedef struct { UWORD8 new_status; UWORD8 current_status; WORD32 time_to_exec; } T_TASK_STATUS; /***************************************************************************************/ /* Cell/Carrier info: identity, RX level measurement, time info, gain controle info. */ /***************************************************************************************/ typedef struct { // Carrier/Cell Identity. UWORD16 radio_freq; // carrier id. WORD32 bsic; // BSIC. // Time difference information. UWORD32 fn_offset; // offset between fn of this NCELL and the SCELL fn. UWORD32 time_alignmt; // time alignment. // Receive Level Measurement info. structure. T_MEAS_INFO meas; T_INPUT_LEVEL traffic_meas; T_INPUT_LEVEL traffic_meas_beacon; // Beacon frequency FIFO UWORD8 buff_beacon[4]; #if L1_GPRS // Receive Level measurements in packet transfer mode // Daughter frequencies info. T_INPUT_LEVEL transfer_meas; // Power reduction on serving cell PCCCH / PBCCH UWORD8 pb; #endif // Number of unsuccessfull attempt on SB reading. UWORD8 attempt_count; // System information bitmap. UWORD32 si_bit_map; // System info. bitmap used for BCCH reading. } T_CELL_INFO; typedef struct { UWORD16 A[32+1]; } TC_CHAN_LIST; typedef struct { UWORD8 num_of_chans; TC_CHAN_LIST chan_list; BOOL pwrc; BOOL dtx_allowed; UWORD8 ba_id; } T_NEW_BA_LIST; typedef struct { UWORD8 ba_id; // BA list identifier. UWORD32 nbr_carrier; // number of carriers in the BA list. UWORD8 np_ctrl; // Tels the meas_manager which PCH burst has been controled. UWORD8 first_index; // First BA index measured in current session. UWORD8 next_to_ctrl; // Carrier for next power measurement result. UWORD8 next_to_read; // Measurement session time spent. UWORD8 ms_ctrl; UWORD8 ms_ctrl_d; UWORD8 ms_ctrl_dd; UWORD8 used_il [C_BA_PM_MEAS]; UWORD8 used_il_d [C_BA_PM_MEAS]; UWORD8 used_il_dd[C_BA_PM_MEAS]; UWORD8 used_lna [C_BA_PM_MEAS]; UWORD8 used_lna_d [C_BA_PM_MEAS]; UWORD8 used_lna_dd[C_BA_PM_MEAS]; T_MEAS_INFO A[32+1]; // list of 32 neighbors + 1 serving. BOOL new_list_present; T_NEW_BA_LIST new_list; } T_BA_LIST; typedef struct { UWORD16 radio_freq; WORD16 accum_power_result; } T_POWER_ARRAY; typedef struct { UWORD16 power_array_size; T_POWER_ARRAY power_array[NBMAX_CARRIER]; } T_FULL_LIST_MEAS; typedef struct { UWORD32 nbr_sat_carrier_ctrl; // Nb of saturated carriers after a pm session in ctrl. UWORD32 nbr_sat_carrier_read; // Nb of saturated carriers after a pm session in read. UWORD8 meas_1st_pass_ctrl; // flag for 1st pass during a pm session in ctrl. UWORD8 meas_1st_pass_read; // flag for 1st pass during a pm session in read. UWORD32 next_to_ctrl; // Carrier for next power measurement result. UWORD32 next_to_read; // Measurement session time spent. UWORD8 ms_ctrl; UWORD8 ms_ctrl_d; UWORD8 ms_ctrl_dd; UWORD8 sat_flag[NBMAX_CARRIER]; // last measure was saturated, so not valid } T_FULL_LIST; /*************************************************************/ /* Dedicated channel information structure... */ /*************************************************************/ /* */ /*************************************************************/ typedef struct { T_CHANNEL_DESCRIPTION *desc_ptr; // Ptr to the Active channel description T_CHANNEL_DESCRIPTION desc; // Channel description for AFTER STI. T_CHANNEL_DESCRIPTION desc_bef_sti; // Channel description for BEFORE STI. UWORD8 mode; // Channel mode. UWORD8 tch_loop; // TCH loop mode. } T_CHANNEL_INFO; /*************************************************************/ /* Mobile allocation information structure... */ /*************************************************************/ /* */ /*************************************************************/ typedef struct { T_MOBILE_ALLOCATION *alist_ptr; // Ptr to the Active frequency list T_MOBILE_ALLOCATION freq_list; T_MOBILE_ALLOCATION freq_list_bef_sti; } T_MA_INFO; /*************************************************************/ /* Dedicated channel parameter structure... */ /*************************************************************/ /* */ /*************************************************************/ typedef struct { T_CHANNEL_INFO *achan_ptr; // Ptr to the Active channel (chan1 or chan2) T_CHANNEL_INFO chan1; T_CHANNEL_INFO chan2; T_MA_INFO ma; WORD32 serv_sti_fn; // Chan. desc. change time, serving domain.(-1 for not in use). WORD32 neig_sti_fn; // Chan. desc. change time, neighbor domain.(-1 for not in use). // Frequency redefinition ongoing flag. //------------------------------------- UWORD8 freq_redef_flag; // Set to TRUE when a Freq. Redef. must be confirmed. // Timing Advance management. //--------------------------- UWORD8 timing_advance; // Currently used TA. UWORD8 new_timing_advance; // New timing advance value to be used on 1st frame // of the next reporting period. // TXPWR management. //------------------- UWORD8 new_target_txpwr; // New Target value for TXPWR control algo. T_CELL_INFO cell_desc; // Ptr to the new serving cell to download. // DAI test mode... DTX allowed... UWORD8 dai_mode; // Dai test mode. BOOL dtx_allowed; // DTX allowed (flag). // Encryption... T_ENCRYPTION_KEY ciph_key; UWORD8 a5mode; // For handover... UWORD8 ho_acc; // Handover access (part of HO reference) WORD32 ho_acc_to_send; // Set to 4 for SYNC HO and to -1 for ASYNC HO. UWORD8 t3124; // Timer used in Async. Ho. #if ((REL99 == 1) && (FF_BHO == 1)) // For blind handover... BOOL report_time_diff; BOOL nci; UWORD8 real_time_difference; WORD32 HO_SignalCode; #endif // For DPAGC algorithms purpose UWORD8 G_all[DPAGC_FIFO_LEN]; UWORD8 G_DTX[DPAGC_FIFO_LEN]; #if (AMR == 1) UWORD8 G_amr[DPAGC_AMR_FIFO_LEN]; #endif #if IDS // IDS mode configuration UWORD8 ids_mode; // Information transfert capability coded on 2 bits // 0: speech // 1: data service // 2: fax service #endif #if (AMR == 1) T_AMR_CONFIGURATION amr_configuration; UWORD8 cmip; #endif } T_DEDIC_SET; /*************************************************************/ /* Dedicated channel parameter structure... */ /*************************************************************/ /* */ /*************************************************************/ typedef struct { T_DEDIC_SET *aset; // Ptr to the Active parameter set T_DEDIC_SET *fset; // Ptr to the Free parameter set T_DEDIC_SET set[2]; // Table of parameter set T_MPHC_CHANNEL_MODE_MODIFY_REQ mode_modif; // New mode for a given subchannel. WORD32 SignalCode; // Message name, set when a new param. set is given #if (FF_L1_TCH_VOCODER_CONTROL == 1) UWORD8 reset_sacch; // Flag to control SACCH reset (set during CHAN ASSIGN and Hand-overs) UWORD8 vocoder_on; // Flag to control execution of vocoder UWORD8 start_vocoder; // Flag to trigger start of vocoder (vocoder must be started with a synchro start) #endif UWORD8 sync_tch; // Flag used to synchronize TCH/F or TCH/H. UWORD8 reset_facch; // Flag used to reset FACCH buffer header on new IAS/CAS/handover UWORD8 stop_tch; // Flag used to stop TCH/F or TCH/H (VEGA pwrdown). UWORD16 radio_freq; // ARFCN buffer (returned by hopping algo). UWORD16 radio_freq_d; // 1 frame delayed ARFCN. UWORD16 radio_freq_dd; // 2 frames delayed ARFCN. BOOL pwrc; // Flag used to reject serving pwr meas. on beacon. BOOL handover_fail_mode; // Flag used to indicate that the L1 wait for an handover fail request #if (AMR == 1) BOOL sync_amr; // Flag used to tell to the DSP that a new AMR paramters is ready in the NDB. #endif // (AMR == 1) #if ((REL99 == 1) && (FF_BHO == 1)) // For blind handover... BOOL handover_type; BOOL long_rem_handover_type; UWORD16 bcch_carrier_of_nbr_cell; UWORD32 fn_offset; UWORD32 time_alignment; #endif } T_DEDIC_PARAM; /*************************************************************/ /* Power Management structure... */ /*************************************************************/ typedef struct { // fields of TST_SLEEP_REQ primitive .... UWORD8 mode_authorized; // NONE,SMALL,BIG,DEEP,ALL UWORD32 clocks; // clocks disabled in Big sleep // 32 Khz gauging .... UWORD8 gauging_task; // ACTIVE, INACTIVE,WAIT-IQ UWORD8 gaug_duration; // gauging task duration UWORD8 gaug_count; // gauging task duration compteur UWORD32 histo[SIZE_HIST][2];// gauging histogram UWORD8 enough_gaug; // enough good gauging UWORD8 paging_scheduled; // first Paging Frame // flags and variables for wake-up .... UWORD8 Os_ticks_required; // TRUE : Os ticks to recover UWORD8 frame_adjust; // TRUE : adjust 1 frame UWORD32 sleep_duration; // sleep duration computed at wakeup UWORD32 wakeup_time; // frame number of last wakeup UWORD16 wake_up_int_id; // Interrupt waking up the target UWORD8 wakeup_type; // Type of the interrupt UWORD8 why_big_sleep; // Type of the big sleep // flag for sleep .... UWORD8 sleep_performed; // NONE,SMALL,BIG,DEEP,ALL // status of clocks modules .... UWORD32 modules_status; // modules clocks status // constantes for 32Khz filtering UWORD32 c_clk_min; // INIT state UWORD32 c_clk_init_min; // INIT state UWORD32 c_clk_max; // INIT state UWORD32 c_clk_init_max; // INIT state UWORD32 c_delta_hf_acquis; // ACQUIS state UWORD32 c_delta_hf_update; // UPDATE state // trace gauging parameters UWORD8 state; // state of the gauging UWORD32 lf; // Number of the 32KHz UWORD32 hf; // HF: nb_hf( Number of the 13MHz *6 ) UWORD32 root; // root & frac: the ratio of the HF & LF in each state. UWORD32 frac; } T_POWER_MNGT; /*************************************************************/ /* code version structure... */ /*************************************************************/ typedef struct { // DSP versions & checksum UWORD16 dsp_code_version; UWORD16 dsp_patch_version; UWORD16 dsp_checksum; // DSP checksum : patch+code // MCU versions UWORD16 mcu_tcs_program_release; UWORD16 mcu_tcs_official; UWORD16 mcu_tcs_internal; UWORD16 mcu_tm_version; } T_VERSION; #if L1_RECOVERY typedef struct { UWORD32 frame_count; } T_L1S_RECOVER; #endif #if (TOA_ALGO == 2) typedef struct { WORD16 toa_shift; // TOA, value used to update the TOA UWORD8 toa_snr_mask; // TOA, mask counter to reject TOA/SNR results. BOOL toa_update_flag; // FLAG used to indicate when to the TOA module when to update TOA. // NOTE: Flag set to TRUE in l1s_synch() and reset to FALSE in l1ctl_toa() UWORD16 toa_frames_counter; // TOA Frames counter - Number of the TDMA frames (or bursts) which are used for TOA // updation OR number of times l1ctl_toa() function is invoked // Reset every TOA_PERIOD_LEN[l1_mode] frames UWORD16 toa_accumul_counter; // Number of TDMA frames (or bursts) which are actually used for TOA tracking // <= toa_frames_counter, as only if SNR>0.46875 TOA estimated by DSP is used to // update the tracking algorithm WORD16 toa_accumul_value; // TOA_tracking_value accumulated over 'toa_accumul_counter' frames // Based on this value the shift to be applied is decided UWORD32 toa_update_fn; // a counter which is in direct relation to l1s.actual_time.fn // and used for TOA tracking in ALL MODES every 433 MF's (approx. 2 seconds) }T_TOA_ALGO; #endif /***************************************************************************************/ /* L1S global variable structure... */ /***************************************************************************************/ typedef struct { //++++++++++++++++++++ // Power Management... //++++++++++++++++++++ T_POWER_MNGT pw_mgr; // data base for power management // Time for debug & Simulation purpose... // -> used as base time for BTS simulation. //----------------------------------------- UWORD32 debug_time; // time counter used by L3 scenario... // L1S Tasks management... //----------------------------------------- T_TASK_STATUS task_status[NBR_DL_L1S_TASKS]; // ...in L1S, scheduler. UWORD8 frame_count; // ...nb frames to go. UWORD8 forbid_meas; // ...frames where meas. ctrl is not allowed. // MFTAB management variables... //----------------------------------------- UWORD8 afrm; // active frame ID. T_MFTAB FAR mftab; // Multiframe table. // Control parameters... //----------------------------------------- UWORD32 afc_frame_count; // AFC, Frame count between 2 calls to afc control function. WORD16 afc; // AFC, Common Frequency controle. #if (TOA_ALGO == 2) T_TOA_ALGO toa_var; #else WORD16 toa_shift; // TOA, value used to update the TOA UWORD8 toa_snr_mask; // TOA, mask counter to reject TOA/SNR results. UWORD16 toa_period_count; // TOA frame period used in PACKET TRANSFER MODE BOOL toa_update; // TOA, is set at the end of the update period, toa update occurs on next valid frame #endif // Flag registers for RF task controle... //----------------------------------------- // Made these control registers short's as more than 8-bits required. UWORD16 tpu_ctrl_reg; // (x,x,x,x,SYNC,RX,TX,MS) RX/TX/MS/SYNC bit ON whenever an // according "controle" has been setup in the current frame. UWORD16 dsp_ctrl_reg; // (x,x,x,x,x,RX,TX,MS) RX/TX/MS bit ON whenever an // according "controle" has been setup in the current frame. //+++++++++++++++++++ // Serving... //+++++++++++++++++++ // Serving frame number management. //--------------------------------- T_TIME_INFO actual_time; // Time info: current FN, T1, T2, T3... T_TIME_INFO next_time; // Time info: next FN, T1, T2, T3... T_TIME_INFO next_plus_time; // Time info: next FN, T1, T2, T3... // TXPWR management. //------------------- UWORD8 reported_txpwr; // Reported value for TXPWR. UWORD8 applied_txpwr; // Current value for TXPWR. // Last RXQUAL value. //------------------- UWORD8 rxqual; // last rxqual value. // Hardware info. //--------------- UWORD32 tpu_offset; // Current TPU offset register value safeguard. UWORD32 tpu_offset_hw; // Current TPU offset register value copied in the TPU. UWORD16 tpu_win; // tpu window identifier inside a TDMA. // code versions T_VERSION version; #if (L1_GTT == 1) UWORD8 tty_state; // state for L1S GTT manager. #if L2_L3_SIMUL // GTT test T_GTT_TEST_L1S gtt_test; #endif #endif #if (L1_DYN_DSP_DWNLD == 1) UWORD8 dyn_dwnld_state; // state for L1S DYN DWNLD manager #endif // L1_DYN_DSP_DWNLD #if (AUDIO_TASK == 1) // Audio task. //----------------------------------------- BOOL l1_audio_it_com; // Flag to enable the ITCOM. UWORD8 audio_state[NBR_AUDIO_MANAGER]; // state for L1S audio manager. #if (MELODY_E1) T_L1S_MELODY_TASK melody0; T_L1S_MELODY_TASK melody1; #endif #if (VOICE_MEMO) T_L1S_VM_TASK voicememo; #endif #if (L1_PCM_EXTRACTION) T_L1S_PCM_TASK pcm; #endif #if (L1_VOICE_MEMO_AMR) T_L1S_VM_AMR_TASK voicememo_amr; #endif #if (SPEECH_RECO) T_L1S_SR_TASK speechreco; #endif #if (L1_AEC == 1) T_L1S_AEC_TASK aec; #endif #if (MELODY_E2) T_L1S_MELODY_E2_COMMON_VAR melody_e2; T_L1S_MELODY_E2_TASK melody0_e2; T_L1S_MELODY_E2_TASK melody1_e2; #endif #if (L1_EXT_AUDIO_MGT == 1) T_L1S_EXT_AUDIO_MGT_VAR ext_audio_mgt; #endif #if (L1_WCM == 1) T_WCM_ACTION wcm_action; #endif #if (L1_AGC_UL == 1) T_AGC_ACTION agc_ul_action; #endif #if (L1_AGC_DL == 1) T_AGC_ACTION agc_dl_action; #endif #if (L1_ANR == 2) T_ANR_ACTION anr_ul_action; #endif #if (L1_IIR == 2) T_IIR_ACTION iir_dl_action; #endif #if (L1_DRC == 1) T_DRC_ACTION drc_dl_action; #endif #endif UWORD8 last_used_txpwr; #if L1_GPRS BOOL ctrl_synch_before; //control of synchro for CCCH reading en TN-2 UWORD32 next_gauging_scheduled_for_PNP; // gauging for Packet Idle #endif #if L1_RECOVERY T_L1S_RECOVER recovery; #endif BOOL spurious_fb_detected; // Handling DTX mode BOOL dtx_ul_on; //earlier name was- dtx_on WORD8 facch_bursts; // DTX mode in AMR BOOL dtx_amr_dl_on; // set to TRUE when the AMR is in DTX mode in downlink //+++++++++++++++++ // GSM IDLE IN RAM //+++++++++++++++++ #if (GSM_IDLE_RAM != 0) T_L1S_GSM_IDLE_INTRAM gsm_idle_ram_ctl; #if (GSM_IDLE_RAM == 1) // Used to avoid allocation of ext mem data while in L1S_meas_manager (allocate signal long time before sending) T_RXLEV_MEAS A[8]; #endif #endif //+++++++++++++++++ // Triton Audio ON/OFF Changes //+++++++++++++++++ #if (L1_AUDIO_MCU_ONOFF == 1) T_L1S_AUDIO_ONOFF_MANAGER audio_on_off_ctl; #endif #if (ANALOG == 11) UWORD8 abb_write_done; #endif UWORD8 tcr_prog_done; #if (L1_RF_KBD_FIX == 1) UWORD16 total_kbd_on_time; UWORD8 correction_ratio; //KPD_CORRECTION_RATIO correction_ratio;//omaps00090550 #endif #if (L1_GPRS == 1) BOOL algo_change_synchro_active; #endif /* FF_L1_FAST_DECODING */ #if (FF_REPEATED_SACCH == 1) // Repeated SACCH mode T_REPEAT_SACCH repeated_sacch; #endif /* FF_REPEATED_SACCH */ #if (FF_REPEATED_DL_FACCH == 1) // Repeated FACCH mode T_REPEAT_FACCH repeated_facch; #endif /* FF_REPEATED_DL_FACCH == 1 */ /* 0 indicates success, non zero value indicates failure */ UWORD8 boot_result; //Nina modify to save power, not forbid deep sleep, only force gauging in next paging UWORD8 force_gauging_next_paging_due_to_CCHR; } T_L1S_GLOBAL; #if (AUDIO_TASK == 1) #if (L1_VOCODER_IF_CHANGE == 1) typedef struct { BOOL enabled; // TRUE if enabled, FALSE if disabled BOOL automatic_disable; // TRUE if vocoders are automatically disabld via a MPHC_STOP_DEDICATED_REQ, FALSE otherwise. } T_L1A_VOCODER_CFG_GLOBAL; #endif // L1_VOCODER_IF_CHANGE == 1 typedef struct { UWORD8 outen1; UWORD8 outen2; UWORD8 outen3; UWORD8 classD; UWORD8 command_requested; /* updated in L1a task context*/ UWORD8 command_commited; /* updated in I2c ISR callback context*/ } T_OUTEN_CFG_TASK; #endif // AUDIO_TASK == 1 /***************************************************************************************/ /* L1A global variable structure... */ /***************************************************************************************/ typedef struct { // State for L1A state machines... //----------------------------------------- UWORD8 state[NBR_L1A_PROCESSES]; // Measurement tasks management... //----------------------------------------- UWORD32 l1a_en_meas[NBR_L1A_PROCESSES]; // Flag for forward/delete message management. //--------------------------------------------- UWORD8 l1_msg_forwarded; #if (L1_DYN_DSP_DWNLD == 1) // Dynamic donload global variables T_L1A_DYN_DWNLD_GLOBAL dyn_dwnld; #endif // New Vocoder IF global L1A variable: L1A checks if the vocoder has already been enabled/disabled // in order to robust to possible multiples enabling/disabling messages coming from PS #if (L1_VOCODER_IF_CHANGE == 1) T_L1A_VOCODER_CFG_GLOBAL vocoder_state; #endif // L1_VOCODER_IF_CHANGE == 1 // signal code indicating the reason of L1C_DEDIC_DONE UWORD32 confirm_SignalCode; #if (L1_MP3 == 1) T_L1_MP3_L1A mp3_task; //ADDED FOR AAC #endif #if (L1_AAC == 1) T_L1_AAC_L1A aac_task; #endif #if(L1_IIR == 2) xSignalHeaderRec *iir_req_msg_ptr; #endif #if(L1_DRC == 1) xSignalHeaderRec *drc_req_msg_ptr; #endif #if(L1_WCM == 1) xSignalHeaderRec *wcm_req_msg_ptr; #endif #if(L1_CHECK_COMPATIBLE == 1) BOOL vcr_wait; BOOL stop_req; BOOL vcr_msg_param; BOOL vch_auto_disable; #endif } T_L1A_GLOBAL; /***************************************************************************************/ /* L1A -> L1S communication structure... */ /***************************************************************************************/ typedef struct { //+++++++++++++++++++ // Serving Cell... //+++++++++++++++++++ // Serving Cell identity and information. //--------------------------------------- T_CELL_INFO Scell_info; T_SMEAS Smeas_dedic; UWORD8 Scell_IL_for_rxlev; T_INPUT_LEVEL Scell_used_IL; T_INPUT_LEVEL Scell_used_IL_d; T_INPUT_LEVEL Scell_used_IL_dd; T_BCCHS nbcchs; T_BCCHS ebcchs; // Synchro information. //--------------------------------------- #if L1_FF_WA_OMAPS00099442 BOOL change_tpu_offset_flag; #endif WORD8 tn_difference; // Timeslot difference for next synchro. UWORD8 dl_tn; // Current timeslot for downlink stuffs. #if L1_GPRS UWORD8 dsp_scheduler_mode; // DSP Scheduler mode (GPRS or GSM). #endif // Idle parameters. //----------------- BOOL bcch_combined; // BS_CCCH_SDCCH_COMB flag. UWORD8 bs_pa_mfrms; // BS_PA_MFRMS parameter. UWORD8 bs_ag_blks_res; // BS_AG_BLKS_RES parameter. UWORD8 ccch_group; // CCCH_GROUP parameter. UWORD8 page_group; // PAGING_GROUP parameter. UWORD8 page_block_index; // Paging block index paramter. T_IDLE_TASK_INFO idle_task_info; // Idle task positions... UWORD8 nb_pch_per_mf51; // nbr paging blocks per mf51. // CBCH parameters. // ---------------- UWORD32 offset_tn0; // TPU offset for TN=0 (used for SMSCB only). T_CHANNEL_DESCRIPTION cbch_desc; // CBCH (SMSCB) channel description. T_MOBILE_ALLOCATION cbch_freq_list; // CBCH frequency list (hopping freq list). UWORD32 mf51_fn; // Starting FN (for CBCH reading. UWORD8 cbch_start_in_mf51; // Starting position of CBCH in the MF51. T_CBCH_HEAD_SCHEDULE norm_cbch_schedule; // Normal CBCH scheduling structure. T_CBCH_HEAD_SCHEDULE ext_cbch_schedule; // Extended CBCH scheduling structure. T_CBCH_INFO_SCHEDULE cbch_info_req; BOOL pre_scheduled_cbch; // CBCH task has to be scheduled 1 FN in advance BOOL change_synchro_cbch;// A Pseudo Synchro is needed to read CBCH block UWORD8 tn_smscb; // CBCH TN taking into account new Synchro // Random Access information. // ---------------------------- T_RA_TASK_INFO ra_info; // ADC management. //------------------- UWORD16 adc_mode; UWORD8 adc_idle_period; UWORD8 adc_traffic_period; UWORD8 adc_cpt; // TXPWR management. //------------------- #if (L1_FF_MULTIBAND == 0) UWORD8 powerclass_band1; // Power class for the MS, given in ACCESS LINK mode (GSM Band). UWORD8 powerclass_band2; // Power class for the MS, given in ACCESS LINK mode (DCS Band). #else UWORD8 powerclass[RF_NB_SUPPORTED_BANDS]; #endif // Dedicated parameters. //---------------------- T_DEDIC_PARAM dedic_set; // Dedicated channel parameters. //+++++++++++++++++++ // Neighbour Cells... //+++++++++++++++++++ T_BCCHN_LIST bcchn; T_NSYNC_LIST nsync; // BA list / FULL list. //--------------------- T_BA_LIST ba_list; T_FULL_LIST full_list; T_FULL_LIST_MEAS *full_list_ptr; #if ((REL99 == 1) && (FF_BHO == 1)) // For blind handover... T_BHO_PARAM nsync_fbsb; #endif //+++++++++++++++++++ // L1S scheduler... //+++++++++++++++++++ // L1S tasks management... //----------------------------------------- BOOL task_param[NBR_DL_L1S_TASKS]; // ...synchro semaphores. BOOL l1s_en_task[NBR_DL_L1S_TASKS]; // ...enable register. UWORD32 time_to_next_l1s_task; // time to wait to reach starting frame of next task. UWORD8 l1a_activity_flag; // Activity flag. // Measurement tasks management... //----------------------------------------- UWORD32 meas_param; // Synchro semaphore bit register. UWORD32 l1s_en_meas; // Enable task bit register. // L1 mode... //----------------------------------------- UWORD32 mode; // functional mode: CS_MODE, I_MODE... //++++++++++++++++++++++++ // Controle parameters... //++++++++++++++++++++++++ UWORD32 fb_mode; // Mode for fb detection algorithm. UWORD8 toa_reset; // Flag for TOA algo. reset. // Input level memory for AGC management. //--------------------------------------- T_INPUT_LEVEL last_input_level[NBMAX_CARRIER+1]; BOOL recovery_flag; // in case of the system is down and needs to be recovered //++++++++++++++++++++++++ // Audio task... //++++++++++++++++++++++++ #if (AUDIO_TASK == 1) #if (KEYBEEP) T_KEYBEEP_TASK keybeep_task; #endif #if (TONE) T_TONE_TASK tone_task; #endif #if (MELODY_E1) T_MELODY_TASK melody0_task; T_MELODY_TASK melody1_task; #endif #if (VOICE_MEMO) T_VM_TASK voicememo_task; #endif #if (L1_PCM_EXTRACTION) T_PCM_TASK pcm_task; #endif #if (L1_VOICE_MEMO_AMR) T_VM_AMR_TASK voicememo_amr_task; #endif #if (SPEECH_RECO) T_SR_TASK speechreco_task; #endif #if (L1_AEC == 1) T_AEC_TASK aec_task; #endif #if (L1_AEC == 2) T_AEC_TASK aec_task; #endif #if (FIR) T_FIR_TASK fir_task; #endif #if (AUDIO_MODE) T_AUDIO_MODE_TASK audio_mode_task; #endif #if (MELODY_E2) T_MELODY_E2_TASK melody0_e2_task; T_MELODY_E2_TASK melody1_e2_task; #endif #if (L1_CPORT == 1) T_CPORT_TASK cport_task; #endif #if (L1_EXTERNAL_AUDIO_VOICE_ONOFF == 1 || L1_EXT_MCU_AUDIO_VOICE_ONOFF == 1) T_AUDIO_ONOFF_TASK audio_onoff_task; #endif BOOL audio_forced_by_l1s; /* This value is used to indicate if the L1S is forcing the audio_on_off feature in the DSP CQ21718 */ #if (L1_STEREOPATH == 1) T_STEREOPATH_DRV_TASK stereopath_drv_task; #endif #if (L1_MP3 == 1) T_MP3_TASK mp3_task; #endif #if (L1_MIDI == 1) T_MIDI_TASK midi_task; #endif //ADDED FOR AAC #if (L1_AAC == 1) T_AAC_TASK aac_task; #endif #if (L1_ANR == 1) T_ANR_TASK anr_task; #endif #if (L1_ANR == 2) T_AQI_ANR_TASK anr_task; #endif #if (L1_IIR == 1) T_IIR_TASK iir_task; #endif #if (L1_AGC_UL == 1) T_AQI_AGC_UL_TASK agc_ul_task; #endif #if (L1_AGC_DL == 1) T_AQI_AGC_DL_TASK agc_dl_task; #endif #if (L1_IIR == 2) T_AQI_IIR_TASK iir_task; #endif #if (L1_DRC == 1) T_AQI_DRC_TASK drc_task; #endif #if (L1_LIMITER == 1) T_LIMITER_TASK limiter_task; #endif #if (L1_ES == 1) T_ES_TASK es_task; #endif #if (L1_WCM == 1) T_AQI_WCM_TASK wcm_task; #endif //++++++++++++++++++++++++++++++++++++ // Fake L1S sm for audio IT generation //++++++++++++++++++++++++++++++++++++ T_AUDIOIT_TASK audioIt_task; /* * FreeCalypso change: I had to move this part here, or else * compilation fails w/o AUDIO_TASK */ T_OUTEN_CFG_TASK outen_cfg_task; #endif //+++++++++++++ // GTT task //+++++++++++++ #if (L1_GTT == 1) T_GTT_TASK gtt_task; #endif // Dynamic DSP download task #if (L1_DYN_DSP_DWNLD == 1) T_DYN_DWNLD_TASK_COMMAND dyn_dwnld_task; #endif #if REL99 #if FF_EMR T_SMEAS_EMR Smeas_dedic_emr; #endif #endif #if (FF_L1_FAST_DECODING == 1) UWORD8 last_fast_decoding; #endif /* if (FF_L1_FAST_DECODING == 1) */ } T_L1A_L1S_COM; /***************************************************************************************/ /* L1A -> DSP communication structure... */ /***************************************************************************************/ typedef struct { UWORD8 dsp_w_page; // Active page for ARM "writting" to DSP {0,1}. UWORD8 dsp_r_page; // Active page for ARM "reading" from DSP {0,1}. UWORD8 dsp_r_page_used; // Used in "l1_synch" to know if the read page must be chged. T_DB_DSP_TO_MCU *dsp_db_r_ptr; // MCU<->DSP comm. read page (Double Buffered comm. memory). T_DB_MCU_TO_DSP *dsp_db_w_ptr; // MCU<->DSP comm. write page (Double Buffered comm. memory). #if (DSP ==38) || (DSP == 39) T_DB_COMMON_MCU_TO_DSP *dsp_db_common_w_ptr; // MCU<->DSP comm. common write page (Double Buffered comm. memory). #endif T_NDB_MCU_DSP *dsp_ndb_ptr; // MCU<->DSP comm. read/write (Non Double Buffered comm. memory). T_PARAM_MCU_DSP *dsp_param_ptr; // MCU<->DSP comm. read/write (Param comm. memory). #if (DSP_DEBUG_TRACE_ENABLE == 1) T_DB2_DSP_TO_MCU *dsp_db2_current_r_ptr; T_DB2_DSP_TO_MCU *dsp_db2_other_r_ptr; #endif /* DSP CPU load measurement */ /* FreeCalypso change: the necessary #if was missing */ #if (DSP == 38) || (DSP == 39) T_DB_MCU_TO_DSP_CPU_LOAD *dsp_cpu_load_db_w_ptr; #endif } T_L1S_DSP_COM; /***************************************************************************************/ /* L1A -> TPU communication structure... */ /***************************************************************************************/ typedef struct { UWORD8 tpu_w_page; // Active page for ARM "writting" to TPU {0,1}. UWORD32 *tpu_page_ptr; // Current Pointer within the active "tpu_page". #if (CODE_VERSION == SIMULATION) T_reg_cmd *reg_cmd; // command register for TPU & DSP enabling and pages pgmation #else UWORD16 *reg_cmd; // command register for TPU & DSP enabling and pages pgmation #endif UWORD32 *reg_com_int; // communication int. register UWORD32 *offset; // offset register } T_L1S_TPU_COM; /***************************************************************************************/ /* L1 configuration structure */ /***************************************************************************************/ #if (L1_FF_MULTIBAND == 0) typedef struct { UWORD8 id; //standard identifier UWORD16 radio_band_support; UWORD8 swap_iq_band1; UWORD8 swap_iq_band2; UWORD32 first_radio_freq; UWORD32 first_radio_freq_band2; UWORD32 radio_freq_index_offset; UWORD32 nbmax_carrier; UWORD32 nbmeas; UWORD32 max_txpwr_band1; UWORD32 max_txpwr_band2; UWORD32 txpwr_turning_point; UWORD16 cal_freq1_band1; UWORD16 cal_freq1_band2; UWORD16 g_magic_band1; UWORD16 g_magic_band2; UWORD16 lna_att_band1; UWORD16 lna_att_band2; UWORD16 lna_switch_thr_low_band1; UWORD16 lna_switch_thr_low_band2; UWORD16 lna_switch_thr_high_band1; UWORD16 lna_switch_thr_high_band2; } T_L1_STD_CNFG; #endif // #if (L1_FF_MULTIBAND == 0) #if (L1_FF_MULTIBAND == 1) #if 0 typedef struct { UWORD16 nbmax_carrier; UWORD16 first_radio_freq; UWORD16 first_tpu_radio_freq; UWORD16 first_operative_radio_freq; UWORD8 physical_band_id; } T_MULTIBAND_CONVERSION_DATA; typedef struct { UWORD16 lna_switch_thr_high; UWORD16 lna_switch_thr_low; UWORD16 lna_att; UWORD16 g_magic; UWORD8 swap_iq; UWORD16 cal_freq1; UWORD8 tx_turning_point; UWORD8 max_txpwr; UWORD8 gsm_band_identifier; } T_MULTIBAND_RF_DATA; #endif // if 0 typedef struct { UWORD8 radio_band; UWORD8 power_class; UWORD8 _align0; UWORD8 _align1; } T_L1_MULTIBAND_POWER_CLASS; #endif /*if (L1_FF_MULTIBAND == 1)*/ //RF dependent parameter definitions typedef struct { UWORD16 rx_synth_setup_time; UWORD8 rx_synth_load_split; WORD16 rx_synth_start_time; WORD16 rx_change_offset_time; WORD16 rx_change_synchro_time; UWORD8 rx_tpu_scenario_ending; UWORD16 tx_synth_setup_time; UWORD8 tx_synth_load_split; WORD16 tx_synth_start_time; WORD16 tx_change_offset_time; WORD16 tx_nb_duration; WORD16 tx_ra_duration; UWORD8 tx_nb_load_split; UWORD8 tx_ra_load_split; UWORD8 tx_tpu_scenario_ending; WORD16 fb26_anchoring_time; WORD16 fb26_change_offset_time; UWORD32 prg_tx_gsm; UWORD32 prg_tx_dcs; UWORD16 low_agc_noise_thr; UWORD16 high_agc_sat_thr; UWORD16 low_agc; UWORD16 high_agc; UWORD16 il_min; UWORD16 fixed_txpwr; WORD16 eeprom_afc; WORD8 setup_afc_and_rf; WORD8 rf_wakeup_tpu_scenario_duration; // Duration (in TDMA frames) of TPU scenario for RF wakeup UWORD32 psi_sta_inv; UWORD32 psi_st; UWORD32 psi_st_32; UWORD32 psi_st_inv; #if (VCXO_ALGO==1) WORD16 afc_dac_center; WORD16 afc_dac_min; WORD16 afc_dac_max; WORD16 afc_snr_thr; UWORD8 afc_algo; UWORD8 afc_win_avg_size_M; UWORD8 rgap_algo; UWORD8 rgap_bad_snr_count_B; #endif UWORD8 guard_bits; #if DCO_ALGO BOOL dco_enabled; #endif #if (ANALOG == 1) UWORD16 debug1; UWORD16 afcctladd; UWORD16 vbuctrl; UWORD16 vbdctrl; UWORD16 bbctrl; UWORD16 apcoff; UWORD16 bulioff; UWORD16 bulqoff; UWORD16 dai_onoff; UWORD16 auxdac; UWORD16 vbctrl; UWORD16 apcdel1; #endif #if (ANALOG == 2) UWORD16 debug1; UWORD16 afcctladd; UWORD16 vbuctrl; UWORD16 vbdctrl; UWORD16 bbctrl; UWORD16 bulgcal; UWORD16 apcoff; UWORD16 bulioff; UWORD16 bulqoff; UWORD16 dai_onoff; UWORD16 auxdac; UWORD16 vbctrl1; UWORD16 vbctrl2; UWORD16 apcdel1; UWORD16 apcdel2; #endif #if (ANALOG == 3) UWORD16 debug1; UWORD16 afcctladd; UWORD16 vbuctrl; UWORD16 vbdctrl; UWORD16 bbctrl; UWORD16 bulgcal; UWORD16 apcoff; UWORD16 bulioff; UWORD16 bulqoff; UWORD16 dai_onoff; UWORD16 auxdac; UWORD16 vbctrl1; UWORD16 vbctrl2; UWORD16 apcdel1; UWORD16 apcdel2; UWORD16 vbpop; UWORD16 vau_delay_init; UWORD16 vaud_cfg; UWORD16 vauo_onoff; UWORD16 vaus_vol; UWORD16 vaud_pll; #endif #if (ANALOG == 11) UWORD8 vulgain; UWORD8 vdlgain; UWORD8 sidetone; UWORD8 ctrl1; UWORD8 ctrl2; UWORD8 ctrl3; UWORD8 ctrl4; UWORD8 ctrl5; UWORD8 ctrl6; UWORD8 popauto; UWORD8 outen1; UWORD8 outen2; UWORD8 outen3; UWORD8 aulga; UWORD8 aurga; #endif #if (RF_FAM == 61) UWORD16 apcdel1; UWORD16 apcdel2; UWORD16 apcctrl2; #endif #if L1_GPRS UWORD16 toa_pm_thres; // PM threshold for TOA algorithm feeding in packet transfer mode #endif } T_L1_PARAMS; typedef struct { #if (L1_FF_MULTIBAND == 0) T_L1_STD_CNFG std; //standard: GSM,GSM_E,GSM850,DCS,PCS,DUAL,DUALEXT #endif // L1_FF_MULTIBAND == 0 UWORD8 pwr_mngt; //power management active UWORD8 tx_pwr_code; #if IDS UWORD8 ids_enable; #endif UWORD16 dwnld; T_L1_PARAMS params; double dpll; //dpll factor #if TESTMODE //Define the TestMode flag and TestMode parameters UWORD8 TestMode; UWORD8 agc_enable; UWORD8 afc_enable; UWORD8 adc_enable; #if (FF_REPEATED_SACCH == 1) UWORD8 repeat_sacch_enable; #endif /* FF_REPEATED_SACCH == 1 */ #if (FF_REPEATED_DL_FACCH == 1) UWORD8 repeat_facch_dl_enable; #endif /* (FF_REPEATED_DL_FACCH == 1)*/ T_TM_PARAMS tmode; //TestMode parameters structure #endif T_FACCH_TEST_PARAMS facch_test; } T_L1_CONFIG; // SAPI identifier : 0 (Signalling), 3 (Short Messages Services) #if FF_REPEATED_SACCH typedef enum { SAPI_0 = 0, SAPI_3 = 3 } T_L1_SAPI_ID; #endif /* FF_REPEATED_SACCH */ /***************************************************************************************/ /* API HISR -> L1A communication structure... */ /***************************************************************************************/ #if ( (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1) || (FF_L1_IT_DSP_USF == 1) ) // equivalent to an API_HISR flag #if FF_L1_IT_DSP_USF typedef struct { // Fast USF HISR pending BOOL pending; } T_L1A_USF_HISR_COM; #endif #if FF_L1_IT_DSP_DTX typedef struct { // Fast DTX HISR pending BOOL pending; // TX activity programmed in TCH block BOOL tx_active; // Fast DTX service is available BOOL fast_dtx_ready; // Fast DTX service latency timer UWORD8 fast_dtx_ready_timer; // Fast DTX state variable UWORD8 dtx_status; } T_L1A_DTX_HISR_COM; #endif #if (FF_L1_FAST_DECODING == 1) typedef struct { /* Fast Decoding HISR pending */ BOOL pending; /* Current CRC */ BOOL crc_error; /* Status (IT awaited?) */ UWORD8 status; /* Control required during incoming fast API IT? */ BOOL deferred_control_req; /* Task using fast decoding */ UWORD8 task; /* Burst ID of the task */ UWORD8 burst_id; /* Is the decoding of a contiguous block starting? */ BOOL contiguous_decoding; } T_L1A_FAST_DECODING_HISR_COM; #endif /* FF_L1_FAST_DECODING */ typedef struct { #if (L1_MP3 == 1) T_L1A_MP3_HISR_COM mp3; #endif #if (L1_MIDI == 1) T_L1A_MIDI_HISR_COM midi; //ADDED FOR AAC #endif #if (L1_AAC == 1) T_L1A_AAC_HISR_COM aac; #endif #if (L1_DYN_DSP_DWNLD == 1) T_L1A_DYN_DWNLD_HISR_COM dyn_dwnld; #endif // L1_DYN_DSP_DWNLD #if (FF_L1_IT_DSP_USF == 1) T_L1A_USF_HISR_COM usf; #endif #if (FF_L1_IT_DSP_DTX == 1) T_L1A_DTX_HISR_COM dtx; #endif #if (FF_L1_FAST_DECODING == 1) T_L1A_FAST_DECODING_HISR_COM fast_decoding; #endif /* FF_L1_FAST_DECODING */ } T_L1A_API_HISR_COM; #if (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1) typedef struct { #if (L1_MP3 == 1) T_L1_MP3_API_HISR mp3; #endif #if (L1_MIDI == 1) T_L1_MIDI_API_HISR midi; #endif //ADDED FOR AAC #if (L1_AAC == 1) T_L1_AAC_API_HISR aac; #endif #if (L1_DYN_DSP_DWNLD == 1) T_L1_DYN_DWNLD_API_HISR dyn_dwnld; #endif // L1_DYN_DSP_DWNLD } T_L1_API_HISR; #endif // #if (L1_MP3 == 1) || (L1_MIDI == 1) || || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1) #endif //(L1_MP3 == 1) || (L1_MIDI == 1) || (L1_DYN_DSP_DWNLD == 1) || (FF_L1_IT_DSP_USF == 1) typedef struct { /* 0 indicates success 1 indicates failure */ UWORD16 boot_result; UWORD16 drp_maj_ver; UWORD16 drp_min_ver; // MCU versions UWORD16 mcu_tcs_program_release; UWORD16 mcu_tcs_official; UWORD16 mcu_tcs_internal; // DSP versions & checksum UWORD16 dsp_code_version; UWORD16 dsp_patch_version; }T_L1_BOOT_VERSION_CODE;