idlescreen的一些函数的说明

一、进入ILDE界面

1.EntryIdleScreen()    

2.mmi_idle_entry_idle_screen()

       注册按键:HandleIdleScreenDigitEntry()

       IdleSetLRKey()注册左软件EntryMainMenuFromIdleScreen(),右软件mmi_phb_idle_enter_phb_list()

       注册SEND键CHISTGetCallLogBySENDKey()

       注册相机按键mmi_camera_entry_app_screen()

       注册声音按键SetDefaultVolumeKeyHandlers()    

二、按下数字键(123456)

1. HandleIdleScreenDigitEntry()

       判断是否处飞行静音模式

2. IdleScreenDigitHandler()

       ShowCategory16Screen()建立拨号输入框,并且注册每个按键的响应

       执行数字键‘1’的响应:MMI_key_1_down()

       注册      左软件IdleDialPadSavePhoneBook(),SEND键IdleDialPadCall (),#键IdleAbbrevDialling(),

                     速拨IdleCallSpeedDialOnLongPress(),语音DialVoiceMail()

 

三、按下SEND键拨号

1. IdleDialPadCall()

       gTempUseIPNum——

       判断是否是ssc_table2[]中号码()

       mmi_idle_remove_dialer_screen_exit_handler()


2. MakeCall()

       在初始化函数InitCallInfo( )中设置了cm_p->ucm_action_type = MMI_GSM_UCM_NO_ACTION,cm_p->ucm_operation = MMI_GSM_UCM_IDLE

       因此: mmi_ucm_app_make_call(MMI_UCM_VOICE_CALL_TYPE, (U8*)strNumber);

             return;

 

3. mmi_ucm_app_make_call()

       把拨号信息装载到g_ucm_p->mo_info中(module_id, dial_type, dial_num.num_uri,只有号码,暂时还没有姓名)

 

4. mmi_ucm_outgoing_call_sendkey()

       判断是否是飞行模式mmi_bootup_get_active_flight_mode()

       判断UCM是否存在有待处理的CALL:mmi_ucm_is_pending_action()

       判断是否是call related supplementary service:mmi_ucm_is_crss()

       判断是否是紧急呼叫:mmi_ucm_is_sos_number()--CheckValidEmergencyNo1()

       判断是否是空号码

       判断是否已经存在SOS

       判断UCM是否忙:mmi_ucm_is_busy()--没有需要处理的Call,没有OUTGOING, INCOMING的group,没有emergency call。

       判断是否可以显示拨号选项:mmi_ucm_dial_option()

 

       以上都排除之后,存在以下3中拨号:

       (1)是SS_OPERATION:mmi_ucm_dial_action()

       (2)已经存在DATA/CSD且本次拨号非DATA/CSD,或者已经存在非DATA/CSD且本次拨号是DATA/CSD:(即:DATA/CSD与正常call不能同时存在)

                     g_ucm_p->mo_info.is_wait_dial = TRUE;

          mmi_ucm_end_all_action();

       (3)已经有一组group电话状态为MMI_UCM_ACTIVE_STATE:mmi_ucm_hold_and_dial_action()

       (4) mmi_ucm_dial_action( )

 

       如果拨号失败,设置自动重拨。


5. mmi_ucm_dial_action()

       S32 freeTab = g_ucm_p->call_list.num_group;

       mmi_ucm_id_info_struct actionId;                                 这个变量传到下一个函数去


       g_ucm_p->call_misc.curr_action = MMI_UCM_DIAL;

       装载g_ucm_p->call_list.group_info[freeTab]信息(group_id, call_type, call_state)

       装载g_ucm_p->call_list.group_info[freeTab].call_info[0]信息

       g_ucm_p->call_list.group_info[freeTab].num_call++;

g_ucm_p->call_list.num_group++;

 

       装载actionId

       mmi_ucm_pre_send_req(MMI_UCM_DIAL, &actionId, NULL, &g_ucm_p->mo_info);


6. mmi_ucm_pre_send_req( )           所有关于CALL的请求都要走这里

       mmi_ucm_dial_req_struct dialReq;

       装载dialReq

       mmi_ucm_send_req(op_code, first_ptr->call_type, &dialReq);


7. mmi_ucm_send_req( )                  所有关于CALL的请求都要走这里

       mmi_gsm_ucm_act_req(MMI_UCM_DIAL, act_struct);


8. mmi_gsm_ucm_act_req( )

       设置了cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL,cm_p->ucm_operation = MMI_GSM_UCM_DIAL

       mmi_gsm_dial(act_struct)


9. mmi_gsm_dial( )

       MakeCall((PS8)dial_number);


10.MakeCall( )

       此时,cm_p->ucm_operation = MMI_GSM_UCM_DIAL

       判断是否是紧急拨号

       判断号码是否为空,是否含有非法字符

       MakeCallEx(strNumber, TRUE, CSMCC_VOICE_CALL);


11.MakeCallEX( )

       装载UnicodeDTMFPadCallBuffer

       CheckShortCutOrCall(call_type);


12. CheckShortCutOrCall( )

       装载DTMFPadCallBuffer

       判断是否含有#

       判断是否是短号码

       MakeMyCall((PS8) dtmfBuf,call_type)


13. MakeMyCall( )

       OUTGOING_CALL outCall;

       装载outCall。(号码,类型)

       MakeOutgoingcall(outCall);


14. MakeOutgoingcall( )

       OutgoingProcessCMEvent(CM_KB_OUTGOINGCALL, &MsgStruct); 进入状态机


15. ProcessKBOutgoingEvent()

       装载gCurrOutcall(号码和类型)

       switch (GetCurrentState())

              case CM_IDLE_STATE:

                     SetPreviousState(CM_IDLE_STATE);

             SetCurrentState(CM_OUTGOING_STATE);

                     AddNewCallInfo()

                     MakePsInitiateCall((PU8)MsgStruct, (void*)OutgoingCallConnected);


16. MakePsInitiateCall( )

       获取IP number。不使用为NULL

       MakePsSSVUSSDReq(MsgStruct, (PU8) IPNum, length, (void*)PsCBackSetCallFeatures);


17. MakePsSSVUSSDReq( )

       装载消息结构,发送消息:PRT_USSDVSS_REQ(到L4层分析号码)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值