首页 MTK_短信_研究开发

MTK_短信_研究开发

举报
开通vip

MTK_短信_研究开发本文旨在记录开发中遇到的问题和使用到的资源,方便查找和定位。文档中添加的注释和描述属于个人理解,仅供参考,请以MTK文档《MMI_DD_Messages》为准。(V2009-04-10) ​ 1、全局变量和资源 ​ 短信箱容量 [\custom\ps\IWIT23_07A_PMJ_BB\customer_ps_inc.h] #define CM_SMS_MAX_MSG_NUM 400 // 手机 + SIM卡 [\custom\common\PLUTO_MMI\nvram_common_defs.h] #defin...

MTK_短信_研究开发
本文旨在 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 开发中遇到的问题和使用到的资源,方便查找和定位。文档中添加的注释和描述属于个人理解,仅供参考,请以MTK文档《MMI_DD_Messages》为准。(V2009-04-10) ​ 1、全局变量和资源 ​ 短信箱容量 [\custom\ps\IWIT23_07A_PMJ_BB\customer_ps_inc.h] #define CM_SMS_MAX_MSG_NUM 400 // 手机 + SIM卡 [\custom\common\PLUTO_MMI\nvram_common_defs.h] #define NVRAM_EF_SMSAL_SMS_TOTAL 200 // 手机 ​ 信箱和索引表 [\custom\common\mmi_msg_context.c] unsigned short mmi_frm_sms_inbox_list[CM_SMS_MAX_MSG_NUM];// 收件箱索引表 unsigned short mmi_frm_sms_outbox_list[CM_SMS_MAX_MSG_NUM]; // 发件箱索引表 mmi_frm_sms_msgbox_struct mmi_frm_sms_msg_box[CM_SMS_MAX_MSG_NUM];// 信箱 [\plutommi\mmi\miscframework\miscframeworkinc\SMSApi.h] mmi_frm_sms_app_msgbox_enum // 信箱类型枚举 MMI_FRM_SMS_APP_INBOX = 0x02, MMI_FRM_SMS_APP_OUTBOX = 0x04 [\plutommi\mmi\miscframework\miscframeworkinc\SMSStruct.h] mmi_frm_sms_msgbox_enum // 信箱类型枚举 MMI_FRM_SMS_INBOX = 0x02, MMI_FRM_SMS_OUTBOX = 0x04, 索引表mmi_frm_sms_inbox_list和索引表mmi_frm_sms_outbox_list,分别对应【消息】菜单中的【收件箱】和【发件箱】。 信箱mmi_frm_sms_msg_box 保存的只是短信副本,用于显示和其它处理,直接更改其数据对实际的短信无效,必须向L4层发送消息才能生效。 通过索引列表(mmi_frm_sms_xxbox_list)在短信箱菜单和短信之间建立关联: > 菜单 > 消息 > 收件箱 > 短信1 --> mmi_frm_sms_inbox_list[itemIndex] --> smsIndex > 短信2 [...] > 短信n ​ 短信箱(字串/屏幕)资源 [plutommi\mmi\Messages\MessagesInc\MessagesResourceData.h] STR_INBOX_MENUENTRY // “收件箱” STR_OUTBOX_MENUENTRY, // “发件箱” SCR_ID_MSG_INBOX_LIST // 收件箱屏 SCR_ID_MSG_OUTBOX_LIST,// 发件箱屏幕 STR_SCR6028_CAPTION // “消息选单” ​ 2、发短信 ​ 2.1、发送过程 SmsMoMtGuiInterface SmsPsHandler SMSCore SMSMsg 1 mmi_msg_highlight_done 短信编辑[完成] mmi_msg_entry_send_option 进入[发送选项] 2 mmi_msg_highlight_send_only 高亮[(仅)发送]选项 3 mmi_msg_send_msg_to_only_entry 进入[(仅)发送]选项 4 mmi_msg_send_msg_req mmi_frm_sms_send_sms mmi_frm_sms_write_action mmi_frm_sms_read_action 5 mmi_frm_sms_pre_send_sms 6 mmi_frm_sms_send_sms_req mmi_frm_sms_send_sms_seg [... ...] 7 mmi_frm_sms_send_sms_rsp mmi_msg_send_msg_rsp HighlightWMessageHandler 回到[写短信]菜单项 ​ 2.2、发送过程详解: 2.2.1、短信编辑【完成】 短信编辑编辑【完成】后,按[完成]键盘进入发送选项单: [SmsMoMtGuiInterface.c] void mmi_msg_highlight_done(void) { mmi_msg_highlight_generic( STR_GLOBAL_OK, IMG_GLOBAL_OK, STR_GLOBAL_BACK, IMG_GLOBAL_BACK, mmi_msg_entry_send_option, GoBackHistory); [...] } 进入[发送选项],将默认发送选项设为(仅)发送(SEND ONLY): [SmsMoMtGuiInterface.c] void mmi_msg_entry_send_option(void) { [...] if (g_msg_cntx.sendMessageCase != SEND_CASE_SEND_FROM_OTHER_APP) { g_msg_cntx.sendMessageCase = SEND_CASE_SEND_ONLY; /* reset */ } [...] } 2.2.1、选择发送选项 以(仅)发送(SEND ONLY)为例。在高亮事件中注册ENTRY函数: [SmsMoMtGuiInterface.c] void mmi_msg_highlight_send_only(void) { #ifdef __MMI_SEND_BY_SEARCH_NAME__ [...] #else /* __MMI_SEND_BY_SEARCH_NAME__ */ mmi_msg_highlight_generic( STR_GLOBAL_OK, IMG_GLOBAL_OK, STR_GLOBAL_BACK, IMG_GLOBAL_BACK, mmi_msg_send_msg_to_only_entry, GoBackHistory); #endif /* __MMI_SEND_BY_SEARCH_NAME__ */ } 2.2.2、进入【(仅)发送】选项 [SmsMoMtGuiInterface.c] void mmi_msg_send_msg_to_only_entry(void) { [...] g_msg_cntx.msg_send_info.CurrSendSmsNumbers = 0; g_msg_cntx.msg_send_info.TotalSendSmsNumbers = 1; [...] else if (g_msg_cntx.sendMessageCase != SEND_CASE_SEND_FROM_PHB) { memset(g_msg_cntx.smsPhoneNumber, 0, (MAX_DIGITS + 1) * ENCODING_LENGTH); [...] } mmi_msg_send_msg_req((U8*) g_msg_cntx.smsPhoneNumber, MMI_FRM_SMS_INVALID_INDEX, 0); } 2.2.3、设置短信发送请求标志 [SmsPsHandler.c] void mmi_msg_send_msg_req(U8 *number, U16 replyindex, U8 hidenumscreen) { mmi_frm_sms_send_struct *sendData = OslMalloc(sizeof(mmi_frm_sms_send_struct)); memset((S8*) sendData, 0, sizeof(mmi_frm_sms_send_struct)); #ifdef __MMI_UNIFIED_MESSAGE__ if (!(mmi_um_get_current_msg_box_type() == UM_MSG_BOX_TYPE_UNSENT && GetExitScrnID() == SCR_ID_MSG_OUTBOX_OPTION)) #else if (GetMessagesCurrScrnID() != SCR_ID_MSG_OUTBOX_SEND_OPTION) #endif { sendData->sendrequire = MMI_FRM_SMS_SAVE_AFTER_FAIL; /*ML: to control if we can release EMS or not*/ } [...] mmi_frm_sms_send_sms(mmi_msg_send_msg_rsp, MOD_MMI, sendData); OslMfree(sendData); } 2.3.4、注册短信发送回调函数 注册短信发送回调函数(callback, mmi_msg_send_msg_rsp), 调用短信发送预处理函 数(action, mmi_frm_sms_pre_send_sms) [SMSCore.c] void mmi_frm_sms_send_sms(PsFuncPtrU16 callback, module_type mod_src, mmi_frm_sms_send_struct *sendData) { mmi_frm_sms_send_struct *data = OslMalloc(sizeof(mmi_frm_sms_send_struct)); memcpy((S8*) data, (S8*) sendData, sizeof(mmi_frm_sms_send_struct)); mmi_frm_sms_write_action(callback, mod_src, data, mmi_frm_sms_pre_send_sms); } U8 mmi_frm_sms_write_action(PsFuncPtrU16 callback, module_type mod_src, void *data, PsFuncPtr function) { mmi_frm_sms_action_struct action; action.mod_src = mod_src; action.data = data; action.callback = callback; action.action = function; [...] mmi_frm_sms_action_num++; [...] if (mmi_frm_sms_action_curr == MMI_FRM_SMS_INVALID_NUM) { mmi_frm_sms_read_action(); } return TRUE; } U8 mmi_frm_sms_read_action(void) { PsFuncPtr currFuncPtr = mmi_frm_sms_action[mmi_frm_sms_action_head].action; void *currFuncData = mmi_frm_sms_action[mmi_frm_sms_action_head].data; [...] mmi_frm_sms_action_num--; [...] if (currFuncPtr != NULL) { (*currFuncPtr) (currFuncData); } [...] return TRUE; } 2.3.5、短信发送预处理 [SMSMsg.c] void mmi_frm_sms_pre_send_sms(void *inMsg) { mmi_frm_sms_send_struct *sendData = (mmi_frm_sms_send_struct*) inMsg; [...] mmi_frm_sms_free_sendsms_data(); sendSMS = OslMalloc(sizeof(mmi_frm_sms_send_struct)); memcpy((S8*) sendSMS, (S8*) sendData, sizeof(mmi_frm_sms_send_struct)); OslMfree(sendData); mmi_frm_sms_send_sms_req(); } 2.3.6、短信发送请求 void mmi_frm_sms_send_sms_req(void) { [...] /* check SC: get SC address, inMsg keeps the flag */ if ((sendSMS->sendcheck & MMI_FRM_SMS_SC) != MMI_FRM_SMS_SC) { [... 首次进入 ...] return; } /* check DA: show input screen, inMsg keeps the number */ if ((sendSMS->sendcheck & MMI_FRM_SMS_DA) != MMI_FRM_SMS_DA) { [...二次进入, 弹出号码输入框...] else if ((strlen((S8*) sendSMS->number) == 0) && ((sendSMS->sendrequire & MMI_FRM_SMS_REPLY) == 0)) { if (GetCurrScrnId() != SCR_ID_MSG_NUMBER) { mmi_frm_sms_entry_number(); } return; } sendSMS->sendcheck = MMI_FRM_SMS_DA; } /* check validity of DA */ [...] /* check FDL: when FDN on */ { [...号码输入完毕, 按[确认]到此...] [...短信 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 编码...] result = mmi_frm_sms_pack_sms(); [...绘制发送短信发送界面...] mmi_frm_sms_entry_send(); [...设置短信发送回调...] SetProtocolEventHandler(mmi_frm_sms_send_sms_rsp, PRT_MSG_ID_MMI_SMS_SEND_MSG_RSP); SetProtocolEventHandler(mmi_frm_sms_abort_sms_ind, PRT_MSG_ID_MMI_SMS_SEND_ABORT_START_IND); [...(如果是长短信,循环)发送...] for (i = 0; i < j; i++) { mmi_frm_sms_send_sms_seg(); } [...] } } void mmi_frm_sms_send_sms_seg(void) { MMI_FRM_SMS_SEND_MSG_REQ_STRUCT *sendSms; [...] mmi_frm_sms_send_message(MOD_MMI, MOD_L4C, 0, PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ, (oslParaType*) sendSms, NULL); [...] } 2.3.7、短信发送回调 无论发送是否成功(或者[取消]), 最后返回并高亮[写短信]菜单项:HighlightWMessageHandler()。 [SMSMsg.c] void mmi_frm_sms_send_sms_rsp(void *inMsg) { [...] mmi_frm_sms_callback_action((void*)number, sendResult); [...] } [SmsPsHandler.c] void mmi_msg_send_msg_rsp(void *number, module_type mod, U16 result) { switch (result) { case MMI_FRM_SMS_OK: [... 设置跳转节点 ...] else if (IsScreenPresent(SCR_ID_MSG_WRITE)) { SetMessagesScrnIdToDelHistoryNodes(SCR_ID_MSG_WRITE); } [... 删除历史屏幕, 返回[写短信]...] if (g_msg_cntx.msg_send_info.CurrSendSmsNumbers == g_msg_cntx.msg_send_info.TotalSendSmsNumbers) { DeleteMessagesHistoryNodes(); mmi_frm_sms_delete_screen_history(); } [...] } } ​ 3、收短信 ​ 3.1、短信接收过程 l4a_callback SMSMsg SmsPsHandler MessagesMiscell 1 l4c_sms_new_msg_text_lind [...] mmi_frm_sms_new_sms_ind 2 mmi_frm_sms_new_sms mmi_frm_sms_indicate_sms mmi_frm_sms_new_msg_ind 3 mmi_msg_handle_new_msg_ind 4 mmi_msg_new_msg_ind mmi_msg_entry_new_msg_ind ​ 3.2、接收过程详解: 3.2.1、收到新短信 L4层收到短信,向MMI_Task递交消息。 [l4a_callback.c] void l4c_sms_new_msg_text_lind(...) { […] ilm_ptr->msg_id = (kal_uint16) MSG_ID_MMI_SMS_DELIVER_MSG_IND;/* Set the message id */ // MSG_ID_MMI_SMS_DELIVER_MSG_IND被注册到mmi_frm_sms_new_sms_ind函数:↘ [SMSMsg.c] void mmi_frm_sms_set_protocol_event_handler(void) { SetProtocolEventHandler(mmi_frm_sms_new_sms_ind, PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND); […] } [ProtocolEvents.h] #define PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND MSG_ID_MMI_SMS_DELIVER_MSG_IND […] SEND_ILM(MOD_L4C,MOD_MMI,MMI_L4C_SAP,ilm_ptr); } MMI层收到新短信,更新短信计数器,转换短信数据,并压入未读短信队列。短信过滤等操作放在CHISTIncRecvdSMS()之前。 [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c] void mmi_frm_sms_new_sms_ind(void *inMsg) { if( ( 1 == IsBlockAndEmergencyOnly() ) { […] delete_pending_sms(); […] } CHISTIncRecvdSMS(); /* convert L4 data to MMI data */ mmi_frm_sms_convert_new_sms(msgInd, data); /* put to awaited list last entry, from now on only process new data as awaited list last entry */ mmi_frm_sms_add_new_sms(data, msgInd->no_msg_data, msgInd->msg_data); /* process new sms data */ mmi_frm_sms_new_sms(); […] } 3.2.2、短信分类 新短信的信箱类型为 MMI_FRM_SMS_AWAITS,消息类型为 mmi_frm_sms_deliver_msg_struct,必须转换为 mmi_frm_sms_msgbox_struct类型,保存到全局的msgbox,并设置其信箱类型为 MMI_FRM_SMS_UNREAD,添加其索引到inbox。 [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c] void mmi_frm_sms_new_sms(void) { [...] case MMI_FRM_SMS_AWAITS: { mmi_frm_sms_indicate_sms(index); } [...] } [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c] void mmi_frm_sms_indicate_sms(U16 index) { […] mmi_frm_sms_convert_mt_to_entry(data, entry); [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c] void mmi_frm_sms_convert_mt_to_entry(mmi_frm_sms_deliver_msg_struct *data, mmi_frm_sms_msgbox_struct *entry) type = MMI_FRM_SMS_UNREAD;// 设置短信类型 msgbox_index = mmi_frm_sms_add_sms_to_msgbox(entry, data->index, segment);// 添加短信到inbox,关键! [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c] U16 mmi_frm_sms_add_sms_to_msgbox(mmi_frm_sms_msgbox_struct *entry, U16 index, U8 thisseg) entryindex = mmi_frm_sms_add_sms_entry(entry, index, thisseg); mmi_frm_sms_add_sms_to_list(entry, entryindex); if (i == mmi_frm_sms_msg_check_num) { mmi_frm_sms_new_msg_ind(msgbox_index); } […] } [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c] void mmi_frm_sms_new_msg_ind(U16 index) { […] if (mmi_frm_sms_interrupt_handler[i].msgid == PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND) { mmi_frm_sms_interrupt_handler[i].callback((void*)data, MOD_MMI, MMI_FRM_SMS_OK);//callback注册的函数为mmi_msg_handle_new_msg_ind↘ [\plutommi\mmi\messages\messagessrc\SmsPsHandler.c] void mmi_msg_set_protocol_event_handler(void) { mmi_frm_sms_reg_interrupt_check(MOD_MMI, PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND, mmi_msg_handle_new_msg_ind); […] } //对比mmi_msg_set_protocol_event_handler与mmi_frm_sms_set_protocol_event_handler,这两个函数都使用了 PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND break; […] } 3.2.3、新短信提示 收到新短信之后,弹出“新短信”提示,如果当前处在待机界面,则显示新短信来自,并更改左软键为 [读取]。 [\plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c] void mmi_msg_new_msg_ind(U16 index) { [...] #ifdef __UNIFIED_MESSAGE_SIMBOX_SUPPORT__ mmi_msg_entry_new_sim_msg_ind(); #else /* __UNIFIED_MESSAGE_SIMBOX_SUPPORT__ */ mmi_msg_entry_new_msg_ind();//新短信查看入口 [...] mmi_frm_sms_get_list_index(&type, &list_index, g_msg_cntx.msg_ind_index);↘ [\plutommi\mmi\miscframework\miscframeworksrc\SMSCore.c] void mmi_frm_sms_get_list_index(U16 *type, U16 *index, U16 msgbox_index) mmi_frm_sms_get_sms_list_index(type, index, msgbox_index); [...] mmi_msg_entry_new_msg_popup(MSG_NEW_MSG_NORMAL);// 1. 弹出新短信提示框 #endif /* __UNIFIED_MESSAGE_SIMBOX_SUPPORT__ */ [...] } [plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c] void mmi_msg_entry_new_msg_ind(void) { [...] g_msg_cntx.msg_ind_after_call = FALSE; if (IsKeyPadLockState() == 0) { ShowCategory154Screen( 0, 0, STR_SCR6035_LSK, IMG_SMS_COMMON_NOIMAGE, STR_GLOBAL_BACK, IMG_SMS_COMMON_NOIMAGE, (PU8) GetString(STR_NEW_MESSAGE_FROM_ID),//在待机界面显示“消息来自:” (PU8) mmi_msg_get_new_msg_ind_string(), IMG_NEW_MESSAGE_NOTIFICATION_MSG_IN_IDLE, NULL); SetRightSoftkeyFunction(mmi_msg_go_back_from_new_msg_ind, KEY_EVENT_UP); SetLeftSoftkeyFunction(mmi_msg_get_msg_new, KEY_EVENT_UP);// 左软键[读取] SetKeyHandler(mmi_msg_end_key_from_new_msg_ind, KEY_END, KEY_EVENT_DOWN); } […] } ​ 3.3 、【读取】短信 在待机屏按下[读取]键,向底层请求短信内容。阅读短信内容之后,按[返回]键,则退到收件箱。 [\plutommi\mmi\messages\messagessrc\SmsPsHandler.c] void mmi_msg_get_msg_new(void) { [...] mmi_msg_get_msg_req(MMI_FRM_SMS_APP_NOBOX, g_msg_cntx.msg_ind_index);// 发送读取短信内容的请求, 注意, 这里用的是NOBOX mmi_frm_sms_get_list_index(&type, &list_index, g_msg_cntx.msg_ind_index); [...] mmi_msg_exit_bizbox_list_dummy();↘ [\plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c] void mmi_msg_exit_inbox_list_dummy(void) currHistory.entryFuncPtr = mmi_msg_entry_inbox_list;//设置阅读新短信之后按“返回”键跳转到哪里。 g_msg_cntx.toDisplayMessageList = TO_DISPLAY_MESSAGE_LIST_INBOX;//设置显示页面 ​ 3.4、更新短信状态 读取请求发出之后,L4层已经把新短信状态改成已读, mmi_frm_sms_msg_box中的状态也应同步。 [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c] void mmi_frm_sms_read_sms(PsFuncPtrU16 callback, module_type mod_src, U16 type, U16 index, MMI_BOOL change_status) mmi_frm_sms_set_sms_status(type, index, MMI_FRM_SMS_INBOX); [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c] U8 mmi_frm_sms_set_sms_status(U16 type, U16 index, U16 newtype) { [...] switch (type) { [...] case MMI_FRM_SMS_INBOX: case MMI_FRM_SMS_UNREAD: msgindex = mmi_frm_sms_inbox_list[index]; mti = (mmi_frm_sms_msg_box[msgindex].msgtype & 0xf000); mmi_frm_sms_msg_box[msgindex].msgtype = mti | newtype;// 更改状态 break; […] } ​ 3、短信箱 ​ 3.1、信箱初始化 开机时,系统逐条读取所有短信,保存到mmi_frm_sms_msg_box, 然后根据短信类型(未读/已读/已发送...)将索引添加到对应的 mmi_frm_sms_xxbox_list。 开机之后,收到新短信或者发送短信时选择了“发送并保存”,则短信会即时添加到mmi_frm_sms_msg_box和各自对应的 mmi_frm_sms_xxbox_list。 (1) void mmi_frm_sms_convert_mt_to_entry() (2) void mmi_frm_sms_convert_startup_read_to_entry() ​ 3.2、信箱入口 以收件箱为例。入口函数并不直接生成列表,而是传递回调函数 mmi_msg_inbox_list_get_item给Categrory。 mmi_msg_pre_entry_inbox_list [\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c] void mmi_msg_entry_inbox_list(void) { [...] ShowCategory184Screen( STR_SCR6010_CAPTION, IMG_SMS_ENTRY_SCRN_CAPTION, STR_GLOBAL_OK, IMG_GLOBAL_OK, STR_GLOBAL_BACK, IMG_GLOBAL_BACK, numitem, mmi_msg_inbox_list_get_item, mmi_msg_inbox_list_get_hint, hiliteitem, guiBuffer); [...] } [\plutommi\mmi\GUI\GUI_SRC\wgui_dynamic_menuitems.c] void load_dynamic_item_buffer(S32 n_items) { for (i = 0; i < n_items; i++) { if (dynamic_item_buffer.load_func(i, (UI_string_type) subMenuData[i], &image, 3)) // 调用mmi_msg_inbox_list_get_item [...] } 在mmi_msg_inbox_list_get_item函数,取方号码(或姓名)做信箱列表item标题,并判断短信的状态(已读/未读)。 [\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c] pBOOL mmi_msg_inbox_list_get_item(S32 item_index, UI_string_type str_buff, PU8 *img_buff_p, U8 str_img_mask) mmi_msg_inbox_list_get_item { […] AnsiiToUnicodeString(temp, (S8*) mmi_frm_sms_get_address(MMI_FRM_SMS_APP_INBOX , (U16) item_index)); //1 取发件方号码 name = lookUpNumber(temp);//2 取发件方姓名(如果电话本有记录) […] *img_buff_p = get_image(IMG_MESSAGE_UNREAD); //3 未读短信图标 […] *img_buff_p = get_image(IMG_MESSAGE_READ); //4 已读短信图标 […] } ​ 3.3、阅读短信 以收件箱为例。阅读短信时,并不是直接从全局数组 mmi_frm_sms_msg_box 读取,而是通过发送PRT_MSG_ID_MMI_SMS_GET_MSG_REQ获得短信,读取之后,短信的未读状态变为已读。 [\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c] void mmi_msg_entry_inbox_list(void) SetLeftSoftkeyFunction(mmi_msg_get_msg_inbox, KEY_EVENT_UP);// 设置左软件 [\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c] void mmi_msg_get_msg_inbox(void) g_msg_cntx.toDisplayMessageList = TO_DISPLAY_MESSAGE_LIST_INBOX; mmi_msg_get_msg_req(MMI_FRM_SMS_APP_INBOX, (U16) g_msg_cntx.currBoxIndex);// 请求的是 MMI_FRM_SMS_APP_INBOX 短信 [\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c] void mmi_msg_get_msg_req(U16 type, U16 index) mmi_frm_sms_read_sms(mmi_msg_get_msg_rsp, MOD_MMI, type, index, MMI_TRUE); [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c] void mmi_frm_sms_read_sms(PsFuncPtrU16 callback, module_type mod_src, U16 type, U16 index, MMI_BOOL change_status) { mmi_frm_sms_get_sms_index((mmi_frm_sms_msgbox_enum) type, index, data); // 根据信箱类型,取得L4index。 [...] mmi_frm_sms_set_sms_status(type, index, MMI_FRM_SMS_INBOX);// 同步更改mmi_frm_sms_msg_box 短信状态, 底层短信状态在发送读取请求时更改。 [...] mmi_frm_sms_write_action(callback, mod_src, data, mmi_frm_sms_read_sms_req);// 提交读取短信请求 } [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c] void mmi_frm_sms_read_sms_req(void *inMsg) mmi_frm_sms_read_sms_seg(); [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c] U8 mmi_frm_sms_read_sms_seg(void) SetProtocolEventHandler(mmi_frm_sms_read_sms_rsp, PRT_MSG_ID_MMI_SMS_GET_MSG_RSP); mmi_frm_sms_send_message(MOD_MMI, MOD_L4C, 0, PRT_MSG_ID_MMI_SMS_GET_MSG_REQ, (oslParaType*) msgReq, NULL); 读取请求发送之后,在 mmi_frm_sms_read_sms_rsp 接收请求处理结果,显示短信。 [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c] void mmi_frm_sms_read_sms_rsp(void *inMsg) // 短信请求应答 mmi_frm_sms_callback_action(&type, result); [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c] void mmi_frm_sms_callback_action(void *data, U16 result) callback(data, (module_type) mod_src, result);// 调用 mmi_msg_entry_inbox_msg [\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c] void mmi_msg_entry_inbox_msg(void) // 显示短信内容 ​ 3.4、短信【选项】菜单 1、选项菜单资源: SMS_INBOX_OPTIONS_MENUID //菜单ID STR_GLOBAL_OPTIONS //字串资源 2、选项菜单入口: [\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c] void mmi_msg_entry_option_inbox(void) 3、菜单子选项的初始化: [\plutommi\customer\custresource\pluto_mmi\res_mmi\Res_Messages.c] void PopulateMessagesResData (void) { [...] ADD_APPLICATION_MENUITEM((SMS_INBOX_OPTIONS_MENUID,/* 1. 收件箱短信的[选项]菜单 */ 0, NUM_MESSAGES_INBOXOP_MENU, /* 2. [选项]菜单项个数 */ SMS_INBOX_OPT_REPLY_MENUID, /* 3. [回复]选项 */ SMS_INBOX_OPT_DELETE_MENUID, /* 4. [删除]选项 */ [...] STR_GLOBAL_OPTIONS, IMG_SMS_COMMON_NOIMAGE)); [...] } 短信相关的高亮注册集中在mmi_msg_set_highlight_handler,可以从这里快速查找到[选项]各子项: [\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c] void mmi_msg_set_highlight_handler(void) { [...] SetHiliteHandler(SMS_INBOX_OPT_REPLY_MENUID, mmi_msg_highlight_reply); SetHiliteHandler(SMS_INBOX_OPT_EDIT_MENUID, mmi_msg_highlight_edit); SetHiliteHandler(SMS_INBOX_OPT_FORWARD_MENUID, mmi_msg_highlight_forward); [...] } ​ 4、业务信箱 业务信箱沿用原有的收/发件箱模式,但由于无法保存自定义的短信状态值, 所以必须自行建一个状态映射表,用以保存是否业务短信。 ​ 4.1、定义相关资源 [\custom\common\mmi_msg_context.c] unsigned short mmi_frm_sms_inbox_list[CM_SMS_MAX_MSG_NUM]; unsigned short mmi_frm_sms_outbox_list[CM_SMS_MAX_MSG_NUM]; unsigned short mmi_frm_sms_bizbox_list[CM_SMS_MAX_MSG_NUM];// add mmi_frm_sms_msgbox_struct mmi_frm_sms_msg_box[CM_SMS_MAX_MSG_NUM]; [\custom\common\mmi_msg_context.h] extern unsigned short mmi_frm_sms_inbox_list[CM_SMS_MAX_MSG_NUM]; extern unsigned short mmi_frm_sms_outbox_list[CM_SMS_MAX_MSG_NUM]; extern unsigned short mmi_frm_sms_drafts_list[CM_SMS_MAX_MSG_NUM]; extern unsigned short mmi_frm_sms_bizbox_list[CM_SMS_MAX_MSG_NUM];// add [\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c] static U16 mmi_frm_sms_msgbox_size = 0; static U16 mmi_frm_sms_inbox_size = 0; static U16 mmi_frm_sms_outbox_size = 0; static U16 mmi_frm_sms_bizbox_size = 0;// add [\plutommi\mmi\miscframework\miscframeworkinc\SMSStruct.h] mmi_frm_sms_msgbox_enum MMI_FRM_SMS_INBOX = 0x02, //read MMI_FRM_SMS_OUTBOX = 0x04, MMI_FRM_SMS_BIZUNREAD = 0x200,// add MMI_FRM_SMS_BIZINBOX = 0x400,// add [\plutommi\mmi\miscframework\miscframeworkinc\SMSApi.h] typedef enum { [...] MMI_FRM_SMS_APP_INBOX = 0x02, MMI_FRM_SMS_APP_OUTBOX = 0x04, MMI_FRM_SMS_APP_BIZUNREAD = 0x200,// add MMI_FRM_SMS_APP_BIZINBOX = 0x400,// add [...] } mmi_frm_sms_app_msgbox_enum; [\plutommi\mmi\messages\messagesinc\MessagesResourceData.h] typedef enum { [...] SCR_ID_MSG_BIZBOX_MSG,// add SCR_ID_MSG_BIZBOX_LIST,// add MESSAGES_SCR_ID_DEFINES_MAX } MESSAGES_SCREEN_ENUM; [\plutommi\mmi\messages\messagesinc\MessagesResourceData.h] typedef enum { MESSAGES_MENU_WMESSAGE, MESSAGES_MENU_INBOX, MESSAGES_MENU_OUTBOX, MESSAGES_MEUN_BIZBOX, //add [...] NUM_MESSAGES_MAIN_MENU } MESSAGES_MAIN_MENU_ENUMS; [\plutommi\mmi\messages\messagesinc\SmsGuiInterfaceType.h] TO_DISPLAY_MESSAGE_LIST_NONE, TO_DISPLAY_MESSAGE_LIST_INBOX, TO_DISPLAY_MESSAGE_LIST_OUTBOX, TO_DISPLAY_MESSAGE_LIST_BIZBOX,// add ​ 4.2、接收业务短信 4.2.1、新短信类型 [\plutommi\mmi\miscframework\miscframeworksrc\SMSCore.c] void mmi_frm_sms_read_sms(PsFuncPtrU16 callback, module_type mod_src, U16 type, U16 index, MMI_BOOL change_status) { [...] if (TRUE == IsBusinessPlatformNumber(mmi_frm_sms_msg_box[index].number)) { mmi_frm_sms_set_sms_status(type, index, MMI_FRM_SMS_BIZINBOX); } else { mmi_frm_s
本文档为【MTK_短信_研究开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_069397
暂无简介~
格式:doc
大小:202KB
软件:Word
页数:31
分类:互联网
上传时间:2011-05-23
浏览量:21