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

📄 mfw_cphs.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
+-----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)	MODULE	: MFW_CPHS		|
| STATE   : code			ROUTINE : cphs_read_information |
+-----------------------------------------------------------------------+

  PURPOSE : Read CPHS information

*/

void cphs_read_information(SHORT errCode, UBYTE *data, UBYTE dataLen)
{
  UBYTE *ptr;
/* PATCH VO 22.01.01: copy CPHS service table according to 
   the actual length in the SIM card			    */
  UBYTE len; 
/* PATCH VO 22.01.01 END */

  TRACE_FUNCTION ("cphs_read_information()");

  ptr = data;
/* PATCH VO 22.01.01: copy CPHS service table according to 
   the actual length in the SIM card			    */
  len = dataLen; 
  memset(cphsServTab, 0, sizeof(cphsServTab));
/* PATCH VO 22.01.01 END */
  if ( errCode NEQ SIM_NO_ERROR    OR
       ptr EQ NULL		   OR
       dataLen <= 0) /* PATCH VO 22.01.01: not check a certain length */
  {
    cphs_signal(E_CPHS_IND, &cphsStatus);
  }
  else
  {
    cphsPhase = *ptr; 
    len--;
    if (len > 0)
    {
      ptr++;
      memcpy (cphsServTab, ptr, MINIMUM(len, CPHS_SERVICE_TABLE));
    }
/* PATCH VO 22.01.01 END */
    cphsStatus = CPHS_OK;
	TRACE_EVENT("CPHS supported");
    cphs_signal(E_CPHS_IND, &cphsStatus);
  }
}

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

  PURPOSE : Read operator name short form

*/

void cphs_read_ons(SHORT errCode, UBYTE *data, UBYTE dataLen)
{
  UBYTE *ptr;

  TRACE_FUNCTION ("cphs_read_ons()");

  ptr = data;
  if ( errCode NEQ SIM_NO_ERROR    OR
       ptr EQ NULL		   OR
       // dataLen < MFW_CPHS_ONS_SIZE  )
       dataLen <= 0  ) /* PATCH VO 22.01.01: not check a certain length */
  {
    opName.longName.len = 0;
  }
  else
  {
    cmhPHB_getMfwTagNt(ptr, (UBYTE)MINIMUM(LONG_NAME, dataLen), 
		       opName.longName.data, &opName.longName.len);
    opName.longName.dcs = MFW_DCS_SIM;

    /* 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)		  )
    {
      opName.shortName.len = 0;
      if (opName.longName.len != 0)
	TRACE_EVENT("Got a long name!!!");
      cphs_signal(E_CPHS_OP_NAME, &opName);
    }
  }
}

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

  PURPOSE : Read operator name short form

*/

void cphs_read_onsf(SHORT errCode, UBYTE *data, UBYTE dataLen)
{
  UBYTE *ptr;

  TRACE_FUNCTION ("cphs_read_onsf()");

  ptr = data;
  if ( errCode NEQ SIM_NO_ERROR    OR
       ptr EQ NULL		   OR
       dataLen < MFW_CPHS_ONSF_SIZE )
  {
    opName.shortName.len = 0;
  }
  else
  {
    cmhPHB_getMfwTagNt(ptr, MFW_CPHS_ONSF_SIZE, 
		       opName.shortName.data, &opName.shortName.len);
    opName.shortName.dcs = MFW_DCS_SIM;
    TRACE_EVENT("Got a short Name");
  }

  cphs_signal(E_CPHS_OP_NAME, &opName);
}

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

  PURPOSE : Read mailbox numbers

*/

void cphs_read_mbn(SHORT table_id)
{
  UBYTE*	pData;	       /* points to data buffer    */
  UBYTE 	alphaLen;
  UBYTE 	dataLen;
  UBYTE 	recNr;
  T_ACI_TOA	type;

  TRACE_FUNCTION ("cphs_read_mbn()");

  pData   = simShrdPrm.atb[table_id].exchData;
  dataLen = simShrdPrm.atb[table_id].dataLen;
  recNr   = simShrdPrm.atb[table_id].recNr;

  if ( simShrdPrm.atb[table_id].errCode NEQ SIM_NO_ERROR  OR
       pData EQ NULL					  OR
       dataLen	 <  MFW_CPHS_MIN_MBN_SIZE )
  {
    if (recNr <= 1)
    {
      cphs_read_eeprom_mailbox();
      return;
    }
    else
      cphs_signal(E_CPHS_GET_VC_NUM, &mbNum);
  }
  else /* no read error */
  {
    if (recNr EQ 1)
    {
      maxRec = simShrdPrm.atb[table_id].recMax;
    }
    alphaLen = dataLen - MFW_CPHS_MIN_MBN_SIZE;

    /* Copy/encode data */
    if (*(pData + alphaLen + 2) NEQ 0xFF)
    {
      mbNum.entries[mbNum.count].index = recNr; 
      cmhPHB_getMfwTagNt(pData, alphaLen, 
			 mbNum.entries[mbNum.count].alpha.data, 
			 &mbNum.entries[mbNum.count].alpha.len);
      pData += alphaLen;

      cmhPHB_getAdrStr ( (CHAR *)mbNum.entries[mbNum.count].number,
			 PHB_MAX_LEN - 1,
			 pData + 2,
			 *pData );

      cmhPHB_toaDmrg ( *( pData + 1 ), &type );
      mbNum.entries[mbNum.count].ton = phb_cvtTon(type.ton);
      mbNum.entries[mbNum.count].npi = phb_cvtNpi(type.npi);
      pData += 12;

      if ( *pData NEQ 0xFF )
      {
	/* read bearer capability EF */
	/* return; */
      }
      mbNum.count++;
    }
    recNr++; 
    if (recNr > maxRec) 
    {	TRACE_EVENT("got CPHS MAilbox nos");
      cphs_signal(E_CPHS_GET_VC_NUM, &mbNum);
    }
    else
    {
      /* Read the next entry */
      if (!cphs_read_sim_rcd(SIM_CPHS_MBXN, recNr, dataLen)) 
	cphs_signal(E_CPHS_GET_VC_NUM, &mbNum);
    }
  }
}

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

  PURPOSE : Read voice message waiting flag

*/

void cphs_read_mbs(SHORT errCode, UBYTE *data, UBYTE dataLen)
{
  UBYTE *ptr;
  int	i; /* PATCH VO 22.01.01 */

  TRACE_FUNCTION ("cphs_read_mbs()");

  ptr = data;
  if ( errCode NEQ SIM_NO_ERROR    OR
       ptr EQ NULL		   OR
       dataLen <= 0  )	/* PATCH VO 22.01.01: not check a certain length */
  {
    mbStatus.result = MFW_SIMOP_READ_ERR;
  }
  else
  {
    memset(&mbStatus, MFW_CFLAG_NotPresent, sizeof(mbStatus));
    mbStatus.result = MFW_SIMOP_READ_OK;
    for (i=0; i<dataLen; i++)
    {
      switch (i)
      {
	case 0:
	  mbStatus.line1  = ptr[i] & 0x0F;
	  mbStatus.line2  = ( ptr[i] >> 4 ) & 0x0F;
	  break;
	case 1:
	  mbStatus.fax	  = ptr[i] & 0x0F;
	  mbStatus.data   = ( ptr[i] >> 4 ) & 0x0F;
	  break;
	default:
	  break;
      }
    }
/* PATCH VO 22.01.01 END */
  }
	TRACE_EVENT("Reading Mailboxes");
  cphs_signal(E_CPHS_GET_VC_STAT, &mbStatus);
}

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

  PURPOSE : Read call forwarding flag

*/

void cphs_read_cff(SHORT errCode, UBYTE *data, UBYTE dataLen)
{
  UBYTE *ptr;
  int	i; /* PATCH VO 22.01.01 */

  TRACE_FUNCTION ("cphs_read_cff()");

  ptr = data;
  if ( errCode NEQ SIM_NO_ERROR    OR
       ptr EQ NULL		   OR
       dataLen <= 0  )	/* PATCH VO 22.01.01: not check a certain length */
  {
    dvStatus.result = MFW_SIMOP_READ_ERR;
  }
  else
  {
    memset(&dvStatus, MFW_CFLAG_NotPresent, sizeof(dvStatus));
    dvStatus.result = MFW_SIMOP_READ_OK;
    for (i=0; i<dataLen; i++)
    {
      switch (i)
      {
	case 0:
	  dvStatus.line1  = ptr[i] & 0x0F;
	  dvStatus.line2  = ( ptr[i] >> 4 ) & 0x0F;
	  break;
	case 1:
	  dvStatus.fax	  = ptr[i] & 0x0F;
	  dvStatus.data   = ( ptr[i] >> 4 ) & 0x0F;
	  break;
	default:
	  break;
      }
    }
/* PATCH VO 22.01.01 END */
  }
TRACE_EVENT("CPHS valid call forwrading status");
  cphs_signal(E_CPHS_GET_DV_STAT, &dvStatus);
}

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

  PURPOSE : Read alternate line service

*/

void cphs_read_als(SHORT errCode, UBYTE *data, UBYTE dataLen)
{

  TRACE_FUNCTION ("cphs_read_als()");
}

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

  PURPOSE : Read alternate line service status

*/

void cphs_read_alss(SHORT errCode, UBYTE *data, UBYTE dataLen)
{

  TRACE_FUNCTION ("cphs_read_alss()");

}

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

  PURPOSE : Read customer service profile

*/

void cphs_read_csp(SHORT errCode, UBYTE *data, UBYTE dataLen)
{
  UBYTE *ptr;
  UBYTE flag;
  int	i;

  TRACE_FUNCTION ("cphs_read_csp()");

  ptr = data;
  if ( errCode NEQ SIM_NO_ERROR    OR
       ptr EQ NULL		   OR
       dataLen <= 0	 )  /* PATCH VO 22.01.01: not check a certain length */
  {
    if (simStatus EQ MFW_SIMOP_READ_OK) /* Used for read information numbers */  
    {
      simStatus = MFW_SIMOP_UNKNOWN;
      cphs_signal(E_CPHS_GET_INFO_LIST, &numList);
    }
    else 
    {
      csProfile.result = MFW_SIMOP_READ_ERR;
      memset(csProfile.csp, 0, sizeof(csProfile.csp));
      cphs_signal(E_CPHS_GET_CSP, &csProfile);
    }
  }
  else
  {
    if (simStatus EQ MFW_SIMOP_READ_OK) /* Used for read information numbers */
    {
      simStatus = MFW_SIMOP_UNKNOWN;

      /* check the service group code */
      flag = 0;
      for (i = 0; i < dataLen; i += 2) /* PATCH VO 22.01.01: use the actual length in the SIM card */
      {
	if (ptr[i] EQ 0xD5 AND ptr[i+1] EQ 0xFF)
	  flag = 1;
      }
      if (!flag)
      {
	cphs_signal(E_CPHS_GET_INFO_LIST, &numList);
	return;
      }

      /* Read the first information numbers record */
      if (!cphs_read_sim_rcd(SIM_CPHS_INFN, 1, 0))  
	cphs_signal(E_CPHS_GET_INFO_LIST, &numList);
      else
	cphsPrevRead = SIM_CPHS_INFN;
    }
    else
    {
      csProfile.result = MFW_SIMOP_READ_OK;
      TRACE_EVENT("CPHS valis CSP");
      memcpy(csProfile.csp, ptr, sizeof(csProfile.csp));
      cphs_signal(E_CPHS_GET_CSP, &csProfile);
    }
  }
}

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

  PURPOSE : Read customer service profile

*/

void cphs_req_info_num_read(UBYTE rcd_num, UBYTE dataLen)
{
  TRACE_FUNCTION ("cphs_req_info_num_read()");

  if (rcd_num > maxRec)
    cphs_signal(E_CPHS_GET_INFO_LIST, &numList);
  else
  {
    if (cphsPrevRead == SIM_CPHS_INFN)
    {
      if (!cphs_read_sim_rcd(SIM_CPHS_INFN, rcd_num, dataLen)) 
      {
	cphs_signal(E_CPHS_GET_INFO_LIST, &numList);
      }
      else
      {
	cphsPrevRead = SIM_CPHS_INFN;
      }
    }
    else
    {
      if (cphsPrevRead == SIM_CPHS_INFN2)
      {
	if (!cphs_read_sim_rcd(SIM_CPHS_INFN2, rcd_num, dataLen)) 
	{
	  cphs_signal(E_CPHS_GET_INFO_LIST, &numList);
	}
	else
	{
	  cphsPrevRead = SIM_CPHS_INFN2;
	}
      }
    }
  }
}

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

  PURPOSE : Read first record of information numbers

*/

void cphs_read_first_info_num(SHORT table_id)
{
  UBYTE 	dataLen;

  TRACE_FUNCTION ("cphs_read_first_info_num()");

  if ( simShrdPrm.atb[table_id].errCode NEQ SIM_NO_ERROR ) /* VO patch 040501 - remove dataLen and pData check */
  {
    if (simStatus EQ MFW_SIMOP_READ_OK) /* Read entry of information numbers */
    { 
      simStatus = MFW_SIMOP_UNKNOWN;
      infoEntry.result = MFW_SIMOP_READ_ERR;
      cphs_signal(E_CPHS_GET_INFO_NUM, &infoEntry);
    }
    else
    {// if we are here then its possible the read of 7F20 6F19 failed.

     if (cphsPrevRead == SIM_CPHS_INFN)
     {
      if (!cphs_read_sim_rcd(SIM_CPHS_INFN2, 1, 0)) 
      {
	infoEntry.result = MFW_SIMOP_READ_ERR;
	cphs_signal(E_CPHS_GET_INFO_LIST, &infoEntry);
      }
      else
      {
	cphsPrevRead = SIM_CPHS_INFN2;
      }
     }

⌨️ 快捷键说明

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