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

📄 mfw_cphs.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) 	$Workfile:: mfw_cphs.c	    $|
| $Author: root $Revision: 1.1.1.1 $|
| CREATED:  14.7.00			$Modtime::		    $|
| STATE  : code 						     |
+--------------------------------------------------------------------+

   MODULE  : MFW_CPHS

   PURPOSE : This modul contains CPHS management functions.


   $History:: mfw_cphs.c					      $

*/

#define ENTITY_MFW

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#if defined (NEW_FRAME)

#include "typedefs.h"
#include "vsi.h"
#include "pei.h"
#include "custom.h"
#include "gsm.h"

#else

#include "stddefs.h"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"

#endif

#include "mfw_mfw.h"
#include "mfw_sim.h"
#include "mfw_nm.h"
#include "mfw_simi.h"
#include "mfw_phb.h"
#include "mfw_phbi.h"
#include "mfw_cphs.h"
#include "mfw_cphsi.h"
#include "mfw_win.h"
#include "mfw_cm.h"
#include "mfw_ss.h"
#include "mfw_ffs.h"

#include "ksd.h"
#include "psa.h"

#ifdef SIM_TOOLKIT
#include "mfw_sat.h"
#endif

#if defined (FAX_AND_DATA)
#include "aci_fd.h"
#endif

#include "cmh.h"
#include "phb.h"
#include "cmh_phb.h"
#include "psa_sim.h"

#include "pcm.h"

EXTERN MfwHdr * current_mfw_elem;
static int cphsCommand (U32 cmd, void *h); /* handle win commands    */

/* event parameter define */
static T_MFW_CPHS_OP_NAME	opName;
static T_MFW_CPHS_VC_NUM	mbNum;
static T_MFW_CPHS_VC_STAT	mbStatus;
static T_MFW_CPHS_DV_STAT	dvStatus;
static T_MFW_CPHS_ALS_STATUS	alsStatus;
static T_MFW_CPHS_CSP		csProfile;
static T_MFW_CPHS_INFONUM_LIST	numList;
static T_MFW_CPHS_INFONUM_ENTRY infoEntry;
static UBYTE			mbnData[40]; // it should be allocated dynamically.
/* PATCH VO 22.01.01 */
static UBYTE			mbsData[MFW_CPHS_MBS_SIZE]; // it should be allocated dynamically.
static UBYTE			dvData[MFW_CPHS_CFF_SIZE]; // it should be allocated dynamically.
/* PATCH VO 22.01.01 end */
static T_MFW_CPHS_READ_SIM_ENTRY read_sim_entry;//MC
/* variable define */
static T_MFW_CPHS_STATUS	cphsStatus;
static UBYTE			cphsPhase;
static UBYTE			cphsServTab[CPHS_SERVICE_TABLE];
static UBYTE			maxRec;
/* PATCH JPS 16.01.01: store mailbox number entry */
static T_MFW_CPHS_ENTRY 	MbnEntry;
/* PATCH JPS 16.01.01 END */
static T_MFW_CPHS_ENTRY 	*vcEntry;
static UBYTE			simStatus;
static UBYTE			alsData;
static UBYTE			idxLevel;
static UBYTE			startIdx;
static UBYTE			cphsUpdate = FALSE;
static UINT16			cphsPrevRead = 0;

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


   PURPOSE :   initialize for CPHS management

*/

void cphs_init(void)
{
  TRACE_FUNCTION("cphs_init()");

  cphsStatus = CPHS_NotPresent;
  simStatus  = MFW_SIMOP_UNKNOWN;
  mfwCommand[MfwTypCphs] = (MfwCb) cphsCommand;
}


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


   PURPOSE :

*/

void cphs_exit(void)
{
  TRACE_FUNCTION ("cphs_exit()");
}


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


   PURPOSE :  create event for CPHS management

*/

MfwHnd cphs_create (MfwHnd hWin, MfwEvt event, MfwCb cbfunc)
{
  MfwHdr      *hdr;
  T_MFW_CPHS  *cphs_para;
  MfwHdr *insert_status=0;

  TRACE_FUNCTION("cphs_create()");

  hdr = (MfwHdr *) mfwAlloc(sizeof(MfwHdr));
  cphs_para = (T_MFW_CPHS *) mfwAlloc(sizeof(T_MFW_CPHS));

  if (!hdr || !cphs_para)
  	{
    	TRACE_ERROR("ERROR: cphs_create() Mem Alloc Failed.");
			
	   	if(hdr)
   			mfwFree((U8*)hdr,sizeof(MfwHdr));

   		if(cphs_para)
   			mfwFree((U8*)cphs_para,sizeof(T_MFW_CPHS));
   		
	   	return FALSE;
  	}

  cphs_para->emask = event;
  cphs_para->handler = cbfunc;

  hdr->data = cphs_para;	      /* store parameter in node  */
  hdr->type = MfwTypCphs;	      /* type of event handler	  */

  insert_status= mfwInsert((MfwHdr *) hWin,hdr);
  if(!insert_status)
	{
  		TRACE_ERROR("ERROR: cphs_create() Failed to Install Handler. ");
   		mfwFree((U8*)hdr,sizeof(MfwHdr));
   		mfwFree((U8*)cphs_para,sizeof(T_MFW_CPHS));
		return 0;
  	}
    return insert_status;
}

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


   PURPOSE :   delete a event for CPHS management

*/

MfwRes cphs_delete (MfwHnd h)
{
  TRACE_FUNCTION("cphs_delete()");

  if (!h || !((MfwHdr *) h)->data)
    return MfwResIllHnd;

  if (!mfwRemove((MfwHdr *) h))
    return MfwResIllHnd;

  mfwFree(((MfwHdr *) h)->data,sizeof(T_MFW_CPHS));
  mfwFree(h,sizeof(MfwHdr));

  return MfwResOk;
}

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

  PURPOSE : dispatch CPHS management signal

*/

static int cphs_sign_exec (MfwHdr *cur_elem, MfwEvt event,
			   T_MFW_CPHS_PARA * para)
{
  TRACE_FUNCTION("cphs_sign_exec()");

  while (cur_elem)
  {
    if (cur_elem->type == MfwTypCphs)
    {
      T_MFW_CPHS *cphs_data;

      cphs_data = (T_MFW_CPHS *) cur_elem->data;
      if (cphs_data->emask & event)
      {
	cphs_data->event = event;
	switch (event)
	{
	  case E_CPHS_IND:  
	    memcpy(&cphs_data->para.stat, para, sizeof(T_MFW_CPHS_STATUS));
	    break;
	  case E_CPHS_OP_NAME:	
	    memcpy(&cphs_data->para.oper_name, para, sizeof(T_MFW_CPHS_OP_NAME));
	    break;
	  case E_CPHS_GET_VC_NUM:  
	    memcpy(&cphs_data->para.vc_entry, para, sizeof(T_MFW_CPHS_VC_NUM));
	    break;
	  case E_CPHS_SET_VC_NUM:  
	    memcpy(&cphs_data->para.result, para, sizeof(UBYTE));
	    break;
	  case E_CPHS_GET_VC_STAT:  
	    memcpy(&cphs_data->para.vc_status, para, sizeof(T_MFW_CPHS_VC_STAT));
	    break;
	  case E_CPHS_SET_VC_STAT:  
	    memcpy(&cphs_data->para.result, para, sizeof(UBYTE));
	    break; 
	  case E_CPHS_GET_DV_STAT:  
	    memcpy(&cphs_data->para.dv_status, para, sizeof(T_MFW_CPHS_DV_STAT));
	    break;
	  case E_CPHS_SET_DV_STAT:  
	    memcpy(&cphs_data->para.result, para, sizeof(UBYTE));
	    break;
	  case E_CPHS_GET_ALS_STATUS:  
	    memcpy(&cphs_data->para.als_status, para, sizeof(T_MFW_CPHS_ALS_STATUS));
	    break;
	  case E_CPHS_SET_LINE:  
	    memcpy(&cphs_data->para.result, para, sizeof(UBYTE));
	    break;
	  case E_CPHS_GET_CSP:	
	    memcpy(&cphs_data->para.csp, para, sizeof(T_MFW_CPHS_CSP));
	    break;
	  case E_CPHS_GET_INFO_LIST:  
	    memcpy(&cphs_data->para.num_list, para, sizeof(T_MFW_CPHS_INFONUM_LIST));
	    break;
	  case E_CPHS_GET_INFO_NUM:  
	    memcpy(&cphs_data->para.info_entry, para, sizeof(T_MFW_CPHS_INFONUM_ENTRY));
	    break;
	 case E_CPHS_GET_SIM_FIELD://MC added for generic read function
	    memcpy(&cphs_data->para.read_sim_entry, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY));
	    break;
	case E_CPHS_SET_SIM_FIELD://MC added for generic read function
	    memcpy(&cphs_data->para.read_sim_entry, para, sizeof(T_MFW_CPHS_READ_SIM_ENTRY));
	    break;


	}
	if (cphs_data->handler)
	{
	  // store current mfw elem
	  current_mfw_elem = cur_elem;

	  if ((*(cphs_data->handler)) (cphs_data->event, (void *) &cphs_data->para))
	    return TRUE;
	}
      }
    }
    cur_elem = cur_elem->next;
  }

  return FALSE;
}

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

  PURPOSE : Send a signal

*/

static void cphs_signal (MfwEvt event, void *para)
{	
/*MC, SPR 1389, we have to enable the display whenever 
	we send an event up to the MMI*/
//UBYTE temp = dspl_Enable(0);

  TRACE_FUNCTION("cphs_signal()");

  if (mfwSignallingMethod EQ 0)
  {
    if (mfwFocus)
      if (cphs_sign_exec(mfwFocus,event,para))
      { //dspl_Enable(temp);/*MC, SPR 1389*/
		return;
      }
    if (mfwRoot)
      cphs_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 (cphs_sign_exec (h, event, para))
      {	//dspl_Enable(temp);/*MC, SPR 1389*/
		return;
      }

      /*
       * All windows tried inclusive root
       */
      if (h == mfwRoot)
      {	//dspl_Enable(temp);/*MC, SPR 1389*/
		return;
      }

      /*
       * get parent window
       */
      h = mfwParent(mfwParent(h));
      if(h)
	h = ((MfwWin * )(h->data))->elems;
    } 
    cphs_sign_exec(mfwRoot,event,para);
  }
  //dspl_Enable(temp);/*MC, SPR 1389*/
}

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

  PURPOSE : Check whether CPHS is supported.

*/

void cphs_support_check (void)
{
  TRACE_FUNCTION ("cphs_support_check()");

  /* Read CPHS information filed (6F16 - 3 bytes) from SIM card */
  if (!cphs_read_sim_dat(SIM_CPHS_CINF, NOT_PRESENT_8BIT, MFW_CPHS_INFO_SIZE))
  {
   /* Read failed */
   /*MC-CONQUEST5999->6007, 20/05/2002, set status to ERR rather than NotPresent*/
    cphsStatus = CPHS_ERR;
    TRACE_EVENT("CPHS, error reading support indication");
    cphs_signal(E_CPHS_IND, &cphsStatus);
  }    
}

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

  PURPOSE : Request the Configuration of CPHS fields

*/

T_MFW cphs_config (T_MFW_CPHS_INFO *cphs_info)
{
  TRACE_FUNCTION ("cphs_config()");

  if (cphs_info NEQ NULL    /*	AND
      cphsStatus EQ CPHS_OK */	    )
  {
    cphs_info->phase = cphsPhase;
    cphs_info->csp   = cphs_ssc(MFW_CPHS_CSP,	       cphsServTab);
    cphs_info->mbNum = cphs_ssc(MFW_CPHS_MB_NUMBER,    cphsServTab);

    if (cphsPhase EQ 1) /* phase 1 only */
      cphs_info->sst = cphs_ssc(MFW_CPHS_SST,	       cphsServTab);
    else		/* not support */
      cphs_info->sst = NO_ALLOCATED;

    if (cphsPhase EQ 2) /* phase 2 only */
    {
      cphs_info->opNS  = cphs_ssc(MFW_CHPS_NAME_SHORT,	 cphsServTab);
      cphs_info->iNum  = cphs_ssc(MFW_CHPS_INFO_NUMBERS, cphsServTab);
    }
    else		/* not support */
    {
      cphs_info->opNS  = NO_ALLOCATED;
      cphs_info->iNum  = NO_ALLOCATED;
    }
  }
  return cphsStatus;
}

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

  PURPOSE : Request the network operator name

*/

T_MFW cphs_operator_name (void)
{
  TRACE_FUNCTION ("cphs_operator_name()");

  /* Check CPHS support status */
  if (cphsStatus EQ CPHS_NotPresent) 
    return cphsStatus;

  /* Read operator name sring */
  if (!cphs_read_sim_dat(SIM_CPHS_ONSTR, NOT_PRESENT_8BIT, MFW_CPHS_ONS_SIZE))
  {
    /* Read operator name sring failed */
    opName.longName.len = 0;

    /* Read operator name shortform */
    if ((cphsPhase NEQ 2)							   OR
	(cphs_ssc(MFW_CHPS_NAME_SHORT,	 cphsServTab) NEQ ALLOCATED_AND_ACTIVATED) OR
	!cphs_read_sim_dat(SIM_CPHS_ONSHF, NOT_PRESENT_8BIT, MFW_CPHS_ONSF_SIZE)		  )
    {
      /* Read operator name shortform failed. 
	 Send event with empty info to MMI   */
      opName.shortName.len = 0;
      cphs_signal(E_CPHS_OP_NAME, &opName);
    }
  }
  return cphsStatus;
}

/*
+--------------------------------------------------------------------+

⌨️ 快捷键说明

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