📄 phb_handler_startup.c
字号:
phb_control_block_set_IO(control_block, PHB_GAS, 1, phb_ptr->data_desc[DATA_DESC_GAS].record_num);
control_block->storage = PHB_SIM;
phb_build_gas_index(NULL, control_block);
}
/* This type of phone book data is not supported by storage. Continue next step */
else
{
phb_usim_startup_handler(NULL, control_block);
}
}
/* USIM GRP */
else if ((control_block->proc_stage <= startup_build_gas_index) && (phb_ptr->data_desc[DATA_DESC_GRP].is_support))
{
control_block->primary_ID = FILE_G_GRP_IDX;
control_block->secondary_ID = (kal_uint16) PHB_INVALID_VALUE;
phb_control_block_set(
control_block,
phb_build_grp_index,
phb_usim_startup_handler,
phb_startup_err_handler,
startup_build_grp_index);
if (phb_ptr->data_desc[DATA_DESC_GRP].record_num > 0)
{
control_block->record_index = 1;
control_block->data = (void*)&control_block->temp_entry;
control_block->length = phb_ptr->data_desc[DATA_DESC_GRP].record_size;
phb_control_block_set_IO(control_block, PHB_GRP, 1, phb_ptr->data_desc[DATA_DESC_GRP].record_num);
control_block->storage = PHB_SIM;
phb_build_grp_index(NULL, control_block);
}
/* This type of phone book data is not supported by storage. Continue next step */
else
{
phb_usim_startup_handler(NULL, control_block);
}
}
#endif /* __MMI_FMI__ */
else if (control_block->proc_stage <= startup_build_grp_index)
{
/* Build all indices */
phb_se_finish_build();
kal_trace(TRACE_INFO, INFO_PHB_INDICES_BUILT);
phb_ptr->state = PHB_STATE_READY;
kal_trace(TRACE_STATE, STATE_PHB_READY);
phb_startup_confirm(PHB_ERRNO_SUCCESS, control_block);
}
} /* end of phb_usim_startup_handler function */
/*****************************************************************************
* FUNCTION
* phb_startup_phase1_indicator
* DESCRIPTION
* This is phb_startup_phase1_indicator function of PHB module.
* PARAMETERS
* control_block [?]
* ilm_ptr(?) [IN] The primitives
* RETURNS
* void
*****************************************************************************/
void phb_startup_phase1_indicator(control_block_type *control_block)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
l4cphb_startup_phase1_ind_struct *l4cphb_startup_phase1_ind;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* kal_trace(TRACE_FUNC, FUNC_PHB_STARTUP_CNF, result); */
l4cphb_startup_phase1_ind =
(l4cphb_startup_phase1_ind_struct*) construct_local_para(sizeof(l4cphb_startup_phase1_ind_struct), TD_CTRL);
l4cphb_startup_phase1_ind->result = PHB_ERRNO_SUCCESS;
l4cphb_startup_phase1_ind->adn_size = phb_ptr->adn_size;
l4cphb_startup_phase1_ind->phb_size = NVRAM_PHB_INDEX_MAX_ENTRIES_COUNT;
l4cphb_startup_phase1_ind->adn_alpha_length = phb_ptr->adn_alpha_length;
l4cphb_startup_phase1_ind->fdn_alpha_length = phb_ptr->fdn_alpha_length;
l4cphb_startup_phase1_ind->bdn_alpha_length = phb_ptr->bdn_alpha_length;
l4cphb_startup_phase1_ind->msisdn_alpha_length = phb_ptr->msisdn_alpha_length;
l4cphb_startup_phase1_ind->is_usim = KAL_TRUE;
l4cphb_startup_phase1_ind->is_group_support = phb_ptr->data_desc[DATA_DESC_GRP].is_support;
l4cphb_startup_phase1_ind->anra_support_type = phb_ptr->anra_type;
l4cphb_startup_phase1_ind->anrb_support_type = phb_ptr->anrb_type;
l4cphb_startup_phase1_ind->anrc_support_type = phb_ptr->anrc_type;
l4cphb_startup_phase1_ind->sne_support_type = phb_ptr->sne_type;
l4cphb_startup_phase1_ind->email_support_type = phb_ptr->email_type;
l4cphb_startup_phase1_ind->group_alpha_length = phb_ptr->group_alpha_length;
l4cphb_startup_phase1_ind->gas_size = phb_ptr->data_desc[DATA_DESC_GAS].record_size;
l4cphb_startup_phase1_ind->sne_alpha_length = phb_ptr->sne_alpha_length;
l4cphb_startup_phase1_ind->email_length = phb_ptr->email_length;
l4cphb_startup_phase1_ind->anra_size = phb_ptr->data_desc[DATA_DESC_ANRA].record_size;
l4cphb_startup_phase1_ind->anrb_size = phb_ptr->data_desc[DATA_DESC_ANRB].record_size;
l4cphb_startup_phase1_ind->anrc_size = phb_ptr->data_desc[DATA_DESC_ANRC].record_size;
l4cphb_startup_phase1_ind->sne_size = phb_ptr->data_desc[DATA_DESC_SNE].record_size;
l4cphb_startup_phase1_ind->email_size = phb_ptr->data_desc[DATA_DESC_EMAIL].record_size;
phb_send_ilm(MOD_L4C, MSG_ID_L4CPHB_STARTUP_PHASE1_IND, (local_para_struct*) l4cphb_startup_phase1_ind, NULL);
} /* end of phb_startup_confirm */
/*****************************************************************************
* FUNCTION
* phb_build_index_continue
* DESCRIPTION
* Send out indication for each record for USIM entries.
* and wait response to read next. Only turn on when LMMI exists.
* PARAMETERS
* control_block [IN] Current control block
* RETURNS
* void
*****************************************************************************/
void phb_build_index_continue(control_block_type *control_block)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* Must be in those stage. */
ASSERT((control_block->proc_stage >= startup_build_ext4_index) &&
(control_block->proc_stage <= startup_build_index_finish))
if (++control_block->actual_count >= control_block->total)
{
(*control_block->controller) (NULL, control_block);
}
else if (control_block->proc_stage == startup_build_anr_index ||
control_block->proc_stage == startup_build_email_index)
{
kal_uint16 next_record_index;
++control_block->record_index;
next_record_index = phb_get_next_process_index(control_block->record_index, control_block->type);
control_block->actual_count += (next_record_index - control_block->record_index);
if (next_record_index == (kal_uint16) PHB_INVALID_VALUE) /* no other ADN */
{
phb_usim_startup_handler(NULL, control_block);
}
else
{
control_block->actual_count += (next_record_index - control_block->record_index);
control_block->record_index = next_record_index;
phb_issue_IO_read(control_block);
}
}
else
{
++control_block->record_index;
phb_issue_IO_read(control_block);
}
}
#if defined(__MMI_FMI__)
/*****************************************************************************
* FUNCTION
* phb_build_gas_index
* DESCRIPTION
* This is build_gas_index function of PHB module.
* PARAMETERS
* ilm_ptr [IN] The primitives
* control_block [?]
* RETURNS
* void
*****************************************************************************/
static void phb_build_gas_index(ilm_struct *ilm_ptr, control_block_type *control_block)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (ilm_ptr == NULL)
{
phb_issue_IO_read(control_block);
}
else
{
/* Building GAS */
phb_entry_struct *phb_entry = (phb_entry_struct*) control_block->data;
/* For valid record, control_block.data must not NULL */
if (phb_entry != NULL)
{
/*
* Send out indication for each record for GAS entries.
* and wait response to read next.
*/
l4cphb_startup_read_gas_ind_struct *l4cphb_startup_read_ind =
(l4cphb_startup_read_gas_ind_struct*) construct_local_para(
sizeof(l4cphb_startup_read_gas_ind_struct),
TD_CTRL);
memcpy(
&l4cphb_startup_read_ind->gas_entry,
(phb_entry_struct*) control_block->data,
sizeof(phb_entry_struct));
l4cphb_startup_read_ind->access_id = control_block->ID;
l4cphb_startup_read_ind->num_of_entry = 1; /* ADN doesn't have multiple read */
phb_send_ilm(
MOD_L4C,
MSG_ID_L4CPHB_STARTUP_READ_GAS_IND,
(local_para_struct*) l4cphb_startup_read_ind,
NULL);
/*
* Wait for MMI response to continue to read next entry.
* So does not read next entry until MMI confirm.
*/
return;
}
/* an invalid record */
else
{
/* Reset control_block->data */
control_block->data = (kal_uint8*) & control_block->temp_entry;
}
if (++control_block->actual_count >= control_block->total)
{
(*control_block->controller) (NULL, control_block);
}
else
{
++control_block->record_index;
phb_issue_IO_read(control_block);
}
}
} /* end of phb_build_index function */
/*****************************************************************************
* FUNCTION
* phb_build_grp_index
* DESCRIPTION
* This is build_grp_index function of PHB module.
* PARAMETERS
* ilm_ptr [IN] The primitives
* control_block [?]
* RETURNS
* void
*****************************************************************************/
static void phb_build_grp_index(ilm_struct *ilm_ptr, control_block_type *control_block)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (ilm_ptr == NULL)
{
phb_issue_IO_read(control_block);
}
else
{
control_block->group_id[control_block->record_index - 1] = control_block->data[0];
/* Send ind after read all grp */
if (++control_block->actual_count >= control_block->total)
{
/* Send out indication for each record for GRP entries. */
l4cphb_startup_read_grp_ind_struct *l4cphb_startup_read_ind =
(l4cphb_startup_read_grp_ind_struct*) construct_local_para(
sizeof(l4cphb_startup_read_grp_ind_struct),
TD_CTRL);
memcpy(&l4cphb_startup_read_ind->grp, control_block->group_id, ADN_INDEX_MAX_ENTRIES_COUNT); /* MAX_PHB_SIM_ENTRY */
l4cphb_startup_read_ind->access_id = control_block->ID;
phb_send_ilm(
MOD_L4C,
MSG_ID_L4CPHB_STARTUP_READ_GRP_IND,
(local_para_struct*) l4cphb_startup_read_ind,
NULL);
/* Wait for MMI response to continue to read next EF. */
return;
}
else
{
++control_block->record_index;
phb_issue_IO_read(control_block);
}
}
} /* end of phb_build_index function */
#endif /* defined(__MMI_FMI__) */
#endif /* __PHB_USIM_SUPPORT__ */
/*****************************************************************************
* FUNCTION
* phb_startup_handler
* DESCRIPTION
* This is startup function of PHB module.
* PARAMETERS
* ilm_ptr [IN] The primitives
* control_block [?]
* RETURNS
* void
*****************************************************************************/
void phb_startup_handler(ilm_struct *ilm_ptr, control_block_type *control_block)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_FUNC, FUNC_PHB_STARTUP);
if (ilm_ptr != NULL)
{
if (phb_ptr->state == PHB_STATE_NOT_READY)
{
kal_uint16 phb_total, phb_size;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -