09A 获取小区cell_id
MTK更新平台10A做了好多变化,苦逼了程序员,很多地方又要重新学,不过有好有坏,一些接口什么的提供了更多更具体更简单了,包括和今天写的有关的获取sim卡相关内容的接口。
10A直接提供获取包括cell_id(小区ID),IMEI,IMSI在内的接口,但是在09A上获取这些东西稍显麻烦了,要自己发送消息到L4C获取。新近做了个功能要获取cell_id,过程比较复杂,来之不易,记录下。
void get_cell_id_rsq(void *info)
{
mmi_em_status_ind_struct *msg = (mmi_em_status_ind_struct*) info;
ClearProtocolEventHandler(MSG_ID_MMI_EM_UPDATE_RSP);
ClearProtocolEventHandler(MSG_ID_MMI_EM_STATUS_IND);
#ifdef __MMI_DUAL_SIM_MASTER__
ClearSlaveProtocolEventHandler(MSG_ID_MMI_EM_UPDATE_RSP);
ClearSlaveProtocolEventHandler(MSG_ID_MMI_EM_STATUS_IND);
#endif
if (msg->em_info == RR_EM_LAI_INFO)
{
rr_em_lai_info_struct *data_ptr;
kal_uint16 mm_pdu_len;
data_ptr = (rr_em_lai_info_struct*) get_pdu_ptr(msg->info, &mm_pdu_len);
//cell_id
sprintf(cell_id, "%d", data_ptr->cell_id);
//sys_print(0, "data_ptr->cell_id = %d", data_ptr->cell_id);
//sys_print(0, "cell_id111 = %s", fspice_cell_id);
}
free_peer_buff(msg->info);
}
void get_cell_id_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));
for(i = 0; i < EM_INFO_REQ_NUM; i++)
{
update_req->info_request[i] = EM_NC;
}
update_req->info_request[RR_EM_LAI_INFO] = EM_ON; ////获取之后还需要在退出的地方重新发一次消息设为EM_OFF,否则会一直获取
Message.oslDataPtr = (oslParaType*) update_req;
Message.oslPeerBuffPtr = NULL;
Message.oslSrcId = MOD_MMI;
#ifdef __MMI_DUAL_SIM_MASTER__
if (fspice_get_active_sim() == 2) // 仅卡2有效
{
Message.oslDestId = MOD_L4C_2; //这个卡1和卡2是不同的
OslMsgSendExtQueue(&Message);
SetSlaveProtocolEventHandler(get_cell_id_rsq, MSG_ID_MMI_EM_STATUS_IND); //slave //这个卡1和卡2是不同的
}
else
#endif
{
Message.oslDestId = MOD_L4C;
OslMsgSendExtQueue(&Message);
SetProtocolEventHandler(get_cell_id_rsq, MSG_ID_MMI_EM_STATUS_IND);
}
}