📄 mfw_cphs.c
字号:
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 + -