📄 mfw_ss.c
字号:
default:
return MFW_SS_UNKNOWN;
}
}
/*
+-------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_execute_transaction |
+-------------------------------------------------------------------+
PURPOSE : Start a SS transaction
*/
T_MFW_SS_RETURN ss_execute_transaction(UBYTE *ss_string,
UBYTE ussd_mand)
{
T_ACI_RETURN res;
TRACE_FUNCTION("ss_execute_transaction()");
res = sAT_Dn(CMD_SRC_LCL, (CHAR *)ss_string, -1, -1, -1);
if( (res != AT_EXCT) AND (res != AT_CMPL))
{
TRACE_EVENT("sAT_D error");
return MFW_SS_FAIL;
}
return ss_check_ss_string(ss_string);
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_cvtCssuCodes |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the CSSU mode
used by ACI to the CSSU mode used by MFW.
*/
T_MFW_SS_NOTIFY_CODES ss_cvtCssuCodes(T_ACI_CSSU_CODE code)
{
switch (code)
{
case CSSU_CODE_ForwardedCall: return MFW_SS_MT_FORWARDED;
case CSSU_CODE_CUGCall: return MFW_SS_MT_CUG_CALL;
case CSSU_CODE_Multiparty: return MFW_SS_NOTIFY_MULTIPARTY;
case CSSU_CODE_HeldCallRel: return MFW_SS_NOTIFY_holdRELEASED;
case CSSU_CODE_FwrdCheckSS: return MFW_SS_NOTIFY_checkSS;
case CSSU_CODE_ECTAlert: return MFW_SS_NOTIFY_ectALERT;
case CSSU_CODE_ECTConnect: return MFW_SS_NOTIFY_ectCONNECT;
case CSSU_CODE_DeflectedCall: return MFW_SS_MT_DEFLECTED;
default: return MFW_SS_NOTIFY_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_cvtCssiCodes |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the CSSI mode
used by ACI to the CSSI mode used by MFW.
*/
T_MFW_SS_NOTIFY_CODES ss_cvtCssiCodes(T_ACI_CSSI_CODE code)
{
switch (code)
{
case CSSI_CODE_CFUActive: return MFW_SS_MO_unconFORWARD;
case CSSI_CODE_SomeCCFActive: return MFW_SS_MO_conFORWARD;
case CSSI_CODE_ForwardedCall: return MFW_SS_MO_FORWARDED;
case CSSI_CODE_CallWaiting: return MFW_SS_MO_WAITING;
case CSSI_CODE_CUGCall: return MFW_SS_MO_CUG_CALL;
case CSSI_CODE_OutCallsBarred: return MFW_SS_MO_moBARRED;
case CSSI_CODE_IncCallsBarred: return MFW_SS_MO_mtBARRED;
case CSSI_CODE_CLIRSupRej: return MFW_SS_MO_CLIR;
case CSSI_CODE_DeflectedCall: return MFW_SS_MO_DEFLECTED;
default: return MFW_SS_NOTIFY_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: ss_notify |
+--------------------------------------------------------------------+
PURPOSE : Change of SS status from the network.
*/
void ss_notify(T_MFW_SS_NOTIFY_CODES code,
SHORT index,
UBYTE *number,
UBYTE *subaddr)
{
memset(¬ify, 0, sizeof(T_MFW_SS_NOTIFY));
notify.code = code;
if(number)
strcpy((char *)notify.number, (char *)number);
if (subaddr)
strcpy((char *)notify.subaddr, (char *)subaddr);
//PATCH TB 1309: Wrong codes tested
if ((code == MFW_SS_MO_CUG_CALL) OR
(code == MFW_SS_MT_CUG_CALL))
notify.index = (UBYTE)index;
/* END PATCH TB */
{
char buf[40];
sprintf (buf, "SS notify code = %d", notify.code);
TRACE_EVENT (buf);
}
ss_signal(E_SS_NOTIFY, ¬ify);
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtOCode |
+--------------------------------------------------------------------+
PURPOSE : Convert operation codes
*/
T_MFW ss_cvtOCode(T_ACI_KSD_OP code)
{
switch (code)
{
case KSD_OP_IRGT: return SS_INTERROGATION;
case KSD_OP_REG: return SS_REGISTRATION;
case KSD_OP_ERS: return SS_ERASURE;
case KSD_OP_ACT: return SS_ACTIVATION;
case KSD_OP_DEACT: return SS_DEACTIVATION;
default: return SS_CODES_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtSCodes |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the SS code
used by ACI to the SS code used by MFW.
*/
T_MFW ss_cvtSCode(T_ACI_KSD_SS code)
{
switch (code)
{
case KSD_SS_CLIP: return SS_CLIP;
case KSD_SS_CLIR: return SS_CLIR;
case KSD_SS_COLP: return SS_COLP;
case KSD_SS_COLR: return SS_COLR;
case KSD_SS_CW: return SS_CW;
case KSD_SS_BAIC: return SS_CB_BAIC;
case KSD_SS_BAOC: return SS_CB_BAOC;
case KSD_SS_ALL_CBSS: return SS_CB_ALL;
case KSD_SS_BICRM: return SS_CB_BAICroam;
case KSD_SS_BIC: return SS_CB_ALL_BAIC;
case KSD_SS_BOICXH: return SS_CB_BAOICexH;
case KSD_SS_BOIC: return SS_CB_BAOIC;
case KSD_SS_BOC: return SS_CB_ALL_BAOC;
case KSD_SS_CFB: return SS_CF_CFB;
case KSD_SS_CFNRC: return SS_CF_CFNR;
case KSD_SS_CFNRY: return SS_CF_CFNRy;
case KSD_SS_CFU: return SS_CF_CFU;
case KSD_SS_ALL_CFWSS: return SS_CF_ALL_COND;
case KSD_SS_ALL_FWSS: return SS_CF_ALL;
case KSD_SS_CCBS: return SS_CCBS;
case KSD_SS_PIN1: return SS_PIN1;
case KSD_SS_PIN2: return SS_PIN2;
default: return SS_CODES_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtCLStatus |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the CL status
used by ACI to the CL status used by MFW.
*/
T_MFW ss_cvtCLStatus(T_ACI_KSD_CLIR_OP stat)
{
switch (stat)
{
case KSD_CO_PERMANENT: return MFW_CL_PERM;
case KSD_CO_TEMPORARY: return MFW_CL_TEMP_DEF_REST;
case KSD_CO_ALLOWED: return MFW_CL_TEMP_DEF_ALLOWED;
default: return MFW_CL_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtCLOvrd |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the override status of
CLIR used by ACI to the override status of CLIR used by
MFW.
*/
T_MFW ss_cvtCLOvrd(T_ACI_KSD_OVRD_CTG ovrd)
{
switch (ovrd)
{
case KSD_OVR_CAT_ENABLED: return MFW_OV_ENABLED;
case KSD_OVR_CAT_DISABLED: return MFW_OV_DISABLED;
default: return MFW_OV_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_cvtErrCode |
+--------------------------------------------------------------------+
PURPOSE : This function is used to convert the error code used
by ACI to the error code used by MFW.
*/
T_MFW ss_cvtErrCode(T_ACI_KSD_ERR err)
{
switch (err)
{
case KSD_NO_ERROR: return MFW_SS_NO_ERROR;
case KSD_ERR_UNKNOWN_SUBSCRIBER: return MFW_SS_ERR_UNKNOWN_SUBSCRIBER;
case KSD_ERR_ILLEGAL_SUBSCRIBER: return MFW_SS_ERR_ILLEGAL_SUBSCRIBER;
case KSD_ERR_BEARER_SVC_NOT_PROV: return MFW_SS_ERR_BEARER_SVC_NOT_PROV;
case KSD_ERR_TELE_SVC_NOT_PROV: return MFW_SS_ERR_TELE_SVC_NOT_PROV;
case KSD_ERR_ILLEGAL_EQUIPMENT: return MFW_SS_ERR_ILLEGAL_EQUIPMENT;
case KSD_ERR_CALL_BARRED: return MFW_SS_ERR_CALL_BARRED;
case KSD_ERR_ILLEGAL_SS_OPERATION: return MFW_SS_ERR_ILLEGAL_SS_OPERATION;
case KSD_ERR_SS_ERR_STATUS: return MFW_SS_ERR_SS_ERR_STATUS;
case KSD_ERR_SS_NOT_AVAIL: return MFW_SS_ERR_SS_NOT_AVAIL;
case KSD_ERR_SS_SUBS_VIOLATION: return MFW_SS_ERR_SS_SUBS_VIOLATION;
case KSD_ERR_SS_INCOMP: return MFW_SS_ERR_SS_INCOMP;
case KSD_ERR_FAC_NOT_SUPPORTED: return MFW_SS_ERR_FAC_NOT_SUPPORTED;
case KSD_ERR_ABSENT_SUBS: return MFW_SS_ERR_ABSENT_SUBS;
case KSD_ERR_SYSTEM_FAIL: return MFW_SS_ERR_SYSTEM_FAIL;
case KSD_ERR_DATA_MISSING: return MFW_SS_ERR_DATA_MISSING;
case KSD_ERR_UNEXPECT_DATA: return MFW_SS_ERR_UNEXPECT_DATA;
case KSD_ERR_PWD_REG_FAIL: return MFW_SS_ERR_PWD_REG_FAIL;
case KSD_ERR_NEG_PWD_CHECK: return MFW_SS_ERR_NEG_PWD_CHECK;
case KSD_ERR_NUM_PWD_VIOLATION: return MFW_SS_ERR_NUM_PWD_VIOLATION;
case KSD_ERR_UNKNOWN_ALPHA: return MFW_SS_ERR_UNKNOWN_ALPHA;
case KSD_ERR_USSD_BUSY: return MFW_SS_ERR_USSD_BUSY;
case KSD_ERR_MAX_NUM_MPTY_EXCEED: return MFW_SS_ERR_MAX_NUM_MPTY_EXCEED;
case KSD_ERR_RESOURCE_NOT_AVAIL: return MFW_SS_ERR_RESOURCE_NOT_AVAIL;
case KSD_GEN_PROB_UNRECOG_CMP: return MFW_SS_GEN_PROB_UNRECOG_CMP;
case KSD_GEN_PROB_MISTYPED_CMP: return MFW_SS_GEN_PROB_MISTYPED_CMP;
case KSD_GEN_PROB_BAD_STRUCT_CMP: return MFW_SS_GEN_PROB_BAD_STRUCT_CMP;
case KSD_INV_PROB_DUPL_INV_ID: return MFW_SS_INV_PROB_DUPL_INV_ID;
case KSD_INV_PROB_UNRECOG_OP: return MFW_SS_INV_PROB_UNRECOG_OP;
case KSD_INV_PROB_MISTYPED_PAR: return MFW_SS_INV_PROB_MISTYPED_PAR;
case KSD_INV_PROB_RESOURCE_LIM: return MFW_SS_INV_PROB_RESOURCE_LIM;
case KSD_INV_PROB_INIT_RELEASE: return MFW_SS_INV_PROB_INIT_RELEASE;
case KSD_INV_PROB_UNRECOG_LNK_ID: return MFW_SS_INV_PROB_UNRECOG_LNK_ID;
case KSD_INV_PROB_LNK_RES_UNEXP: return MFW_SS_INV_PROB_LNK_RES_UNEXP;
case KSD_INV_PROB_UNEXP_LNK_OP: return MFW_SS_INV_PROB_UNEXP_LNK_OP;
case KSD_RES_PROB_UNRECOG_INV_ID: return MFW_SS_RES_PROB_UNRECOG_INV_ID;
case KSD_RES_PROB_RET_RES_UNEXP: return MFW_SS_RES_PROB_RET_RES_UNEXP;
case KSD_RES_PROB_MISTYPED_PAR: return MFW_SS_RES_PROB_MISTYPED_PAR;
case KSD_ERR_PROB_UNRECOG_INV_ID: return MFW_SS_ERR_PROB_UNRECOG_INV_ID;
case KSD_ERR_PROB_RET_ERR_UNEXP: return MFW_SS_ERR_PROB_RET_ERR_UNEXP;
case KSD_ERR_PROB_UNRECOG_ERR: return MFW_SS_ERR_PROB_UNRECOG_ERR;
case KSD_ERR_PROB_UNEXP_ERR: return MFW_SS_ERR_PROB_UNEXP_ERR;
case KSD_ERR_PROB_MISTYPED_PAR: return MFW_SS_ERR_PROB_MISTYPED_PAR;
case KSD_ERR_FATAL_INV_RESULT: return MFW_SS_ERR_FATAL_INV_RESULT;
case KSD_ERR_FATAL_CCD_DEC: return MFW_SS_ERR_FATAL_CCD_DEC;
case KSD_ERR_FATAL_SS_ENT: return MFW_SS_ERR_FATAL_SS_ENT;
default: return MFW_SS_ERR_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE : MFW_SS |
| STATE : code ROUTINE : ss_decode_imei |
+--------------------------------------------------------------------+
PURPOSE : convert imei (packed bcd to ASCII)
*/
void ss_decode_imei(T_ACI_KSIR *ksStat)
{
memset(&imei_info, 0, sizeof(imei_info));
imei_info.imei_number[0] = ( ksStat->ir.rKSIMEI.tac1 ) & 0x0F | 0x30;
imei_info.imei_number[1] = ( ksStat->ir.rKSIMEI.tac1 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[2] = ( ksStat->ir.rKSIMEI.tac2 ) & 0x0F | 0x30;
imei_info.imei_number[3] = ( ksStat->ir.rKSIMEI.tac2 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[4] = ( ksStat->ir.rKSIMEI.tac3 ) & 0x0F | 0x30;
imei_info.imei_number[5] = ( ksStat->ir.rKSIMEI.tac3 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[6] = ( ksStat->ir.rKSIMEI.fac ) & 0x0F | 0x30;
imei_info.imei_number[7] = ( ksStat->ir.rKSIMEI.fac & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[8] = ( ksStat->ir.rKSIMEI.snr1 ) & 0x0F | 0x30;
imei_info.imei_number[9] = ( ksStat->ir.rKSIMEI.snr1 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[10] = ( ksStat->ir.rKSIMEI.snr2 ) & 0x0F | 0x30;
imei_info.imei_number[11] = ( ksStat->ir.rKSIMEI.snr2 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[12] = ( ksStat->ir.rKSIMEI.snr3 ) & 0x0F | 0x30;
imei_info.imei_number[13] = ( ksStat->ir.rKSIMEI.snr3 & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[14] = ( ksStat->ir.rKSIMEI.svn ) & 0x0F | 0x30;
imei_info.imei_number[15] = ( ksStat->ir.rKSIMEI.svn & 0xF0 ) >> 4 | 0x30;
imei_info.imei_number[16] = '\0';
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SS |
| STATE : code ROUTINE: rAT_PercentKSIR |
+--------------------------------------------------------------------+
PURPOSE : Network response for key sequences
*/
void rAT_PercentKSIR ( T_ACI_KSIR *ksStat)
{
UBYTE idx;
T_MFW_TELECOM *p_tele;
T_MFW_FEATURE *p_feat;
T_MFW_SRV_GROUP *p_srv;
TRACE_FUNCTION("rAT_PercentKSIR()");
TRACE_EVENT_P1("ksStat->ksdCmd %d", ksStat->ksdCmd);
switch (ksStat->ksdCmd)
{
case KSD_CMD_CB:
TRACE_EVENT("KSD_CMD_CB");
TRACE_EVENT_P1("ksStat->ir.rKSCB.ssCd %d", ksStat->ir.rKSCB.ssCd);
TRACE_EVENT_P1("ksStat->ir.rKSCB.opCd %d", ksStat->ir.rKSCB.opCd);
TRACE_EVENT_P1("ksStat->ir.rKSCB.ssErr %d", ksStat->ir.rKSCB.ssErr);
TRACE_EVENT_P1("ksStat->ir.rKSCB.c_cbInfoLst %d", ksStat->ir.rKSCB.c_cbInfoLst);
if (ksStat->ir.rKSCB.c_cbInfoLst)
{
int i;
for (i = 0; i < ksStat->ir.rKSCB.c_cbInfoLst; i++)
{
TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsTp %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsTp);
TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].bsCd %d", i, ksStat->ir.rKSCB.cbInfoLst[i].bsCd);
TRACE_EVENT_P2("ksStat->ir.rKSCB.cbInfoLst[%d].ssSt %d", i, ksStat->ir.rKSCB.cbInfoLst[i].ssSt);
}
}
p_tele = (T_MFW_TELECOM *) ssLstBuf;
cb_cnf.ss_code = ss_cvtSCode(ksStat->ir.rKSCB.ssCd);
cb_cnf.ss_category = ss_cvtOCode(ksStat->ir.rKSCB.opCd);
cb_cnf.ss_error = ss_cvtErrCode(ksStat->ir.rKSCB.ssErr);
cb_cnf.ss_telecom_list = p_tele;
for( idx = 0;
idx < ksStat->ir.rKSCB.c_cbInfoLst AND
idx < MFW_MAX_TELE_NR;
idx++, p_tele++ )
{
p_tele->ss_telecom_type = ksStat->ir.rKSCB.
cbInfoLst[idx].bsTp;
p_tele->ss_telecom_service = ksStat->ir.rKSCB.
cbInfoLst[idx].bsCd;
p_tele->ss_status = ksStat->ir.rKSCB.
cbInfoLst[idx].ssSt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -