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