2009年4月7日星期二

关于手动搜索网络(+COPS)超时

发送AT命令+COPS=?进行手动搜网时,整个搜网过程要在2min之内完成,如果在2min之内无法完成,则此次搜索就会abort,+COPS命令返回+CME ERROR: operation not allowed(可用网络列表的长度为-1)

启动定时器代码位置在:
//rrccsp.c
void rrccsp_update_bplmn_srch_vars( wtow_bplmn_srch_status_type status, sys_network_selection_mode_e_type nw_sel_mode)
{
...
rrctmr_start_timer(RRCTMR_BPLMN_GUARD_SRCH_TIMER, RRCTMR_BPLMN_GUARD_SRCH_TIMER_IN_MS);
...
}

RRCTMR_BPLMN_GUARD_SRCH_TIMER定义在:
//rrctmr.h
typedef enum
{
RRCTMR_T_300_TIMER, /* T300 Timer from SIB 1 */
RRCTMR_T_308_TIMER, /* T308 Timer from SIB 1 */
RRCTMR_WAIT_TIME_TIMER, /* Wait Time Timer from RRC Connection Reject
Message */
RRCTMR_UE_TO_CAMP_ON_TIMER, /* Timer for UE to camp on, if not already */
RRCTMR_RRC_CON_DELAY_TIMER, /* Timer for UE to delay RRC Conn Release */
RRCTMR_RCE_L2ACK_TIMER, /* Timer to receive L2 ACK in acknowledged
mode transmission for RCE procedure */
RRCTMR_RCR_L2ACK_TIMER, /* Timer to receive L2 ACK in acknowledged
mode transmission for RCR procedure */
RRCTMR_T_304_TIMER, /* T304 Timer from SIB 1 */
RRCTMR_RSSI_BER_TIMER, /* Timer to periodically report RSSI & BER
to CM */
RRCTMR_SIB_WAIT_TIMER, /* Timer for maximum time to wait for SIBs
in a cell */
RRCTMR_T_302_TIMER, /* T302 timer for CELL UPDATE retransmission */
RRCTMR_T_305_TIMER, /* T305 timer for periodic CELL UPDATE */
RRCTMR_T_316_TIMER, /* T316 Timer for Out of Service Area in
CELL_PCH and URA_PCH state */
RRCTMR_T_317_TIMER, /* T317 Timer for Out of service Area in
CELL_FACH state */
RRCTMR_T_307_TIMER, /* T307 Timer is max time for UE to get into
In Service after T305 is expired */
RRCTMR_T_314_TIMER, /* T314 Re-establish timer */
RRCTMR_T_315_TIMER, /* T315 Re-establish timer */
RRCTMR_SIB7_EXP_TIMER, /* Timer for SIB7 Expiration */
RRCTMR_IGNORE_BCCH_MOD_TIMER, /* Timer to Ignore BCCH Modifcation Info IE
if RRC is already processing one */
RRCTMR_DCH_FACH_CELL_SELECTION_TIMER, /* Timer started during cell selection
going DCH->FACH
*/
#ifdef FEATURE_RRC_FREQ_REDIRECTION_THRU_RB_AND_CU
RRCTMR_FACH_TO_FACH_PCH_CELL_SELECTION_TIMER, /* Timer started during cell selection
going FACH->FACH/PCH
*/
#endif /* FEATURE_RRC_FREQ_REDIRECTION_THRU_RB_AND_CU */
RRCTMR_L1_DEADLOCK_DETECT_TIMER, /* Timer to detect L1 deadlocks */
RRCTMR_DELAY_ERR_FATAL_TIMER, /* Timer to delay ERR_FATAL */
RRCTMR_DCH_PCH_CELL_SELECTION_TIMER, /* Timer started during cell selection
going DCH->CELL_PCH or DCH->URA_PCH*/
RRCTMR_T_3174_TIMER, /* T3174 GTOW PCCO timer */
RRCTMR_FREQ_SCAN_TIMER, /* Timer indicating if FREQ_SCAN should be
initiated or not */
RRCTMR_T_OOS_TIMER, /* Timer indicating if UE can not select a cell
after OOS detection */
RRCTMR_PHY_CHAN_FAILURE_TIMER, /* Phy Chan Failure timer used when initiating Cell Selec when
we get a phy_chan_failure after a rrc conn setup */
RRCTMR_DEEP_SLEEP_NO_SVC_TIMER, /* Time duration for which no service should be
returned to NAS */
RRCTMR_BPLMN_SRCH_TIMER, /* Timer for background PLMN search from 2G->3G */
RRCTMR_BPLMN_FREQ_SCAN_TIMER, /* Timer indicating if FULL FREQ SCAN should be
initiated or not for a 2G->3G BPLMN srch request */
#ifdef FEATURE_MANUAL_SEARCH_FREQ_SCAN_SKIP_TIMER
RRCTMR_MANUAL_PLMN_FREQ_SCAN_TIMER, /* Timer indicating if FULL FREQ SCAN
should be done or not for a Manual PLMN search */
#endif
RRCTMR_FREQ_REDIRECT_WAIT_TIMER, /* Timer for inter frequency redirection */
RRCTMR_CONN_MODE_OOS_TIMER, /* Timer for OOS in Connected Mode */
RRCTMR_WTOW_BPLMN_DRX_SRCH_TIMER, /* Timer for 3G->3G BPLMN DRX tmr expiry*/
RRCTMR_BPLMN_GUARD_SRCH_TIMER /* Max Timer to complete 3G->3G, 2G BPLMN search */

#ifdef FEATURE_INACTIVITY_HANDLING

, RRCTMR_INACTIVITY_TIMER /* Timer for inactivity handling */

#endif /* FEATURE_INTACTIVITY_HANDLING */

#ifdef FEATURE_SIX_HRS_SIB_CLEAN_UP
,RRCTMR_SIXHR_SIB_UPDATE_TIMER /* Timer for six hr sib clean up*/
#endif

#ifdef FEATURE_UMTS_UNIFORM_OOS_HANDLING
, RRCTMR_UNIFORM_OOS_SEARCH_TIMER
#endif

#ifdef FEATURE_DEEP_SLEEP_REL6_OUT_OF_SERVICE_ENHANCEMENT
, RRCTMR_CONN_MODE_OOS_INITIAL_NO_DS_TIMER
, RRCTMR_CONN_MODE_OOS_DS_TIMER
#endif

,RRC_SIB_CHANGE_GUARD_TIMER /* Timer for sib change guard handling */
,RRC_BCCH_MODIFICATION_TIMER /* Timer for BCCH Modification timer handling */

#ifdef FEATURE_MODEM_MBMS
#error code not present
#endif

#ifdef FEATURE_GTOW_REDIRECTION_AFTER_CONN_RELEASE
#error code not present
#endif
}

RRCTMR_BPLMN_GUARD_SRCH_TIMER_IN_MS定义在:
//rrccspi.h
/* Maximum time allowed for completing background PLMN search */
#define RRCTMR_BPLMN_GUARD_SRCH_TIMER_IN_MS 120000UL //ms

RRCTMR_BPLMN_GUARD_SRCH_TIMER定时器的启动和终止:
rrccsp_update_bplmn_srch_vars
{
...
switch(status) {
case WTOW_SEARCH_START:
MSG_HIGH("WTOW: BPLMN srch vars init to start BPLMN search", 0, 0, 0);
...
rrctmr_start_timer(RRCTMR_BPLMN_GUARD_SRCH_TIMER, RRCTMR_BPLMN_GUARD_SRCH_TIMER_IN_MS);
rrc_csp_int_data.bplmn_guard_srch_tmr_expired = FALSE;
...
break;

...

case WTOW_SEARCH_STOP:
case WTOW_SEARCH_ABORT:
MSG_HIGH("WTOW: Aborting/Stopping BPLMN search", 0, 0, 0);
...
if (!rrc_csp_int_data.bplmn_srch_tmr_expired) {
rrctmr_stop_timer(RRCTMR_WTOW_BPLMN_DRX_SRCH_TIMER);
rrc_csp_int_data.bplmn_srch_tmr_expired = TRUE;
}
if (!rrc_csp_int_data.bplmn_guard_srch_tmr_expired) {
rrctmr_stop_timer(RRCTMR_BPLMN_GUARD_SRCH_TIMER);
rrc_csp_int_data.bplmn_guard_srch_tmr_expired = TRUE;
}
...
break;
...
}

在QXDM LOG中查找是否有此定义器超时发生,可以搜索:
expired timer:35
如下所示:
Day 0   00:12:11.504 [4A]       0x1FEB Extended Debug Message         
rrctmr.c        591     H       Expired timer:35           Drop count = 0 

没有评论: