⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phb_handler_startup.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -