获取Cell Id实例
0赞[DESCRIPTION]
如何获取Cell ID.
[SOLUTION]来自半导体社区
1.获取cell id,请参看如下代码:
/* Start cell id process*/
void mmi_start_get_cell_id(void)
{
SetProtocolEventHandler(mmi_em_update_rsp_hdlr, MSG_ID_MMI_EM_UPDATE_RSP);
SetProtocolEventHandler(mmi_em_status_ind_hdlr, MSG_ID_MMI_EM_STATUS_IND);
}
/* Send start request*/
void mmi_send_em_update_req(void)
{
S32 i;
MYQUEUE Message;
mmi_em_update_req_struct *update_req;
Message.oslMsgId = MSG_ID_MMI_EM_UPDATE_REQ;
update_req = OslConstructDataPtr(sizeof(mmi_em_update_req_struct));
/* All OFF*/
for(i = 0; i < EM_INFO_REQ_NUM; i++)
{
update_req->info_request[i] = EM_OFF;
}
/* LAI ON*/
update_req->info_request[RR_EM_LAI_INFO] = EM_ON;
Message.oslDataPtr = (oslParaType*) update_req;
Message.oslPeerBuffPtr = NULL;
Message.oslSrcId = MOD_MMI;
Message.oslDestId = MOD_L4C;
OslMsgSendExtQueue(&Message);
}
/* Here check if start ok*/
void mmi_em_update_rsp_hdlr(void *inMsg)
{
mmi_em_update_rsp_struct *rsp_p = inMsg;
if (rsp_p->result)
{
/* Start Ok*/
}
else
{
/* Start fail, notify if needed*/
}
}
/* Receive info*/
void mmi_em_status_ind_hdlr(void *info)
{
mmi_em_status_ind_struct *msg = (mmi_em_status_ind_struct*) info;
rr_em_lai_info_struct *data_ptr;
kal_uint16 mm_pdu_len;
mmi_em_rr_process_logs(msg->em_info, msg->info);
if (msg->em_info == RR_EM_LAI_INFO)
{
data_ptr = (rr_em_lai_info_struct*) get_pdu_ptr(msg->info, &mm_pdu_len);
/* Cell id is in data_ptr*/
}
free_peer_buff(msg->info);
}
2.要获取cell id,可通过发送MSG_ID_MMI_EM_UPDATE_REQ来获得,网络回来的消息为
MSG_ID_MMI_EM_UPDATE_RSP,MSG_ID_MMI_EM_STATUS_IND,可自行实现这两个消息的处理函数,如上面
mmi_start_get_cell_id中注册的两个处理函数mmi_em_update_rsp_hdlr,mmi_em_status_ind_hdlr;其中前者为提示
请求是否发送成功,为不影响原来工程模式的处理,可将原来此消息的处理函数EngineerModeStartRes中的内容拿过来
,此处不想显示的话,可以做特殊判断处理;后者则为返回的所需的信息;
3.要想在获取cell id后停止底层发送MSG_ID_MMI_EM_STATUS_IND消息,可以再次发送MSG_ID_MMI_EM_UPDATE_REQ,并
将update_req->info_request全部置为EM_OFF。