MTK通话函数流程

合集下载

【转】Andriod通话处理流程

【转】Andriod通话处理流程

【转】Andriod通话处理流程一、总览1、从java端发送at命令的处理流程。

2、unsolicited 消息从modem上报到java的流程。

3、猫相关的各种状态的监听和通知机制。

4、通话相关的图标变换的工作原理。

5、gprs拨号上网的通路原理。

6、通话相关的语音通路切换原理、震动接口。

7、通话相关的notification服务。

8、通话相关的各种server。

第一部分:从java端发送at命令的处理流程。

拨出电话流程:1、contacts的androidmanifest.xml android:process="android.process.acore"说明此应用程序运行在acore进程中。

DialtactsActivity的intent-filter的action属性设置为main,catelog属性设置为launcher,所以此activity能出现在主菜单中,并且是点击此应用程序的第一个界面。

dialtactsactivity包含四个tab,分别由TwelveKeyDialer、RecentCallsListActivity,两个activity-alias DialtactsContactsEntryActivity和DialtactsFavoritesEntryActivity 分别表示联系人和收藏tab,但是正真的联系人列表和收藏是由ContactsListActivity负责。

2、进入TwelveKeyDialer OnClick方法,按住的按钮id为:R.id.digits,执行placecall()Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED, Uri.fromParts("tel", number, null));intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);3、intert.ACTION_CALL_PRIVILEGED实际字符串为android.intent.action.CALL_PRIVILEGED,通过查找知道了packegs/phone下面的androidmanifest.xml中PrivilegedOutgoingCallBroadcaster activity-alias设置了intent-filter,所以需要找到其targetactivity为OutgoingCallBroadcaster。

volte信令流程

volte信令流程

VOLTE_MO_MT 流程1. VoLTE 语音呼叫路由原则1.1:VoLTE 主叫(1)VoLTE 用户附着在LTE,如果被叫是VoLTE 用户,则将呼叫路由至被叫归属IMS 域,由被叫归属IMS 进行被叫域选,根据域选结果进行后续路由;(2)VoLTE 用户附着在LTE,如果被叫是CS 用户,则呼叫从主叫归属IMS 域直接进入CS 域,由CS 域完成后续呼叫;(3)VoLTE 用户附着在CS,如果被叫是VoLTE 用户,通过被叫锚定方案将语音接续到被叫归属IMS 域,由被叫归属IMS 进行被叫域选,根据域选结果进行后续路由;(4)VoLTE 用户附着在CS,如果被叫是CS 用户,呼叫同现网CS 用户呼叫CS 用户。

1.2:VoLTE 被叫(1)主叫是VoLTE 用户,附着在LTE,被叫是VoLTE 用户,则将呼叫路由至被叫归属IMS 域,由被叫归属IMS 进行被叫域选,并根据域选结果进行后续路由;(2)主叫是VoLTE 用户,附着在CS,被叫是VoLTE 用户,通过锚定方案将语音接续到被叫归属IMS 域,由被叫归属IMS 进行被叫域选,根据域选结果进行后续路由;(3)主叫是CS 用户,被叫是VoLTE 用户,通过锚定方案将语音接续到被叫归属IMS 域,由归属IMS 进行被叫域选,根据域选结果进行后续路由;1.3:Precondition建立媒体PDP 上下文的过程称为资源预留。

对于双方的UE 而言,建立PDP 上下文的执行过程是相互独立的。

这意味着在资源被成功预留之前,根本无法保证所协商的媒体会话是否可以建立起来。

因此,Precondition 作用主要是为了保证在确认本地和主叫方的资源预留都已成功之前,被叫方不应振铃,以最大程度减少被叫方振铃但接听电话又失败的情况1.4:VoLTE 信令包过渡(((diameter or sip or gtpv2 or megaco or dns or camel or bicc or gsm_map) && !(diameter.cmd.code == 280)) && !(diameter.cmd.code == 257)) && !(diameter.cmd.code == 282)2.VoLTE 用户(LTE 附着)呼叫VoLTE 用户(LTE/CS 附着)2.1VoLTE 用户呼叫VoLTE 用户,主被叫均附着在LTE1主叫用户UE(O)的呼叫请求发送到主叫PCSCF。

mtk中的一些函数作用

mtk中的一些函数作用

1. HandleIdleScreenDigitEntry()
判断是否处飞行静音模式
2. IdleScreenDigitHandler()
ShowCategory16Screen()建立拨号输入框,并且注册每个按键的响应
执行数字键‘1’的响应:MMI_key_1_down()
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]信息
装载消息结构,发送消息:PRT_USSDVSS_REQ(到L4层分析号码)
L4层分析号码后,返回消息:PRT_USSDVSS_RSP,进入CBACK:
1.PsCBackSetCallFeatures()
根据拨出号码,设置到PHB查找,设置gPhoneNumberStruct
判断是否是紧急呼叫:mmi_ucm_is_sos_number()--CheckValidEmergencyNo1()
判断是否是空号码
判断是否已经存在SOS
判断UCM是否忙:mmi_ucm_is_busy()--没有需要处理的Call,没有OUTGOING, INCOMING的group,没有emergency call。
SetCurrentState(CM_OUTGOING_STATE);
AddNewCallInfo()
MakePsInitiateCall((PU8)MsgStruct, (void*)OutgoingCallConnected);

MTK Dialing Screen流程

MTK Dialing Screen流程

◆ 拨号界面1)坐标调整wgui.h设置断点,跟踪IdleScreenDigitHandler()--ÆShowCategory16Screen()--Æset up_dialing_keypad(&dialing_keypad)Wgui_inputs.c中setup_dialing_keypad()函数将wgui.h中各个赋的值赋给结构变量dialing_keypad的各个成员变量附:(调试、跟踪过程)1.Dialing inputbox(如何画拨号数字框及显示拨号数字图片)在dm_redraw_category_screen处下一个断点,跟踪,画控件DM_DIALER_INPUT_BOX1(拨号输入框)跟进函数dm_setup_and_draw_dialer_inputbox()里去,看到函数show_dialer_inputbox()跟进去,看到如下代码:gui_show_dialer_input_box(&MMI_dialer_inputbox);再跟进去:gui_show_dialer_input_box_ext(b, (-1), (-1));1.Dialing inputbox(如何在拨号框画拨号数字图片)进入ShowCategory16Screen()1)wgui_setup_dialer_inputbox() 画拨号界面输入框2)产生触摸屏事件后,拨号界面显示(例:触摸屏按下按钮8后,产生一个MMI_PEN_EVENT_DOWN事件,显示数字键8的拨号图片在拨号框)◆注册触摸屏事件(当触摸屏产生MMI_PEN_EVENT_DOWN、MMI_PEN_EVENT_UP、MMI_PEN_EVENT_MOVE、MMI_PEN_EVENT_REPEAT、MMI_PEN_EVENT_LONG_TAP、MMI_PEN_EVENT_ABORT等动作时,执行的函数)◆以MMI_PEN_EVENT_DOWN事件为例:进入Cate16CategoryControlAreaPenDownHandler()函数此处,产生了一个KEY_EVENT_DOWN事件(此处key_type常用的分为KEY_EVENT_DOWN,KEY_EVENT_UP,KEY_EVENT_LONG_PRESS,值分别为0,1,2)此处赋值后,dialing_keypad.key_type为选定的按键值,此处值为8跟进去ExecuteDialKeyPadKeyHandler(),此函数执行拨号界面的按键事件判断如果按键在数字键区[1,*)之内,播放按键音,执行当前按键事件句柄ExecuteCurrKeyHandler(),开始单步跟踪。

mtk手机听筒声音调节

mtk手机听筒声音调节

mtk手机听筒声音调节
下面是连上m888点read读出的数据。

出现绿色pass字样且下方显示read XXXX successful表示读取成功模式选择有三种正常模式耳机模式免提模式修改的时候选的是正常模式,手机设置的情景模式是一般模式
参数说明:
Llevel0-level6代表手机上的七级音量,下方数字代表音量的大小speech调整指听筒音量调整
Melody调整指喇叭音量调整(也就是外放喇叭)
side tone 是所谓的魔音设置,说是噪音也可以
mic调整即送话器调整
试的时候,因为我通话中音量设置是最高,也就是level6,所以我只修改了speech中level6的数据; 结果是:把数据修改成50,明显感觉到声音变小,把数据修改成300,明显感觉声音变大。

因为没有长时间测试,目前尚不知道,数据修改得太大会不会对听筒产生损害。

所以再重复提醒一次,请谨慎。

可以边打电话边修改,只要一按ADJ即时生效。

补充:修改值超过255后,再重新读取,值仍然为255.但改成270无杂音(此值比较适合),改成300有杂音。

说明超过255的数值还是起作用的,软件显示255可能是因为是软件是单字节读取。

超过255只显示
255.
修改耳机听歌时的音量
选择模式为耳机模式修改melody里面的数据(耳机接电话的音量是修改speech里面的数据)
比较合适完美数据
melody调整:16 48 80 112 147 190 210。

mtkclient用法

mtkclient用法

mtkclient是一个用于与MTK芯片进行通信的工具,可以用于下载、上传文件以及读取和写入注册表等操作。

使用mtkclient时,需要按照以下步骤进行操作:
1.连接手机和电脑。

使用mtkclient时,需要将手机和电脑进行连接。

可以通
过USB数据线或网络连接等方式进行连接。

2.打开mtkclient窗口。

在电脑中打开mtkclient窗口,可以通过在命令行输
入mtkclient命令或者在应用商店下载mtkclient应用程序等方式打开。

3.输入命令。

在mtkclient窗口中,可以根据需要输入相应的命令来下载、上
传文件以及读取和写入注册表等操作。

例如,输入“mtkclient r boot,vbmeta boot.img,vbmeta.img”命令可以读取boot和vbmeta文件。

4.查看输出信息。

在输入命令后,可以在mtkclient窗口中查看输出信息,以
确定操作是否成功。

如果操作成功,将显示相应的提示信息。

5.断开连接。

在完成相应的操作后,需要断开手机和电脑的连接。

可以通过
点击mtkclient窗口中的“断开连接”按钮或者在命令行中输入相应的命令来断开连接。

需要注意的是,使用mtkclient时需要按照相应的操作步骤进行操作,并且需要保证手机和电脑的连接稳定可靠。

同时,也需要根据实际情况进行相应的调整和处理。

MTK音频参数调试方法

MTK音频参数调试方法

音频参数调试方法:
输入*#3646633#进入工程模式,进入第三项“音频”.
菜单中“正常”是普通使用不插耳机、不开免提地情况下地参数,
“LoudSp Mode”是通话时开免提地情况下地参数,
“Headset Mode”是插入耳机时地参数;
每个模式中又有6个具体参数:
“speech”是通话音量,在“正常”模式下调speech

应.
量3
不要超过208,凡调整speaker时参数不要超过148,调整mic 时参数不要超过232.
另外,如果mic、receiver音量还是达不到要求,可以在“音频”菜单地“语音增强”选项地“正常”下,调整参数7,参数7是由两位16进制数转换地10进制数,两位16进制数地前一位是receiver参数,后一位是mic参数.如:想给receiver增大6、mic增大11,则对应16进制数为6B,转
换为10进制数是107,那参数7中就输入107;再如想给receiver增大4、mic增大3,则对应16进制数为43,转换为10进制数是67,那参数7中就输入67.。

MTK应用入门

MTK应用入门

MTK MMI应用入门:1、初始化例程,注册一系列处理函数,比如协议事件处理函数、按键事件处理函数、消息事件处理函数、选中菜单处理函数等等。

2、选中菜单处理函数(Highlight Handler functions)。

即根据用户的定义,选择某菜单时需要执行的函数。

3、完成入口函数(Entry functions)。

即当前应用被其他应用覆盖,其他应用结束后回到当前应用所需要调用的函数。

4、完成退出函数(Exit functions)。

即当前应用被其他应用覆盖时,为保存当前应用的一些现场数据而需要调用的函数。

5、完成业务逻辑,在不同screen之间的进行切换调用。

MMI 采用screen流的方式进行屏幕之间的转换,进入新的screen之前,执行被覆盖screen 的exit函数,并将相关信息存入历史记录,然后进入新的screen, 从新的screen退出后从history数据库取出上一screen的信息,进入其entry函数。

以下代码片段的API都是系统提供的,可在头文件中找到其原形。

初始化函数代码片断://以下两个API参考eventGprot.hV oid MMSInitialization(void){//设事件处理函数如下闹钟超时处理时间SetProtocolEventHandler(AlmExpiryHandler, MSG_ID_MMI_EQ_ALARM_IND);//设置Highlight Handler函数当点mms菜单后调用相应函数HighlightMMSHandler SetHiliteHandler (MESSAGES_MENU_MMS_MENUID, HighlightMMSHandler);}入口函数代码片断:// 本例为进入短信主菜单的处理函数相关接口函数可在对应的头文件中查找void EntrySMSMainMenuList (void){U8* guiBuffer;U16 nStrItemList[MAX_SUB_MENUS];U16 numItems;U16 itemIcons[MAX_SUB_MENUS];U8* popUpList[MAX_SUB_MENUS];U32 menuItemId=-1;U32 menuItemId1=-1;U32 maskingByte=-1;U8** pPopUpList=NULL;//进入入口函数必须首先调用EntryNewScreen, 该函数执行上一屏幕的退出函数,并记录当前屏幕的入口和退出函数EntryNewScreen(SCR_ID_MSG_SMS_MAIN_MENU, mmi_msg_exit_generic, EntrySMSMainMenuList, NULL);//设置当前screen IDSetMessagesCurrScrnID(SCR_ID_MSG_SMS_MAIN_MENU);//获取当前screen 的gui buffer,用于被当前screen被覆盖后存入历史记录guiBuffer = GetCurrGuiBuffer (SCR_ID_MSG_SMS_MAIN_MENU);//设置当前screen的父menu IDSetParentHandler (MESSAGES_MENU_SMS_MENUID);//注册Highlighthandler处理函数RegisterHighlightHandler (ExecuteCurrHiliteHandler);//获取当前菜单子菜单数目numItems = GetNumOfChild (MESSAGES_MENU_SMS_MENUID);//获取子菜单的stringGetSequenceStringIds(MESSAGES_MENU_SMS_MENUID, nStrItemList);//获取子菜单IconGetSequenceImageIds(MESSAGES_MENU_SMS_MENUID, itemIcons);mmi_msg_set_msg_num_hint (msgbox_info.totalinbox, msgbox_info.totaloutbox, msgbox_info.totaldraftbox);ConstructHintsList(MESSAGES_MENU_SMS_MENUID, popUpList);mmi_msg_set_msg_menu_highlight_handler();if (g_msg_cntx.msg_init){pPopUpList = popUpList;}else{pPopUpList = NULL;}menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_INBOX_MENUID);if(menuItemId!=-1){if(IsResetCSPGroupService(CSP_TELESERVICES_SERVICE_GROUP,CSP_SM_MT)){ResetBit(maskingByte,menuItemId/*1*/);}}menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_WMESSAGE_MENU_ID);menuItemId1=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENU ID, MESSAGES_MENU_OUTBOX_MENUID);if(menuItemId!=-1 && menuItemId1!=-1){if(IsResetCSPGroupService(CSP_TELESERVICES_SERVICE_GROUP,CSP_SM_MO)) {ResetBit(maskingByte, menuItemId/*0*/);ResetBit(maskingByte,menuItemId1/*2*/);}}menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_CB_MENUID);if(menuItemId!=-1){if(IsResetCSPGroupService(CSP_TELESERVICES_SERVICE_GROUP,CSP_SM_CB)) ResetBit(maskingByte,menuItemId/*6*/);}menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_VMAIL_MENUID);if(menuItemId!=-1){if(IsResetCSPGroupService(CSP_V ALUE_ADDED_SERVICES_SERVICE_GROUP,CSP_ VPS))ResetBit(maskingByte,menuItemId/*5*/);}MaskStringItems(popUpList,(U8)numItems,maskingByte);MaskItems(itemIcons,(U8)numItems,maskingByte);numItems=MaskItems(nStrItemList,(U8)numItems,maskingByte);MaskHiliteItems(MAIN_MENU_MESSAGES_MENUID, maskingByte);g_msg_cntx.currBoxIndex=0;// show category 函数,将上面准备好的参数传递进去,show当前screen ,show category 系统已经提供了足够多风格的函数选择,可根据需要调用对应的showcategory函数.ShowCategory52Screen (STR_SMS_MENUENTRY, IMG_SMS_ENTRY_SCRN_CAPTION,STR_GLOBAL_OK, IMG_SMS_COMMON_NOIMAGE,STR_GLOBAL_BACK, IMG_SMS_COMMON_NOIMAGE,numItems,nStrItemList, itemIcons,(U8 **) pPopUpList ,0, 0,guiBuffer );//注册右软件处理函数返回键SetRightSoftkeyFunction (GoBackHistory, KEY_EVENT_UP);//同上SetKeyHandler (GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);}退出函数代码片断:退出函数在进入函数的EntryNewScreen中第二个参数被注册,进入当前screen时执行上仪screen的exit函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

来电:1. PsCBackCallIncoming()ProcessIncomingEvents(CM_PS_CALL_INCOMING, info);2.ProcessIncomingCallEvent(info)AddNewCallInfo()在这里,cm_p->state_info.AllCalls[index].group_id = GetUnUsedGroupID();如果是MO,那么就先设置为255,然后在PsCBackSetCallFeature( )中在设置为GetUnUsedGroupID()CMSetupAlertForMT(); 准备提示信息3. mmi_gsm_ring_ind()mmi_ucm_ring_ind_struct ring_ind;装载ring_indmmi_ucm_dispatch_ind(MMI_UCM_RING_IND, (void *)&ring_ind);4. mmi_ucm_ring_ind(void *act_struct) 参数就是上面的ring_ind如果(当前没有OUTGOING, INCOMING group,不存在紧急电话,不是黑名单号码){mmi_ucm_sync_call_list(ind->call_list); 同步cm_p与g_ucm_p把参数带进来的消息拷贝到g_ucm_p->mo_mt_display和g_ucm_p->call_misc.l4c_info中mmi_ucm_entry_marker()mdi_audio_stop_all()}否则 //自动拒接来电{mmi_ucm_pre_send_req(MMI_UCM_AUTO_REJECT, &(ind->uid_info), NULL, NULL);mmi_ucm_pre_send_req(MMI_UCM_FORCE_RELEASE, &(ind->uid_info), NULL, NULL);}5. mmi_ucm_entry_incoming_call()根据g_ucm_p->mo_mt_display,设置一些提示信息:tone id, path, image……ShowCategory17Screen()注册按键相应:任意键接听:mmi_ucm_incoming_call_sendkey()右软件,END键拒接:mmi_ucm_incoming_call_endkey()SEND键接听:mmi_ucm_incoming_call_endkey()mmi_ucm_play_incoming_tone()分2中:ring tone, wait tone拒接来电1.mmi_ucm_incoming_call_endkey()mmi_ucm_stop_incoming_tone()如果已经启动自动接听,则停止定时器UCM_AUTO_ANSWER_TIMERmmi_ucm_end_single_action_with_index(groupIndex, 0)2. mmi_ucm_end_single_action_with_index( )mmi_ucm_id_info_struct actionId;显示processing….装载actionIdmmi_ucm_pre_send_req(MMI_UCM_END_SINGLE, &actionId, NULL, NULL);3. mmi_ucm_pre_send_req( )mmi_ucm_single_call_struct singleReq;用上面的actionId装载singleReqmmi_ucm_send_req(op_code, first_ptr->call_type, &singleReq);4. mmi_ucm_send_req( )mmi_gsm_ucm_act_req(MMI_UCM_END_SINGLE, act_struct);5. mmi_gsm_ucm_act_req( )设置:cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL, cm_p->ucm_operation = MMI_GSM_UCM_END_SINGLEmmi_gsm_end_single(act_struct);6. mmi_gsm_end_single( ) 所有的挂断电话都是在这里处理由于此时只有一通来电,因此执行:else if(GetTotalCallCount() == 1 && GetCurrentState() == CM_INCOMING_STATE) 这个分支SetCallflag(CM_HANGUP_REQUESTED)MakePsAthRequest((void*)PsCBackIncomingCallRejected);7. MakePsAthRequest( )发送消息:PRT_ATH_REQathReq->op_code = L4C_DISCONNECT_NONE;L4C返回消息:PRT_ATH_REQ_SUCCESS,进入CBACK:1. PsCBackIncomingCallRejected( )ProcessIncomingEvents(CM_PS_INCOMING_CALL_REJECTED, info); J进入状态机g_bUserReject = TRUE;gIncomingCallDroppedFlag = TRUE2. ProcessIncomingCallRejected()装载cm_p->disc_callResetCallflag(CM_HANGUP_REQUESTED)设置CM的状态PurgeIncomingCallStructure()清除了该来电在cm_p中的信息。

但是在cm_p->disc_call中仍然存在mmi_gsm_release_ind(GetCallEndCause());mmi_gsm_end_single_rsp(TRUE, NULL);3.mmi_gsm_release_ind( )mmi_ucm_release_ind_struct release_ind;用cm_p->disc_call来装载release_indmmi_gsm_get_call_list(release_ind.call_list); 获取cm_p中的电话信息mmi_ucm_dispatch_ind(MMI_UCM_RELEASE_IND, (void *)&release_ind);4. mmi_ucm_release_ind()mmi_ucm_stop_inband_tone();mmi_ucm_stop_incoming_tone();因为是来电,start_time时间无效,因此log call装载g_ucm_p->call_endmmi_ucm_sync_call_list(ind->call_list); 同步cm_p与g_ucm_p。

此时,2个变量中除了disc_call和call_end,再也没有其他关于被挂断电话的信息了。

mmi_ucm_entry_call_end()提示信息:结束(需要利用g_ucm_p->call_end的信息)恢复一些必要的变量到原始状态清除g_ucm_p->call_end信息5. mmi_gsm_end_single_rsp()mmi_ucm_act_rsp_struct end_single_rsp;设置:cm_p->ucm_action_type = MMI_GSM_UCM_NO_ACTION, cm_p->ucm_operation = MMI_GSM_UCM_IDLEmmi_gsm_get_call_list(end_single_rsp.call_list);ResetRedialAttempts() 清除自动重拨信息mmi_ucm_dispatch_rsp(MMI_UCM_END_SINGLE, MMI_UCM_VOICE_CALL_TYPE, (void *)&end_single_rsp);6. mmi_ucm_end_act_rsp()mmi_ucm_sync_call_list(rsp->call_list);mmi_ucm_set_process_state(-1, -1, MMI_UCM_DO_PROCESS_STATE, MMI_UCM_COMP_PROCESS_STATE);mmi_ucm_set_process_state(-1, -1, MMI_UCM_COMP_PROCESS_STATE, MMI_UCM_IDLE_PROCESS_STATE);拒接接听1.mmi_ucm_incoming_call_sendkey()mmi_ucm_stop_incoming_tone();判断该如何去接听2. mmi_ucm_accept_action()mmi_ucm_id_info_struct actionId;显示processing…..g_ucm_p->call_misc.curr_action = MMI_UCM_ACCEPT;装载actionId;mmi_ucm_pre_send_req(MMI_UCM_ACCEPT, &actionId, NULL, NULL);3. mmi_ucm_send_req(op_code, first_ptr->call_type, &singleReq);4. mmi_gsm_ucm_act_req(MMI_UCM_ACCEPT, act_struct);设置cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL, cm_p->ucm_operation = MMI_GSM_UCM_ACCEPT5. mmi_gsm_accept(act_struct)MakePsCallAcceptIncoming((void*)PsCBackIncomingCallAccepted);发送消息:PRT_INCOMINGCALL_ACCEPT_EVENTL4返回消息PRT_INCOMINGCALL_ACCEPT_SUCCESS,进入CBACK:1.PsCBackIncomingCallAccepted()ProcessIncomingEvents(CM_PS_INCOMING_CALL_CONNECTED, info); 进入状态机2. ProcessAcceptIncomingCall()设置CM的状态SetIncomingCallStateActive();mmi_gsm_accept_rsp(TRUE, NULL);3. mmi_gsm_accept_rsp( )mmi_ucm_act_rsp_struct accept_rsp;设置cm_p->ucm_action_type = MMI_GSM_UCM_NO_ACTION, cm_p->ucm_operation = MMI_GSM_UCM_IDLEmmi_gsm_get_call_list(accept_rsp.call_list); 获取cm_p电话信息mmi_ucm_dispatch_rsp(MMI_UCM_ACCEPT, MMI_UCM_VOICE_CALL_TYPE, (void *)&accept_rsp);4. mmi_ucm_accept_act_rsp(act_struct);Log callmmi_ucm_sync_call_list(rsp->call_list); 同步cm_p与g_ucm_p mmi_ucm_set_process_state(-1, -1, MMI_UCM_DO_PROCESS_STATE, MMI_UCM_COMP_PROCESS_STATE);mmi_ucm_set_process_state(-1, -1, MMI_UCM_COMP_PROCESS_STATE, MMI_UCM_IDLE_PROCESS_STATE);mmi_ucm_go_back_screen_check();5. mmi_ucm_go_back_screen_check() 此时这个来电信息已经变成ACTIVEmmi_ucm_tab_highlight(); 设置显示的tab信息mmi_ucm_entry_in_call();笔记:1. 先看个重要的数据结构MMI_PHB_LLOKUP_NODE_STRUCT LookUpTable[MAX_LLOKUP_TABLE_COUNT];Typedef struct{U16 store_index; /*Store Index of Phonebook,Begin from 0 */U32 number;}MMI_PHB_LOOKUP_NODE_STRUCT;注意此处存储的number的int 值,也即是atol(PS8) number转化后的值。

相关文档
最新文档