pbm_gsdi_init()
mmgsdi_client_evt_reg(pbm_mmgsdi_client_id,
pbm_mmgsdi_card_status_cb,
pbm_mmgsdi_status_cb,
0);
pbm_mmgsdi_card_status_cb()
rex_set_sigs(&pbm_tcb, PBM_MMGSDI_WAIT_SIG);
pbm_gsdi_sim_cap_cb()
pbm_gsdi_resp_q_put(PBM_GSDI_RESPONSE_SIG)
pbm_gsdi_resp_handle()
case PBM_GSDI_SIM_CAP_CB:
pbm_sim_cap_cb( )
pbm_init_fileinfo_internal()
开始文件初始化
pbm_init_fileinfo_internal()
pbm_start_fileinfo_request()
pbm_make_fileinfo_request()
if(pbm_gsdi_is_service_allowed()) 判断service是否允许
pbm_gsdi_get_file_attributes(pbm_gsdi_fileinfo_cb) 获取文件属性
pbm_gsdi_fileinfo_cb()
pbm_gsdi_resp_q_put() 设置信号PBM_GSDI_RESPONSE_SIG
pbm_gsdi_resp_handle()
case PBM_MMGSDI_FILE_INFO_CB:
pbm_fileinfo_cb()
得到最大容量等信息
pbm_fill_pb_cache_info()
继续获取UIM卡的其他文件信息
所有文件信息获取完成后,进入:
pbm_fileinfo_complete()
针对每一个文件进行操作
。。。。。。
case PBM_CACHE_TYPE_PB:
把保存记录的内存空间adn_cache.pb_cache_array先清空,然后重新分配空间。
设置start=1, circular=FALSE,records_in_use = 0;
break;
pbm_init_seek_data(sim_id);
pbm_initialize_index[sim_id] = 0;
pbm_init_entries(sim_id);
开始read记录
pbm_init_entries( )
pbm_seek_unused_records( )
pbm_start_record_read( )
pbm_sim_read(sim_id, file_id, record_num, pbm_sim_read_cb);
pbm_send_read_request(sim_id, file_id, filename, index, buffer_index, pbm_gsdi_async_cb)
pbm_gsdi_sim_read()
mmgsdi_read_record()
读取到一个记录后
mmgsdi_handle_queue_sig()
mmgsdi_process_cnf()
pbm_gsdi_async_cb()
设置信号PBM_GSDI_RESPONSE_SIG
pbm_task()收到此信号
pbm_gsdi_resp_handle()
pbm_gsdi_read_cb()
pbm_gsdi_sim_read_cb()
pbm_gsdi_process_sim_data()
pbm_sim_read_cb( )
pbm_cache_record_add( ) 添加到cache中
pbm_sim_read()
读取完毕后,core_ui_notify_pb_uim_ok(),通知core_ui.c,然后通知电话簿AP。
ADN,FDN,LDN等每种记录读取完毕后,进入:pbm_init_entries()的最后(while外面)
pbm_sim_init_completed()
UIM命令操作时一些函数
uim_send_apdu()
uim_rx_isr()
mmgsdi_uim_icc_read_record()
mmgsdi_process_response()
mmgsdi_cnf_build_and_queue()
uim_process_generic_response()