⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfw_ss.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    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(&notify, 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, &notify);
}


/*
+--------------------------------------------------------------------+
| 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 + -