分享

mt2503[SAT]如何不显示开机SIM卡欢迎语

 一流网络技术 2017-09-14
 [DESCRIPTION]


Feature Phone 上,如果插 SIM 卡开机,有些 SIM 卡有提示信息,例如:“欢迎使用中国移动服务!”, 类似这样的提示信息是 SIM 卡上报的 display text, 手机是按照协议要求做显示。
display text 可分两类:
第一类:仅仅显示提示信息,不需要 user 确认;
第二类:必须要 User 输入或确认;
针对第一类不需要 user 确认的 display text 提示信息,在一些特殊项目上,如果不希望显示出来,请参考下面修改。


[SOLUTION]

因为 display text 是 SIM 卡上报的 SAT 命令,一定要回对应的 terminal response 给 SIM 卡,否则 SIM 卡就不能正常执行其他的 SAT 命令,可能出现的问题有:不能打电话。所以,如果不希望显示 display text,请参考下面修改两点。
为了安全,请不要使用原有的 timer id, 也就是不要使用 SAT_TIMER_CLEAR_DELAY , 请自定义一个timer ID, 然后仅在这里使用自定义的 timer ID.
修改后的代码:

1. 添加函数:
void srv_sat_hide_display_text_timeout(void)
{
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
}


2. 修改函数 :
注意代码中 #if 1 ......#endif
如果有问题,请提供 log, filter: MOD_L4C, MOD_COMMON_APP(group_3),MOD_SIM ( all class on ) ,MOD_FW.
MMI_BOOL srv_sat_do_display_text(
srv_sat_enum sat_id,
srv_sat_cntx_struct *context,
srv_sat_display_text_struct *display_text,
void *info)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mmi_sat_display_text_ind_struct *sim_ind;
mmi_sim_enum sim_id = SATID_2_SIMID(sat_id);
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
sim_ind = (mmi_sat_display_text_ind_struct*) info;
memset(display_text, 0, sizeof(srv_sat_display_text_struct));
memcpy(display_text->cmd_detail, sim_ind->cmd_detail, 5 * sizeof(U8));
if (context->cmd_type == SRV_SAT_CMD_SEND_SS_RETURN_RESULT ||
context->cmd_type == SRV_SAT_CMD_SEND_USSD_RETURN_RESULT)
{
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
return MMI_FALSE;
}
if (!srv_sat_do_check(sat_id, SRV_SAT_CHECK_DM_SETTING_EX))
{
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_ME_CURRENTLY_UNABLE_TO_PROCESS_CMD,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
return MMI_FALSE;
}
/* If the ME receives an icon and either an empty, or no, alpha identifier/text string is given by the SIM, than the ME shall reject the command with general result "Commanddata not understood by ME". */
if (sim_ind->is_icon_available && !sim_ind->no_text_string)
{
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_CMD_DATA_NOT_UNDERSTAND_BY_ME,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
return MMI_FALSE;
}
/* for hide display text, which type no need user confirm. */
#if 1
kal_sys_trace("[text] 0 ");
if (sim_ind->priority == SRV_SAT_CLEAR_AFTER_SHORT_DELAY)
{
kal_sys_trace("[text] 1 ");
if(sim_ind->immediate_res == MMI_TRUE)
{
kal_sys_trace("[text] 2 ");
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
return MMI_FALSE;
}
else
{
kal_sys_trace("[text] 3 ");
StartTimer(SAT_TIMER_CLEAR_DELAY,
MMI_SAT_DISPLAY_TEXT_DELAY_DURATION*1000,
srv_sat_hide_display_text_timeout);
return MMI_FALSE;
}
}
kal_sys_trace("[text] 4 ");
#endif //
display_text->priority = (srv_sat_priority_enum) sim_ind->priority;
display_text->clear_type = (srv_sat_clear_enum) sim_ind->clear_text_type;
display_text->immediate_res = (MMI_BOOL) sim_ind->immediate_res;
display_text->text_string =
DO_TEXT(sim_ind->text_string, sim_ind->no_text_string, sim_ind-
>dcs_of_text_string);
ADD_TO_ICON(
(MMI_BOOL) sim_ind->is_icon_available, sim_ind->icon_info.icon_id,
(srv_sat_icon_enum) sim_ind->icon_info.icon_attr, &display_text->icon);
return MMI_TRUE;
}
修改前的代码
MMI_BOOL srv_sat_do_display_text(
srv_sat_enum sat_id,
srv_sat_cntx_struct *context,
// srv_sat_display_text_struct *display_text,
void *info)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mmi_sat_display_text_ind_struct *sim_ind;
mmi_sim_enum sim_id = SATID_2_SIMID(sat_id);
srv_sat_display_text_struct *display_text =
&g_srv_sat_proactive_sim[sat_id].cmd_data.display_text;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
sim_ind = (mmi_sat_display_text_ind_struct*) info;
memset(display_text, 0, sizeof(srv_sat_display_text_struct));
memcpy(display_text->cmd_detail, sim_ind->cmd_detail, 5 * sizeof(U8));
if (context->cmd_type == SRV_SAT_CMD_SEND_SS_RETURN_RESULT ||
context->cmd_type == SRV_SAT_CMD_SEND_USSD_RETURN_RESULT)
{
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
return MMI_FALSE;
}
if (!srv_sat_do_check(sim_id, SRV_SAT_CHECK_DM_SETTING_EX))
{
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_ME_CURRENTLY_UNABLE_TO_PROCESS_CMD,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
return MMI_FALSE;
}
/* If the ME receives an icon and either an empty, or no, alpha identifier/text string is given by the SIM, than the ME shall reject the command with general result "Commanddata not understood by ME". */
if (sim_ind->is_icon_available && !sim_ind->no_text_string)
{
srv_sat_terminal_response_display_text(
sim_id,
SRV_SAT_TERMINAL_RES_CMD_DATA_NOT_UNDERSTAND_BY_ME,
SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE);
return MMI_FALSE;
}
display_text->priority = (srv_sat_priority_enum) sim_ind->priority;
display_text->clear_type = (srv_sat_clear_enum) sim_ind->clear_text_type;
display_text->immediate_res = (MMI_BOOL) sim_ind->immediate_res;
display_text->text_string =
DO_TEXT(sim_ind->text_string, sim_ind->no_text_string, sim_ind-
>dcs_of_text_string);
ADD_TO_ICON(
(MMI_BOOL) sim_ind->is_icon_available, sim_ind->icon_info.icon_id,
(srv_sat_icon_enum) sim_ind->icon_info.icon_attr, &display_text->icon);
return MMI_TRUE;
}

本文转载自一牛网论坛—MTK硬件

原文地址:http://bbs./thread-453694-1-1.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约