📄 mfw_ss.c
字号:
case E_SS_USSD_REQ:
memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD));
break;
case E_SS_USSD_CNF:
memcpy (&ss_data->para.ussd_info, para, sizeof (T_MFW_SS_USSD));
break;
}
/*
* if call back defined, call it
*/
if (ss_data->handler)
{
// PATCH LE 06.06.00
// store current mfw elem
current_mfw_elem = cur_elem;
// END PATCH LE 06.06.00
if ((*(ss_data->handler)) (ss_data->event, (void *)&ss_data->para))
return TRUE;
}
}
}
cur_elem = cur_elem->next;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_signal |
+--------------------------------------------------------------------+
PURPOSE : send a event signal.
*/
void ss_signal(T_MFW_EVENT event, void * para)
{
UBYTE temp;
TRACE_FUNCTION ("ss_signal()");
//temp = dspl_Enable(0);
if (mfwSignallingMethod EQ 0)
{
/*
* focus is on a window
*/
if (mfwFocus)
/*
* send event to sim management
* handler if available
*/
if (ss_sign_exec (mfwFocus, event, para))
{
// dspl_Enable(temp);
return;
}
/*
* acutal focussed window is not available
* or has no network management registration
* handler, then search all nodes from the root.
*/
if (mfwRoot)
ss_sign_exec (mfwRoot, event, para);
}
else
{
MfwHdr * h = 0;
/*
* Focus set, then start here
*/
if (mfwFocus)
h = mfwFocus;
/*
* Focus not set, then start root
*/
if (!h)
h = mfwRoot;
/*
* No elements available, return
*/
while (h)
{
/*
* Signal consumed, then return
*/
if (ss_sign_exec (h, event, para))
{
// dspl_Enable(temp);
return;
}
/*
* All windows tried inclusive root
*/
if (h == mfwRoot)
{
// dspl_Enable(temp);
return;
}
/*
* get parent window
*/
h = mfwParent(mfwParent(h));
if(h)
h = ((MfwWin * )(h->data))->elems;
}
ss_sign_exec (mfwRoot, event, para);
}
// dspl_Enable(temp);
}
/* glowing,2004-06-10, import from M188 */
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_check_ss_string |
+--------------------------------------------------------------------+
PURPOSE : Check SS string
*/
T_MFW_SS_RETURN ss_check_ss_string_pin(UBYTE *string)
{
T_KSD_SEQGRP grp;
CHAR *rest;
T_KSD_SEQPARAM para;
SHORT id;
TRACE_FUNCTION("ss_check_ss_string");
/* check the type of destination address */
if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK))
ksd_decode((CHAR *)string, TRUE, &grp, &rest, ¶);
else
ksd_decode((CHAR *)string, FALSE, &grp, &rest, ¶);
return ss_check_group(grp, para);
}
/* glowing,2004-06-10, end of import */
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_check_ss_string |
+--------------------------------------------------------------------+
PURPOSE : Check SS string
*/
T_MFW_SS_RETURN ss_check_ss_string(UBYTE *string)
{
T_MFW_SS_RETURN ss_group;
T_KSD_SEQGRP grp;
CHAR *rest;
T_KSD_SEQPARAM para;
SHORT id;
int string_length;
UBYTE call_active=FALSE;
TRACE_FUNCTION("ss_check_ss_string");
#define MFW_MAX_DIAL_SHORT_STRING_LEN 2
/* check the type of destination address */
if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK))
{
call_active = TRUE;
ksd_decode((CHAR *)string, TRUE, &grp, &rest, ¶);
}
else
ksd_decode((CHAR *)string, FALSE, &grp, &rest, ¶);
/* check short string */
string_length = strlen((char*)string);
TRACE_EVENT_P2("ksd_decode(""%s"") returns -> %d",(char*)string,grp);
switch (grp)
{
case (SEQGRP_DIAL): /*JVJ CQ 6242 */
if (string_length<=MFW_MAX_DIAL_SHORT_STRING_LEN)
{
/* If the call is active, the short string will be USSD in all the cases not described in ETSI 2.30*/
if (call_active)
grp = SEQGRP_USSD;
/* If the call is not active, the short strings 1x will be DIAL, the rest USSD*/
else if ((string_length EQ 1)||(*(string) NEQ '1'))
grp = SEQGRP_USSD;
}
break;
case (SEQGRP_SUP_CLIR): /* JGG/JVJ - CQ 6537 */
case (SEQGRP_INV_CLIR):
if (strlen(rest)!=0)
{
T_MFW_SS_RETURN rest_ss_group;
/*check to make sure that the number is a real dial string */
rest_ss_group = ss_check_ss_string((UBYTE*)rest);
if (rest_ss_group EQ MFW_SS_DIAL) /*If rest is a dial string, then the whole string is dial */
ss_group = MFW_SS_DIAL;
else
ss_group = MFW_SS_UNKNOWN;
TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group);
return ss_group;
}
break;
default:
break;
}
ss_group = ss_check_group(grp, para);
TRACE_EVENT_P2("ss_check_ss_string(""%s"") returns -> %d",(char*)string,ss_group);
return ss_group;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_decode |
+--------------------------------------------------------------------+
PURPOSE : Decode SS string
*/
T_MFW_SS_RETURN ss_decode(UBYTE *string, CHAR **rt, T_KSD_SEQPARAM *p)
{
T_KSD_SEQGRP grp;
CHAR *rest;
T_KSD_SEQPARAM para;
SHORT id;
TRACE_FUNCTION("ss_decode()");
if ((cm_search_callId(CAL_STAT_Held, &id) == CM_OK)
OR (cm_search_callId(CAL_STAT_Active, &id) == CM_OK))
{
if (!ksd_decode((CHAR *)string, TRUE, &grp, &rest, ¶))
*rest = 0;
}
else
{
if (!ksd_decode((CHAR *)string, FALSE, &grp, &rest, ¶))
*rest = 0;
}
*rt = rest;
memcpy(p, ¶, sizeof(T_KSD_SEQPARAM));
return(ss_check_group(grp, para));
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_check_group |
+--------------------------------------------------------------------+
PURPOSE : returns the group of SS string
*/
T_MFW_SS_RETURN ss_check_group(T_KSD_SEQGRP grp, T_KSD_SEQPARAM para)
{
TRACE_EVENT_P1("ss_check_group: grp=%d", grp);
switch (grp)
{
case SEQGRP_DIAL:
/*SPR#1352 - SH - Check for TTY On Next Call psuedo-ss strings*/
if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_ON, strlen(TTY_NEXTCALL_ON)))
return MFW_SS_TTY_NEXTCALL_ON;
if (!strncmp((char*)para.ussd.ussd, TTY_NEXTCALL_OFF, strlen(TTY_NEXTCALL_OFF)))
return MFW_SS_TTY_NEXTCALL_OFF;
/*SH end*/
return MFW_SS_DIAL;
case SEQGRP_DIAL_IDX:
return MFW_SS_DIAL_IDX;
case SEQGRP_DTMF:
return MFW_SS_DTMF;
case SEQGRP_USSD:
/*MC, SPR 1111 check for LANGUAGE reset code*/
if (!strncmp((char*)para.ussd.ussd, LANG_RESET, strlen(LANG_RESET)) && para.ussd.ussd[6]=='#')
return MFW_SS_LANG_RESET;
/*MC end*/
return MFW_SS_USSD;
case SEQGRP_ACT_SIM_LOCK: /* lock SIM card */
case SEQGRP_DEACT_SIM_LOCK: /* unlock SIM card */
case SEQGRP_INTRGT_SIM_LOCK:
return MFW_SS_SIM_LOCK;
case SEQGRP_CHANGE_REGISTER:
case SEQGRP_SET_REGISTER:
case SEQGRP_START_REGISTER:
return MFW_SS_REG_PW;
case SEQGRP_CF:
return MFW_SS_CF;
case SEQGRP_CB: /* barring services */
return MFW_SS_CB;
case SEQGRP_SUP_CLIR:
case SEQGRP_INV_CLIR:
return MFW_SS_CLIR;
case SEQGRP_SUP_CLIP:
case SEQGRP_INV_CLIP:
return MFW_SS_CLIP;
case SEQGRP_SUP_COLR:
case SEQGRP_INV_COLR:
return MFW_SS_COLR;
case SEQGRP_SUP_COLP:
case SEQGRP_INV_COLP:
return MFW_SS_COLP;
case SEQGRP_CL:
switch (para.cl.ssCd)
{
case KSD_SS_CLIP:
return MFW_SS_CLIP;
case KSD_SS_CLIR:
return MFW_SS_CLIR;
case KSD_SS_COLP:
return MFW_SS_COLP;
case KSD_SS_COLR:
return MFW_SS_COLR;
}
return MFW_SS_UNKNOWN;
case SEQGRP_PWD:
switch(para.pwd.ssCd)
{
case KSD_SS_CCBS:
case KSD_SS_ALL_CBSS:
case KSD_SS_BOC:
case KSD_SS_BAOC:
case KSD_SS_BOIC:
case KSD_SS_BOICXH:
case KSD_SS_BIC:
case KSD_SS_BAIC:
case KSD_SS_BICRM:
/*NM 190602*/
case KSD_SS_ALL_SERV:
return MFW_SS_REG_PW;
case KSD_SS_PIN1:
case KSD_SS_PIN2:
return MFW_SS_SIM_REG_PW;
}
return MFW_SS_UNKNOWN;
case SEQGRP_UBLK:
return MFW_SS_SIM_UNBLCK_PIN;
case SEQGRP_CW:
return MFW_SS_WAIT;
case SEQGRP_PRSNT_IMEI:
return MFW_SS_MMI;
case SEQGRP_CHLD:
/*MC 11.04.02 */
if (para.chld.mode == CHLD_MOD_Ect)
return MFW_SS_ECT;
else
/*MC*/
return MFW_SS_HOLD;
case SEQGRP_UNKNOWN:
return MFW_SS_UNKNOWN;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -