📄 mfw_em.c
字号:
| PROJECT : MMI-Framework (8417) MODULE : MFW_EM |
| STATE : code ROUTINE : emCommand |
+--------------------------------------------------------------------+
PURPOSE : handle mfw windows command
*/
static int emCommand (U32 cmd, void *h)
{TRACE_EVENT("emCommand()");
switch (cmd)
{
case MfwCmdDelete: /* delete me */
if (!h)
return 0;
em_delete(h);
return 1;
default:
break;
}
return 0;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_EM |
| STATE : code ROUTINE : em_delete |
+--------------------------------------------------------------------+
PURPOSE : delete EM event handler
*/
MfwRes em_delete (MfwHnd h)
{
TRACE_EVENT("em_delete()");
if (!h || !((MfwHdr *) h)->data)
return MfwResIllHnd;
if (!mfwRemove((MfwHdr *) h))
return MfwResIllHnd;
mfwFree((U8 *) ((MfwHdr *) h)->data,sizeof(T_MFW_EM));
mfwFree((U8 *) h,sizeof(MfwHdr));
return MfwResOk;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_EM |
| STATE : code ROUTINE : Mfw_em_sign_exec |
+--------------------------------------------------------------------+
PURPOSE : send event to MMI
*/
int Mfw_em_sign_exec(T_MFW_HDR * cur_elem, T_MFW_EVENT event,T_MFW_EM_PARA *para)
{
TRACE_EVENT("Mfw_em_sign_exec()");
while (cur_elem)
{
if (cur_elem->type == MfwTypEm)
{
T_MFW_EM *em_data;
em_data = (T_MFW_EM *) cur_elem->data;
if (em_data->emask & event)
{
em_data->event = event;
switch (event)
{
case EM_MOBILE_INFO:
memcpy(&em_data->para.MobileInfo,
para,sizeof(MFW_EM_Mobile_Info));
break;
case EM_SERVING_CELL_PARAMS:
memcpy(&em_data->para.SCInfo,
para,sizeof(MFW_EM_Serving_Cell_Parameters));
break;
case EM_NEIGHBOURING_CELL_PARAMS:
memcpy(&em_data->para.NCInfo,
para,sizeof(MFW_EM_Neighbour_Cell_Parameters));
break;
case EM_LOCATION_PARAMS:
memcpy(&em_data->para.LocInfo,
para,sizeof(MFW_EM_Location_Parameters));
break;
case EM_CIPH_HOP_DTX_PARAMS:
memcpy(&em_data->para.CHDTXInfo,
para,sizeof(MFW_EM_Ciph_hop_DTX_Parameters));
break;
case EM_GPRS_PARAMS:
memcpy(&em_data->para.GPRSInfo,
para,sizeof(MFW_EM_GPRS_Parameter));
break;
}
if (em_data->handler)
{
// store current mfw elem
current_mfw_elem = cur_elem;
if ((*(em_data->handler))(em_data->event,
(void *) &em_data->para))
return TRUE;
}
}
}
cur_elem = cur_elem->next;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_EM |
| STATE : code ROUTINE : Mfw_em_signal |
+--------------------------------------------------------------------+
PURPOSE : sends event to MMi via Mfw_em_sign_exec()
*/
void Mfw_em_signal(MfwEvt event, void *para)
{
UBYTE temp = dspl_Enable(0);
TRACE_EVENT ("em_signal()");
if (mfwSignallingMethod EQ 0)
{
if (mfwFocus)
if (Mfw_em_sign_exec(mfwFocus,event,para))
{
dspl_Enable(temp);
return;
}
if (mfwRoot)
Mfw_em_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 (Mfw_em_sign_exec (h, event, para))
{
dspl_Enable(temp);
return;
}
/*
* All windows tried inclusive root
*/
if (h == mfwRoot)
{
dspl_Enable(temp);
return;
}
/*
* get parent window
*/
h = mfwParent(mfwParent(h));
if(h)
h = ((MfwWin * )(h->data))->elems;
}
Mfw_em_sign_exec (mfwRoot, event, para);
}
dspl_Enable(temp);
return;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_EM |
| STATE : code ROUTINE : Mfw_em_cb |
+--------------------------------------------------------------------+
PURPOSE : Handles events from the ACI EM driver
*/
void Mfw_em_cb(T_DRV_SIGNAL_EM* signal)
{
TRACE_EVENT_P1("Mfw_em_cb, signalType: %d", signal->SignalType);
switch(signal->SignalType)
{
case EM_SUBCLASS_SC:
{ /*copy Serving Cell Information to appropriate data structure*/
T_EM_SC_INFO_CNF *serv_cell = (T_EM_SC_INFO_CNF*)&signal->UserData.sc;
MfwEmData->SCInfo.arfcn = serv_cell->arfcn;
MfwEmData->SCInfo.RSSI = serv_cell->rxlev;
MfwEmData->SCInfo.RXQ = serv_cell->rxqual_f;
MfwEmData->SCInfo.RLT = serv_cell->rlt;
/* copy Location Info*/
MfwEmData->LocInfo.LAC = serv_cell->lac;
/*send event to MMI*/
Mfw_em_signal(EM_SERVING_CELL_PARAMS, (void*)&MfwEmData->SCInfo);
}
break;
case EM_SUBCLASS_SC_GPRS:
{ /*MC, SPR 1554 added code to copy NMOinto GPRS data structure*/
T_EM_SC_GPRS_INFO_CNF *gprs_info = (T_EM_SC_GPRS_INFO_CNF*)&signal->UserData.sc_gprs;
MfwEmData->GPRSInfo.NMO = gprs_info->nmo;
Mfw_em_signal(EM_GPRS_PARAMS, (void*)&MfwEmData->GPRSInfo);
}
break;
case EM_SUBCLASS_NC:
{ T_EM_NC_INFO_CNF *neighbour_cell = (T_EM_NC_INFO_CNF*)&signal->UserData.nc;
MfwEmData->NCInfo.NUM = neighbour_cell->no_ncells;
memcpy(MfwEmData->NCInfo.arfcn, neighbour_cell->arfcn_nc, 6*sizeof(USHORT));
memcpy(MfwEmData->NCInfo.RSSI, neighbour_cell->rxlev_nc, 6*sizeof(UBYTE));
Mfw_em_signal(EM_NEIGHBOURING_CELL_PARAMS, (void*)&MfwEmData->NCInfo);
}
case EM_SUBCLASS_LOC_PAG:
{ MfwEmData->LocInfo.LUP = signal->UserData.log_pag.t3212;
/*Convert MCC & MNC to ASCII strings from BCD*/
utl_BCD2DialStr (signal->UserData.log_pag.mcc, MfwEmData->LocInfo.MCC, 3);
utl_BCD2DialStr (signal->UserData.log_pag.mnc, MfwEmData->LocInfo.MNC, 3);
Mfw_em_signal(EM_LOCATION_PARAMS, (void*)&MfwEmData->LocInfo);
}
case EM_SUBCLASS_CIPH_HOP_DTX:
{ MfwEmData->CHDTXInfo.ciph_status = signal->UserData.cip.ciph_stat;
MfwEmData->CHDTXInfo.HSN = signal->UserData.cip.hsn;
//!!!!!HOPPING CHANNELS!!!!!!!!!!!!!!
MfwEmData->CHDTXInfo.DTX_status = signal->UserData.cip.dtx_stat;
Mfw_em_signal(EM_CIPH_HOP_DTX_PARAMS, (void*)&MfwEmData->CHDTXInfo);
}
case EM_SUBCLASS_ID:
{ /*MC, SPR 1554 added conversion of IMEI and IMSI from numbers to ASCII*/
int i;
/*convert to ASCII digits*/
for (i=0; i < 15; i++)
{
MfwEmData->MobileInfo.IMEI[i]= signal->UserData.id.em_imeisv.ident_dig[i] + ASCII_OFFSET;
MfwEmData->MobileInfo.IMSI[i]=signal->UserData.id.em_imsi.ident_dig[i] +ASCII_OFFSET;
}
MfwEmData->MobileInfo.IMEI[15] = NULL;
MfwEmData->MobileInfo.IMSI[15] = NULL;
MfwEmData->MobileInfo.TMSI = signal->UserData.id.tmsi;
Mfw_em_signal(EM_MOBILE_INFO, (void*)&MfwEmData->MobileInfo);
}
case EM_SUBCLASS_SW_VERSION:
{
T_EM_SW_VER* sw_ver = &signal->UserData.version;
memcpy(MfwEmData->MobileInfo.SIM_version, sw_ver->sim, MAX_VER*sizeof(char));
memcpy(MfwEmData->MobileInfo.CC_version , sw_ver->cc, MAX_VER*sizeof(char));
memcpy(MfwEmData->MobileInfo.SS_version , sw_ver->ss, MAX_VER*sizeof(char));
memcpy(MfwEmData->MobileInfo.SMS_version , sw_ver->sms, MAX_VER*sizeof(char));
memcpy(MfwEmData->MobileInfo.MM_version, sw_ver->mm, MAX_VER*sizeof(char));
memcpy(MfwEmData->MobileInfo.RR_version , sw_ver->rr, MAX_VER*sizeof(char));
memcpy(MfwEmData->MobileInfo.DL_version , sw_ver->dl, MAX_VER*sizeof(char));
memcpy(MfwEmData->MobileInfo.ALR_version , sw_ver->alr, MAX_VER*sizeof(char));
}
default:
TRACE_EVENT("Unknown EM data type");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -