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

📄 mfw_cphs.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	if ( simShrdPrm.atb[table_id].errCode EQ SIM_NO_ERROR )
	{
	  dataLen = simShrdPrm.atb[table_id].dataLen;
	  /* Write call forwarding flag. 
	     When this writing failed, send event with "write error" parameter to MMI */
	  if (!cphs_write_sim_dat(SIM_CPHS_CFF, dvData, dataLen)) 
	  {
	    result    = MFW_SIMOP_WRITE_ERR;
	    cphs_signal(E_CPHS_SET_DV_STAT, &result);
	  }
	}
	else
	{
	  result = MFW_SIMOP_WRITE_ERR;
	  cphs_signal(E_CPHS_SET_VC_STAT, &result);
	}
      }
      else
/* PATCH VO 22.01.01 end */
      cphs_read_cff (simShrdPrm.atb[table_id].errCode,
		     simShrdPrm.atb[table_id].exchData,
		     simShrdPrm.atb[table_id].dataLen);
      break;


    case SIM_CPHS_CSP:	/* customer service profile */
      cphs_read_csp (simShrdPrm.atb[table_id].errCode,
		     simShrdPrm.atb[table_id].exchData,
		     simShrdPrm.atb[table_id].dataLen);
      break;

    default:
      break;
  }
  simShrdPrm.atb[table_id].ntryUsdFlg = FALSE;
}

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


   PURPOSE :   Request to write SIM card.

*/

BOOL cphs_write_sim_dat(USHORT data_id, UBYTE *data, UBYTE length)
{
  T_ACI_RETURN res;

  TRACE_FUNCTION ("cphs_write_sim_dat()");

  res = cmhSIM_WriteTranspEF (CMD_SRC_NONE,
			      AT_CMD_NONE,
			      data_id,
			      0,
			      length,
			      data,
			      cphs_write_sim_dat_cb);

  if (res NEQ AT_EXCT)
    return FALSE;

  return TRUE;
}

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


   PURPOSE :   callback of SIM card writing.

*/

void cphs_write_sim_dat_cb(SHORT table_id)
{
  UBYTE result;
	char debug[30];
  TRACE_FUNCTION ("sim_write_sim_dat_cb()");

 
	sprintf(debug, "SIM Error code!!!%d", simShrdPrm.atb[table_id].errCode);
  TRACE_EVENT(debug);
  switch (simShrdPrm.atb[table_id].reqDataFld)
  {
    case SIM_CPHS_VMW:	/* voice message waiting flag */
      if ( simShrdPrm.atb[table_id].errCode EQ SIM_NO_ERROR )
      {
	result = MFW_SIMOP_WRITE_OK;
	cphs_signal(E_CPHS_SET_VC_STAT, &result);
      }
      else
      {
	result = MFW_SIMOP_WRITE_ERR;
	cphs_signal(E_CPHS_SET_VC_STAT, &result);
      }
      break;

    case SIM_CPHS_CFF:	/* call forwarding flag */
      if ( simShrdPrm.atb[table_id].errCode EQ SIM_NO_ERROR )
      {
	result = MFW_SIMOP_WRITE_OK;
	cphs_signal(E_CPHS_SET_DV_STAT, &result);
      }
      else
      {
	result = MFW_SIMOP_WRITE_ERR;
	cphs_signal(E_CPHS_SET_DV_STAT, &result);
      }
      break;
   
    default:
      break;
  }
  simShrdPrm.atb[table_id].ntryUsdFlg = FALSE;
}

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


   PURPOSE :   Request to read SIM card.

*/

BOOL cphs_read_sim_rcd(USHORT data_id, UBYTE rcd_num, UBYTE len)
{
  T_ACI_RETURN res;
  UBYTE        dataLen;

  TRACE_FUNCTION ("cphs_read_sim_rcd()");

  if (rcd_num EQ 1)
      dataLen  = UCHAR_MAX;
    else
      dataLen  = len;

  res = cmhSIM_ReadRecordEF ( CMD_SRC_NONE,
			      AT_CMD_NONE,
			      data_id,
			      rcd_num,
			      dataLen,
			      NULL,
			      cphs_read_sim_rcd_cb);

  if (res NEQ AT_EXCT)
    return FALSE;

  return TRUE;
}

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


   PURPOSE :   Request to read SIM card.

*/

void cphs_read_sim_rcd_cb (SHORT table_id)
{
  UBYTE dataLen;
  char debug[25];
sprintf(debug, "SIM Error code!!!%d", simShrdPrm.atb[table_id].errCode);
  
  TRACE_FUNCTION ("cphs_read_sim_rcd_cb()");
  TRACE_EVENT(debug);

  switch (simShrdPrm.atb[table_id].reqDataFld)
  {
    case SIM_CPHS_MBXN: /* mailbox numbers */
      if (simStatus EQ MFW_SIMOP_WRITE_OK) 
      {
	/* Determine the size of record, and write a new record.
	   When the writing is not possible, write this mailbox 
	   number in EEPROM.				     */
	simStatus = MFW_SIMOP_UNKNOWN;
	if ( simShrdPrm.atb[table_id].errCode EQ SIM_NO_ERROR )
	{
	  dataLen = simShrdPrm.atb[table_id].dataLen;
	  /* allocate mbnData (sizeof(dataLen)) */
	  cphs_build_mbn_data(mbnData, dataLen);
	  if (!cphs_write_sim_rcd(SIM_CPHS_MBXN, vcEntry->index, 
				mbnData, dataLen)) 
	    cphs_write_eeprom_mailbox(vcEntry);
	}
	else
	  cphs_write_eeprom_mailbox(vcEntry);
      }
      else
	cphs_read_mbn(table_id);
      break;

    case SIM_CPHS_INFN: /* information numbers */
      if (simShrdPrm.atb[table_id].recNr EQ 1)
      {
	/* VO patch 150501 */
	if ((startIdx EQ 1) AND (simStatus EQ MFW_SIMOP_READ_OK)) 
	  cphs_read_info_num(table_id);
	else
	/* VO patch 150501 end */
	  cphs_read_first_info_num(table_id);
      }
      else
	cphs_read_info_num(table_id);
      break;
  
    case SIM_CPHS_INFN2:	 /* information numbers 2 - 7F10 'EA01' selected if SIM_CPHS_INFN '6F19' isn't there*/
      if (simShrdPrm.atb[table_id].recNr EQ 1)
      {
	/* VO patch 150501 */ 
	if ((startIdx EQ 1) AND (simStatus EQ MFW_SIMOP_READ_OK)) 
	  cphs_read_info_num(table_id); 
	else 
	/* VO patch end */
	cphs_read_first_info_num(table_id);
      }
      else
	cphs_read_info_num(table_id);
      break;
    
    default:
      break;
  }
  simShrdPrm.atb[table_id].ntryUsdFlg = FALSE;
}

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


   PURPOSE :   Request to write SIM card.

*/

BOOL cphs_write_sim_rcd(USHORT data_id, UBYTE rcd_num,
			UBYTE *data,	UBYTE dataLen)
{
  T_ACI_RETURN res;

  TRACE_FUNCTION ("cphs_read_sim_rcd()");

  res = cmhSIM_WriteRecordEF (CMD_SRC_NONE,
			      AT_CMD_NONE,
			      data_id,
			      rcd_num,
			      dataLen,
			      data,
			      cphs_write_sim_rcd_cb);

  if (res NEQ AT_EXCT)
    return FALSE;

  return TRUE;
}

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


   PURPOSE :   callback of SIM card writing.

*/

void cphs_write_sim_rcd_cb (SHORT table_id)
{
  UBYTE result;
char debug[30];
  TRACE_FUNCTION ("cphs_write_sim_rcd_cb()");
	sprintf(debug, "SIM Error code!!!%d", simShrdPrm.atb[table_id].errCode);
  TRACE_EVENT(debug);
  switch (simShrdPrm.atb[table_id].reqDataFld)
  {
    case SIM_CPHS_MBXN: /* mailbox numbers */
      if ( simShrdPrm.atb[table_id].errCode EQ SIM_NO_ERROR )
      {
	result = MFW_SIMOP_WRITE_OK;
	cphs_signal(E_CPHS_SET_VC_NUM, &result);
      }
      else
      {
	cphs_write_eeprom_mailbox(vcEntry);
      }
      break;
    
    default:
      break;
  }
  simShrdPrm.atb[table_id].ntryUsdFlg = FALSE;
}

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


   PURPOSE :   Build mailbox number data in SIM format.

*/

void cphs_build_mbn_data(UBYTE *data, UBYTE len)
{
  UBYTE     alphaLen;
  UBYTE     numLen;
  UBYTE     *pNumber;
  UBYTE     i, j;

  TRACE_FUNCTION ("cphs_build_mbn_data()");

  memset(data, MFW_INVALID_SIM_DATA, len);

  /* alpha data */
  if (len <= MFW_CPHS_MIN_MBN_SIZE)
    alphaLen = 0;
  else
    alphaLen = len - MFW_CPHS_MIN_MBN_SIZE;
  i = MINIMUM (alphaLen, vcEntry->alpha.len);

  for ( j = 0; j < i; j++ )
    data[j] = vcEntry->alpha.data[j];
  
  data += alphaLen;

  /* number data and TON/NPI data */
  if ( vcEntry->number[0] EQ '+' )
  {
    vcEntry->ton = TON_International;
    pNumber  = &vcEntry->number[1];
  }
  else
    pNumber  = &vcEntry->number[0];

  cmhPHB_getAdrBcd ( data + 2, &numLen,
		     PHB_MAX_LEN, (CHAR *)pNumber );
  *data      = numLen + 1;
  *(data + 1) = ((( vcEntry -> ton << 4 ) & 0xF0 ) + ( vcEntry -> npi & 0x0F )) | 0x80;

  data += 12;

  /* capability/configuration identifier data and EXT identifier data */
  *data      = 0xFF;
  *(data + 1) = 0xFF;
}

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


   PURPOSE :   Check CPHS service status.

*/

UBYTE cphs_ssc (UBYTE nr, UBYTE * serv_table)
{
  UBYTE value;

  TRACE_FUNCTION ("cphs_ssc()");

  serv_table = serv_table + (nr-1)/4;
  value      = * serv_table;

  value = value >> (((nr-1) & 3) * 2);
  value = value & 3;
 
  return value;
}

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

  PURPOSE : handle mfw windows command

*/

static int cphsCommand (U32 cmd, void *h)
{
  switch (cmd)
  {
    case MfwCmdDelete:		    /* delete me		*/
      if (!h)
	return 0;
      cphs_delete(h);
      return 1;
    default:
      break;
  }

  return 0;
}

#ifdef SIM_TOOLKIT
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)   MODULE  : MFW_CPHS		      |
| STATE   : code		   ROUTINE : cphs_sat_file_update     |
+---------------------------------------------------------------------+

  PURPOSE : SIM file change indication

*/

void cphs_sat_file_update(USHORT dataId)
{
  TRACE_FUNCTION("cphs_sat_file_update()");

  cphsUpdate = TRUE;
  switch (dataId)
  {
    case SIM_CPHS_CINF:
      if (!cphs_read_sim_dat(SIM_CPHS_CINF, NOT_PRESENT_8BIT, MFW_CPHS_INFO_SIZE))
      {
	satUpdateFiles(TRUE, SIM_CPHS_CINF);
      }
      break;
    default:
      break;
  }
}
#endif

#ifdef SIM_TOOLKIT
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)   MODULE  : MFW_CPHS		      |
| STATE   : code		   ROUTINE : cphs_update_info_cnf     |
+---------------------------------------------------------------------+

  PURPOSE : call back for SIM file read 

*/

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

  TRACE_FUNCTION ("cphs_update_info_cnf()");

  cphsUpdate = FALSE; /* reset flag */
  ptr = data;
  if ( errCode NEQ SIM_NO_ERROR    OR
       ptr EQ NULL		   OR
       dataLen < MFW_CPHS_INFO_SIZE)
  {
    satUpdateFiles(TRUE, SIM_CPHS_CINF);
  }
  else
  {
    cphsPhase = *ptr; 
    ptr++;
    memcpy (cphsServTab, ptr, CPHS_SERVICE_TABLE*sizeof(UBYTE));
    cphsStatus = CPHS_OK;
    satUpdateFiles ( TRUE, SIM_CPHS_CINF );
  }
}
#endif
/*
+----------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) 	MODULE: MFW_CPHS	       |
| STATE  : code 			ROUTINE: Read_Sim		|
+----------------------------------------------------------------------+


   PURPOSE :   Request to read SIM card.

*/

BOOL Read_Sim(USHORT dat_id, USHORT offset, UBYTE max_len, UBYTE *exDat)
{
  T_ACI_RETURN res;

⌨️ 快捷键说明

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