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

📄 mmiservices.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
					  break;
				  }
			   }
		  /*
           * no break
           */
    	case SS_CLIR:
		case SS_CF_ALL_COND:
		case SS_CF_CFNRy:
		case SS_CF_CFNR:
		case SS_CF_CFB:
          switch(ss_cnf->cf_cnf.ss_error)
          {
            case MFW_SS_NO_ERROR:
              /*
               * now store the MFW data under the SS window
               */
              data->mfw_ss_cf = (T_ss_feature_cf *)ALLOC_MEMORY (sizeof (T_ss_feature_cf));

              /*
               * copy all interesting feature entries
               */
              data->max_feature = srv_copy_feature_list_cf (data->mfw_ss_cf, &ss_cnf->cf_cnf);
              data->current_feature = /*CFService*/0;
             

              if (data->max_feature EQ 0)
              {
                /* Marcus: Issue 1652: 03/02/2003: Start */
                if (ss_cnf->cf_cnf.ss_feature_count)
                {
                    T_MFW_FEATURE *temp = ss_cnf->cf_cnf.ss_feature_list;
                    srv_empty_list_result (ss_cnf->cf_cnf.ss_category, event, temp->ss_status);
                }
                else
                {
                    srv_empty_list_result (ss_cnf->cf_cnf.ss_category, event, 0);
                }
                /* Marcus: Issue 1651: 03/02/2003: End */
                FREE_MEMORY ((void *)data->mfw_ss_cf, sizeof (T_ss_feature_cf));
                data->mfw_ss_cf = NULL;
              }
              else
              {
                /*
                 * now display status
                 */
                showCFStatus(win, data);
              }
              break;

            default:
              TRACE_FUNCTION("ERROR in CFU,INTERROGATION");
              showError(win, ss_cnf->cf_cnf.ss_error);
              break;
          }
          break;

        default:
          break;
      } /* end switch(ss_cnf->cf_cnf.ss_code) */
      break;


	case E_SS_CW_CNF:
 	  if (ss_cnf->cw_cnf.ss_error == MFW_SS_NO_ERROR)
      {
        /*
         * now store the MFW data under the SS window
         */
        data->mfw_ss_cw = (T_ss_feature_cw *)ALLOC_MEMORY (sizeof (T_ss_feature_cw));

        /*
         * copy all interesting feature entries
         */
        data->max_feature = srv_copy_feature_list_cw (data->mfw_ss_cw, &ss_cnf->cw_cnf);
        data->current_feature = 0;

        if (data->max_feature EQ 0)
        {


  		  if (ss_cnf->cw_cnf.ss_status NEQ 0xFF AND ss_cnf->cw_cnf.ss_status NEQ 0x00)
			srv_display_status (ss_cnf->cw_cnf.ss_status);
		  else
  		    srv_empty_list_result (ss_cnf->cw_cnf.ss_category, event, ss_cnf->cw_cnf.ss_status);  /* Marcus: Issue 1588: 23/01/2003 */
          FREE_MEMORY ((void *)data->mfw_ss_cw, sizeof (T_ss_feature_cw));
          data->mfw_ss_cw = NULL;
        }
        else
        {
          /*
           * now display status
           */
          showCWStatus(win, data);
        }
      }
	  else
      {
	    showError(win, ss_cnf->cw_cnf.ss_error);
      }
	  break;

	case E_SS_CLI_CNF:
        TRACE_FUNCTION("  E_SS_CLI_CNF");

			if (ss_cnf->cli_cnf.ss_error == MFW_SS_NO_ERROR)
            {
                showCLIStatus(win, ss_cnf);
            }
            else
            {
                showError(win, ss_cnf->cli_cnf.ss_error);
            }
		break;


    case E_SS_CB_CNF:
      switch(ss_cnf->cb_cnf.ss_error)
      {
        case MFW_SS_NO_ERROR:
          /*
           * now store the MFW data under the SS window
           */
          data->mfw_ss_cb = (T_ss_feature_cb *)ALLOC_MEMORY (sizeof (T_ss_feature_cb));

          /*
           * copy all interesting feature entries
           */
          data->max_feature = srv_copy_feature_list_cb (data->mfw_ss_cb, &ss_cnf->cb_cnf);
          data->current_feature = 0;

          if (data->max_feature EQ 0)
          {
            srv_empty_list_result (ss_cnf->cb_cnf.ss_category, event, 0);  /* Marcus: Issue 1588: 23/01/2003 */
            FREE_MEMORY ((void *)data->mfw_ss_cb, sizeof (T_ss_feature_cb));
            data->mfw_ss_cb = NULL;
          }
          else
          {
            /*
             * now display status
             */
            showCBStatus(win, data);
          }
          break;

        default:
          showError(win, ss_cnf->cb_cnf.ss_error);
          break;
      }
      break;

    case E_SS_IMEI:   /* present IMEI */
       /* T_MFW_IMEI imei_cnf;*/
        TRACE_FUNCTION("  E_SS_IMEI");

        switch(ss_cnf->imei_info.error)
        {
        case MFW_SS_NO_ERROR:
            TRACE_FUNCTION( "Handling IMEI no error" );
            showIMEI2(win, ss_cnf);
            break;

        default:
            TRACE_FUNCTION("ERROR in IMEI");
            showError(win, ss_cnf->imei_info.error);
            break;
        }
        break;

            /* we must display the ussd info and then edit and send a user ussd */
    case E_SS_USSD_REQ:
        TRACE_FUNCTION(" E_SS_USSD_REQ");

        switch(ss_cnf->ussd_info.error)
        {
        case MFW_SS_NO_ERROR:
            TRACE_FUNCTION( "Handling USSD_REQ no error" );
            showUSSDREQ(win, ss_cnf );
            break;

        default:
            TRACE_FUNCTION("ERROR in USSD REQ");
            showError(win, ss_cnf->ussd_info.error);
            break;
        }

        break;

    /* just display the ussd info */
    case E_SS_USSD_CNF:
        TRACE_FUNCTION(" E_SS_USSD_CNF");
        switch(ss_cnf->ussd_info.error)
        {
        case MFW_SS_NO_ERROR:
            TRACE_FUNCTION( "Handling USSD_CNF no error" );
            showUSSDCNF(win, ss_cnf );
            break;

        default:
            TRACE_FUNCTION("ERROR in USSD_CNF");
            showError(win, ss_cnf->ussd_info.error);
            break;
        }
        break;
	case E_SS_GET_PW:
		if (ss_cnf->pw_cnf.ss_error == MFW_SS_NO_ERROR)
		{
            showOk(win);
            strncpy((char*)ss_data.edt_buf_cb_password,
            (char*)ss_cnf->pw_cnf.ss_new_pwd,CB_PSW_LEN);
		}
		else
		{
            showError(win, ss_cnf->pw_cnf.ss_error);
		}
	break;
     default:
		return;
	}

}


/*******************************************************************************

 $Function:    	srv_check_CF_telephony_status

 $Description:	
            
 $Returns:		

 $Arguments:	
 
*******************************************************************************/



static UBYTE srv_check_CF_telephony_status (T_MFW_SS_CF_CNF * in_list)
{
  UBYTE i;

  for (i=0;i<in_list->ss_feature_count;i++)
  {
    T_MFW_FEATURE * pFeature = &in_list->ss_feature_list[i];

    /*
     * first check service type
     */
    if (pFeature->ss_telecom_type EQ MFW_BST_TELE)
    {
      switch (pFeature->ss_telecom_service)
      {
		case MFW_TS_ALL_TS:        
        case MFW_TS_ALL_SPCH:
        case MFW_TS_TLPHNY:
        case MFW_TS_ALL_XCPT_SMS:
          if (pFeature->ss_status & SS_STAT_ACTIVE)
            return CF_ACTIVE_STATUS;
          /* Marcus: Issue 1652: 03/02/2003: Start */
          else if (pFeature->ss_status & SS_STAT_PROVISIONED)
            return CF_PROVISIONED_STATUS;
          /* Marcus: Issue 1651: 03/02/2003: End */
          else
            return CF_INACTIVE_STATUS;
          break;

        default:
          break;
      }
    }

	//SPR#984 - DS - Added code below for when no service type is specified.
    if (pFeature->ss_telecom_type EQ MFW_BST_UNKNOWN) //When no service type is specfied
    {
    	switch (pFeature->ss_telecom_service)
    	{
    		case MFW_BS_TS_UNKNOWN:
	    		if (pFeature->ss_status & SS_STAT_ACTIVE)
	            		return CF_ACTIVE_STATUS;
                /* Marcus: Issue 1651: 30/01/2003: Start */
	          	else if (pFeature->ss_status & SS_STAT_PROVISIONED)
	            		return CF_PROVISIONED_STATUS;
                /* Marcus: Issue 1651: 30/01/2003: End */
	          	else
	            		return CF_INACTIVE_STATUS;
          	break;

          	default:
          	break;
    	}
    }

  }
  return CF_UNKNOWN_STATUS;
}


/*******************************************************************************

 $Function:    	srv_check_CF_telephony_status

 $Description:	copies only the interesting parts of the call forwarding
            feature list.
            
 $Returns:		

 $Arguments:	
 
*******************************************************************************/

static UBYTE srv_copy_feature_list_cf (T_ss_feature_cf * out_list, T_MFW_SS_CF_CNF * in_list)
{
  UBYTE found_entries = 0;
  UBYTE i;
 char temp[50];
	{
		

		sprintf(temp,"ss_feature_count %d",in_list->ss_feature_count);
		TRACE_FUNCTION(temp);		
	}

  for (i=0;i<in_list->ss_feature_count;i++)
  {	//MC got rid of pointer arithmetic
  	
      T_MFW_FEATURE * pFeature = &in_list->ss_feature_list[i]; //SPR#1081 - DS - Removed mem allocation. Uses assignment instead.
	T_ss_feature_cf_data * cf_data = &out_list->ss[found_entries];
    
    
    
	sprintf(temp,"Telecom type:%d, service: %d ",pFeature->ss_telecom_type, pFeature->ss_telecom_service);
		TRACE_FUNCTION(temp);		
    /*
     * first check teleservice
     */
    if (srv_get_service_type (&cf_data->service, pFeature->ss_telecom_type/*CFService*/,
                              pFeature->ss_telecom_service))
    {
      /*
       * second set status
       */
      srv_get_status (&cf_data->status, pFeature->ss_status);

	if ((ss_cnf->cf_cnf.ss_code==SS_CF_CFU)||(ss_cnf->cf_cnf.ss_code==SS_CF_ALL)){
		if (pFeature->ss_status & SS_STAT_ACTIVE)
			iconsSetState(iconIdCallFor);
        /* Marcus: Issue 1652: 03/02/2003: Start */
        else if (pFeature->ss_status & SS_STAT_PROVISIONED)
			iconsSetState(iconIdCallFor);
        /* Marcus: Issue 1652: 03/02/2003: End */
        else
            iconsDeleteState(iconIdCallFor);
	}			

      /*
       * third set forwarded to number
       */
      srv_get_forwarded_to_number ((CHAR *)cf_data->forwarded_to_number,
                                   (CHAR *)pFeature->ss_forwarded_to_number);
	{
		char temp[80];

		sprintf(temp,"ss_forwarded_to_number %s",
			(CHAR *)pFeature->ss_forwarded_to_number);
		TRACE_FUNCTION(temp);		
	}
      found_entries++;
    }

  }

  /*
   * return the number of interesting entries
   */
  return found_entries;
}


/*******************************************************************************

 $Function:    	srv_get_forwarded_to_number

 $Description:	sets the forwarded to number if available.
            
 $Returns:		

 $Arguments:	
 
*******************************************************************************/



static void srv_get_forwarded_to_number ( char * textString,
                                          char * forwarded_to_number)
{
  TRACE_FUNCTION("srv_get_forwarded_to_number");

  memset (textString, 0, 16);
  strncpy (textString, forwarded_to_number, 15);
}


/*******************************************************************************

 $Function:    	srv_get_service_type

 $Description:	checks if the service is interesting or not.
            
 $Returns:		

 $Arguments:	

 $History:

 //SPR#0776 - DS - Added default value for textId. Changed references from TxtNotImplemented
 				    to TxtNull.
 
*******************************************************************************/


static UBYTE srv_get_service_type ( USHORT * textId,
                                    UBYTE ss_telecom_type, UBYTE ss_telecom_service)
{
  TRACE_FUNCTION("srv_get_service_type");

  TRACE_EVENT_P1("ss_telecom_type: %x", ss_telecom_type);
  TRACE_EVENT_P1("ss_telecom_service: %x", ss_telecom_service);

  *textId = TxtNull; //Set to TxtNull in case no match found below.

  switch ( ss_telecom_type )
  {
    case MFW_BST_UNKNOWN:
      break;

    case MFW_BST_TELE:
      switch ( ss_telecom_service )
      {
        case MFW_TS_ALL_TS:
          *textId = TxtAllCalls;
          return TRUE;

        case MFW_TS_ALL_SPCH:       /* All speech transmission services */
        case MFW_TS_TLPHNY:         /* telephony    */
        case MFW_TS_PLMN1: /*MC, this is returned for auxiliary telephony status, 742*/
          *textId = TxtVoice;
          return TRUE;

        case MFW_TS_ALL_XCPT_SMS:
          *textId = TxtNull;
          return TRUE;

        case MFW_TS_ALL_DATA:
          *textId = TxtData;
          return TRUE;

        case MFW_TS_ALL_FAX:
          *textId = TxtFax;
          return TRUE;
      }

      break;

    case MFW_BST_BEARER:
      switch ( ss_telecom_service )
      {
        case MFW_BS_ALL_BS:
          *textId = TxtData; //SPR#933 - DS - Changed TxtNull to TxtData.
          return TRUE;

		case MFW_BS_ALL_DATA_CDA: //SPR#933 - DS - Added so MMI displays correct info to user.
        	*textId = TxtData;
        	return TRUE;

        default:
          break;
      }
      break;
  }

  return FALSE;
}

/*******************************************************************************

⌨️ 快捷键说明

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