脚本都在sdssscr.c里面
1、对于acquisition event来说:
SDSS_EVT_IS_XXX_ACQ(event)判断是否为acquisition event
ss_ptr->prev_act = *act_ptr;记住先前的action,后面可能会有判断是否两个action相同
if(ss == SD_SS_MAIN)
调用sdss_event_proc( event, iact_ptr );处理事件,这个处理留到后面讲
ss_ptr->ss_state = iact_ptr->ss_state;更新他的状态到SDSS_STATE_ACQ
然后有个判断switch( iact_ptr->act )对返回的事件类型判断
此时应该是case SDSS_IACT_ACQUIRE:
sd_ss_acq_update_pre()
sdsr_list_put_ref()将SDSR_SCHED_LST列表ref放在SDSR_ACQ_SYS列表项目里
ss_ptr->acq_list = list;
ss_ptr->acq_pos = pos;
ss_ptr->acq_mode = acq_mode;
记住获取的list 和pos、 acq_mode参数以
之后switch( sr_ptr->sys.mode )判断获取的模式:
有SD_MODE_CDMA
SD_MODE_AMPS
SD_MODE_HDR
SD_MODE_WCDMA
SD_MODE_GW等等
根据获取模式设置band,mode,chan等参数
之后会打印出action的log信息
sdss_event_proc函数的处理流程:
这里只说获取事件的处理
sdss_is_event_allowed判断当前是否允许处理这个事件
sdss_eng_stack_proc调用engines process the event,他处理完后判断下一个状态sdss_state_next
如果 if( rtrn_iact_ptr->act == SDSS_IACT_ACQUIRE )返回的事件是获取则:
ss_ptr->acq_list = rtrn_iact_ptr->prm.acq.list;
ss_ptr->acq_pos = rtrn_iact_ptr->prm.acq.pos;
sd_ss_ind_cdma_acq_failed_pilot( NULL ) --》sd_ss_event_proc(SD_SS_MAIN, SDSS_EVT_CDMA_FAILED_PIOLT, rtrn_act_ptr (==null));
sdss_event_proc(event, iact_ptr 这里不等于NULL)