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