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

📄 mfw_ss.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
        case KSD_CMD_CW:
            ss_signal(E_SS_CW_CNF, &cw_cnf);
            break;
       case KSD_CMD_PWD:
		    if (!pwd_flag)
				ss_signal(E_SS_GET_PW, &pw_cnf);
			if (pwd_flag == 1)
			{
				pwd_flag = 0;
				sim_error_cpinc();
			}
      		break;
        case KSD_CMD_UBLK:
            sim_ss_unblock(SIM_UBLK_ERROR, reason);
            break;
        case KSD_CMD_CL:
            ss_signal(E_SS_CLI_CNF, &cli_cnf);
            break;
		case KSD_CMD_IMEI:
			imei_info.error = MFW_SS_ERROR;
			ss_signal(E_SS_IMEI, &imei_info);
			break;
        default:
            break;
    }
}


/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_SS               |
| STATE  : code                         ROUTINE: ss_set_clck         |
+--------------------------------------------------------------------+


   PURPOSE :   This function execute the facility lock command.

*/

T_MFW ss_set_clck(T_ACI_CLCK_FAC fac,
                  T_ACI_CLCK_MOD mode,
                  CHAR *passwd,
                  T_ACI_CLASS class_type,
                  UBYTE modul)
{
    TRACE_EVENT("ss_set_clck()");

    clck_flag = modul;

    if (sAT_PlusCLCK(CMD_SRC_LCL, fac,mode, passwd, class_type) != AT_EXCT)
        return MFW_SS_FAIL;
    return MFW_SS_OK;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_SS             |
| STATE   : code                        ROUTINE : ss_ok_clck         |
+--------------------------------------------------------------------+

  PURPOSE : The executing of the facility lock command is successful.

*/

void ss_ok_clck()
{
    TRACE_FUNCTION("ss_ok_clck()");

    switch (clck_flag)
    {
        case MFW_PHB:
            phb_ok_clck();
            break;
        case MFW_SIM_CPIND:
            sim_ok_cpind();
            break;
        case MFW_SIM_CPINE:
            sim_ok_cpine();
            break;
    }
    clck_flag = MFW_MODUL_UNKNOWN;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_SS             |
| STATE   : code                        ROUTINE : ss_error_clck      |
+--------------------------------------------------------------------+

  PURPOSE : The executing of the facility lock command is failed.

*/

void ss_error_clck()
{
    TRACE_FUNCTION("ss_error_clck()");

    switch (clck_flag)
    {
        case MFW_PHB:
            phb_error_clck();
            break;
        case MFW_SIM_CPIND:
            sim_error_cpind();
            break;
        case MFW_SIM_CPINE:
            sim_error_cpine();
            break;
    }
    clck_flag = MFW_MODUL_UNKNOWN;
}


/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_DMY              |
| STATE  : code                         ROUTINE: ss_send_ussd        |
+--------------------------------------------------------------------+


   PURPOSE :  Send USSD string.
              Note: ASCII is not allowed to use.

*/

T_MFW ss_send_ussd(T_MFW_SS_USSD *ussd_info)
{
    T_ACI_USSD_DATA str;
    T_ACI_RETURN    res;

    TRACE_FUNCTION("ss_send_ussd()");

    if (!ussd_info->len OR !ussd_info->ussd)
        return MFW_SS_FAIL;

    if (ussd_info->dcs == MFW_ASCII)
        return MFW_SS_FAIL;

    if (ussd_info->len > MAX_USSD_LEN)
    {
        str.len = MAX_USSD_LEN;
        memcpy(str.data, ussd_info->ussd, MAX_USSD_LEN);
    }
    else
    {
        str.len = ussd_info->len;
        memcpy(str.data, ussd_info->ussd, ussd_info->len);
    }

    res = sAT_PlusCUSD(CMD_SRC_LCL, &str, (SHORT)ussd_info->dcs);
    if ((res != AT_EXCT) AND (res != AT_CMPL))
        return MFW_SS_FAIL;

    return MFW_SS_OK;
}


/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_DMY              |
| STATE  : code                         ROUTINE: rAT_PlusCUSD        |
+--------------------------------------------------------------------+


   PURPOSE :  Notify or response for USSD from ACI

*/

void rAT_PlusCUSD(T_ACI_CUSD_MOD m, T_ACI_USSD_DATA *ussd, SHORT dcs)
{
    TRACE_FUNCTION("rAT_PlusCUSD()");

    ussd_info.len = ussd->len;
    memcpy(ussd_info.ussd, ussd->data, sizeof(ussd_info.ussd));

    ussd_info.dcs = dcs;
    ussd_info.error = MFW_SS_NO_ERROR;

    if (m == CUSD_MOD_YesActReq)
        ss_signal(E_SS_USSD_REQ, &ussd_info);
    if (m == CUSD_MOD_NoActReq)
        ss_signal(E_SS_USSD_CNF, &ussd_info);
}


/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_DMY              |
| STATE  : code                         ROUTINE: ss_ok_ussd          |
+--------------------------------------------------------------------+


   PURPOSE :  USSD process is successful.

*/

void ss_ok_ussd(T_ACI_AT_CMD cmdId)
{
    TRACE_FUNCTION("ss_ok_ussd()");

    if (cmdId == KSD_CMD_USSD)
    {
        ussd_info.error = MFW_SS_NO_ERROR;
        ss_signal(E_SS_USSD_CNF, &ussd_info);
    }
}


/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_SS               |
| STATE  : code                         ROUTINE: ss_error_ussd       |
+--------------------------------------------------------------------+


   PURPOSE :   USSD process is failed.

*/

void ss_error_ussd(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR reason)
{
    TRACE_FUNCTION("ss_error_ussd()");

//    ussd_info.error = ss_cvtErrCode(reason);
    ss_signal(E_SS_USSD_CNF, &ussd_info);
}

/*
+---------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_SS                |
| STATE  : code                         ROUTINE: ss_abort_transaction |
+---------------------------------------------------------------------+


   PURPOSE :   Abort executing of SS transaction

*/

T_MFW ss_abort_transaction(void)
{
  TRACE_FUNCTION("ss_abort_transaction()");
  
  if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) EQ AT_CMPL)
    return TRUE;
  else
  {
    if (sAT_Abort(CMD_SRC_LCL, AT_CMD_D) EQ AT_CMPL)
      return TRUE;
  }
  return FALSE;
}


/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_SS               |
| STATE  : code                         ROUTINE: ss_set_cug          |
+--------------------------------------------------------------------+


   PURPOSE : set parameter of close user group

*/
T_MFW_SS_RETURN ss_set_cug (T_MFW_SS_CUG_PARA *cug_param)
{
	T_ACI_CCUG_MOD  cug_mode  = CCUG_MOD_NotPresent;
    T_ACI_CCUG_IDX  cug_index = CCUG_IDX_NotPresent;
    T_ACI_CCUG_INFO cug_info  = CCUG_INFO_NotPresent;

	TRACE_FUNCTION("ss_set_cug()");

/* check cug mode  */
	switch(cug_param->mode)
	{
		case MFW_SS_CUG_TMP_DISABLE: 
			cug_mode = CCUG_MOD_DisableTmp;
			break;
		case MFW_SS_CUG_TMP_ENABLE:
			cug_mode = CCUG_MOD_EnableTmp; /* enable to control cug info   */
			break;
		default:                           /* ACI keep last valid value    */
			break;
	}
/* check cug index  */
	switch(cug_param->index)
	{
		case MFW_SS_CUG_INDEX0:
			cug_index = CCUG_IDX_0;
			break;
		case MFW_SS_CUG_INDEX1:
			cug_index = CCUG_IDX_1;
			break;
		case MFW_SS_CUG_INDEX2:
			cug_index = CCUG_IDX_2;
			break;
		case MFW_SS_CUG_INDEX3:
			cug_index = CCUG_IDX_3;
			break;
		case MFW_SS_CUG_INDEX4:
			cug_index = CCUG_IDX_4;
			break;
		case MFW_SS_CUG_INDEX5:
			cug_index = CCUG_IDX_5;
			break;
		case MFW_SS_CUG_INDEX6:
			cug_index = CCUG_IDX_6;
			break;
		case MFW_SS_CUG_INDEX7:
			cug_index = CCUG_IDX_7;
			break;
		case MFW_SS_CUG_INDEX8:
			cug_index = CCUG_IDX_8;
			break;
		case MFW_SS_CUG_INDEX9:		
			cug_index = CCUG_IDX_9;
			break;
		case MFW_SS_CUG_NO_INDEX:
			cug_index = CCUG_IDX_No;  /* preferred CUG taken from subscriber data */
			break;
		default:                      /* ACI keep last valid value      */
			break;
	}

/* check cug info  */
	switch(cug_param->info)
	{
		case MFW_SS_CUG_SUPP_OA:
			cug_info = CCUG_INFO_SuppOa;      /* suppress outgoing access  */
			break;
		case MFW_SS_CUG_SUPP_PREF:
			cug_info = CCUG_INFO_SuppPrefCug; /* suppress preferential closed user group */
			break;
		case MFW_SS_CUG_SUPP_BOTH:
			cug_info = CCUG_INFO_SuppBoth;    /* suppress outgoing access and preferential cug */
			break;
		case MFW_SS_CUG_INFO_NO:              /* no cug info */
			cug_info = CCUG_INFO_No;
			break;
		default:                              /* ACI keep last valid value      */
			break;
	}
	if(sAT_PlusCCUG(CMD_SRC_LCL,cug_mode,cug_index,cug_info) EQ AT_CMPL) /* set in ACI cug parameters */
		return MFW_SS_OK;
	else
		return MFW_SS_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_SS               |
| STATE  : code                         ROUTINE: ss_get_cug          |
+--------------------------------------------------------------------+


   PURPOSE : get parameter of close user group

*/

T_MFW_SS_RETURN ss_get_cug(T_MFW_SS_CUG_PARA *cug_param)
{
	T_ACI_CCUG_MOD  cug_mode;
    T_ACI_CCUG_IDX  cug_index;
    T_ACI_CCUG_INFO cug_info; 

	cug_param->mode =  MFW_SS_CUG_MODE_Not_Present;
	cug_param->index = MFW_SS_CUG_INDEX_Not_Present;
	cug_param->info =  MFW_SS_CUG_INFO_Not_Present;

    TRACE_FUNCTION("ss_get_cug()");

	if(qAT_PlusCCUG(CMD_SRC_LCL,&cug_mode,&cug_index,&cug_info) NEQ AT_CMPL) /* get cug parameters of ACI */
		return MFW_SS_FAIL;
	else
	{
		cug_param->mode = cug_mode;
		cug_param->index = cug_index;
		cug_param->info = cug_info;
		return MFW_SS_OK;
	}
}
//PATCH TB 1309
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         MODULE: MFW_SS               |
| STATE  : code                         ROUTINE: ss_command_abort    |
+--------------------------------------------------------------------+


   PURPOSE :

*/
T_MFW ss_command_abort(void)
{
  TRACE_FUNCTION ("ss_command_abort()");

	// Abort SS transaction.
	// Any SS AT_CMD will clear all SS (any) transaction(s)
  if (sAT_Abort(CMD_SRC_LCL, AT_CMD_CUSD) == AT_CMPL)
		return TRUE;
	else
		return FALSE;
}
//END PATCH TB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -