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

📄 mfw_ss.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:

          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, &para);
  else
    ksd_decode((CHAR *)string, FALSE, &grp, &rest, &para);

  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, &para);
   }
  else
    ksd_decode((CHAR *)string, FALSE, &grp, &rest, &para);

  /* 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, &para))
      *rest = 0;
  }
  else
  {
    if (!ksd_decode((CHAR *)string, FALSE, &grp, &rest, &para))
      *rest = 0;
  }

  *rt = rest;
  memcpy(p, &para, 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 + -