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

📄 phb_data_desc.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 2 页
字号:
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_DATA_DESC_SET);

    phb_ptr->data_desc[type].record_num = record_num;
    phb_ptr->data_desc[type].record_size = record_size;
}   /* end of phb_data_desc_set */


/*****************************************************************************
 * FUNCTION
 *  phb_data_desc_mark_free
 * DESCRIPTION
 *  Mark free to the data-descriptor.
 *  Note that a free record is marked as 1 in bitmap.
 * PARAMETERS
 *  type                [IN]        
 *  pos                 [IN]        
 *  is_free             [IN]        
 *  data_desc(?)        [IN]        The data-descriptor
 * RETURNS
 *  void
 *****************************************************************************/
void phb_data_desc_mark_free(data_desc_enum type, kal_uint16 pos, kal_bool is_free)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    data_desc_type *data_desc_entry = &phb_ptr->data_desc[type];
    kal_uint8 *free_bitmap;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_DATA_DESC_MARK_FREE);

    ASSERT(data_desc_entry != NULL);

    if ((--pos >= data_desc_entry->record_num) ||
        ((pos >> BYTE_SIZE_SHIFT_ARITHMETIC) >= data_desc_bytes[type]) || (type == DATA_DESC_SDN))
    {
        return;
    }

    free_bitmap = (kal_uint8*) data_desc_entry->free_bitmap;
    if (is_free)
    {
      /**
       * Only when 'pos' is not marked as free is allowed to be marked as free.
       */
        if (!(free_bitmap[pos >> BYTE_SIZE_SHIFT_ARITHMETIC] & (1 << (pos % BYTE_SIZE))))
        {

            free_bitmap[pos >> BYTE_SIZE_SHIFT_ARITHMETIC] |= 1 << (pos % BYTE_SIZE);

            if (data_desc_entry->free_count < data_desc_entry->record_num)
            {
                data_desc_entry->free_count++;
            }
        }
    }
    else
    {
      /**
       * Only when 'pos' is marked as free is allowed to be marked as not free.
       */
        if (free_bitmap[pos >> BYTE_SIZE_SHIFT_ARITHMETIC] & (1 << (pos % BYTE_SIZE)))
        {
            free_bitmap[pos >> BYTE_SIZE_SHIFT_ARITHMETIC] &= (kal_uint8) (~(1 << (pos % BYTE_SIZE)));

            if (data_desc_entry->free_count > 0)
            {
                data_desc_entry->free_count--;
            }
        }
    }
}   /* end of data_desc_append */


/*****************************************************************************
 * FUNCTION
 *  phb_data_desc_find_next_free
 * DESCRIPTION
 *  Find record index of next free record
 * PARAMETERS
 *  type                [IN]        
 *  data_desc(?)        [IN]        The data-descriptor
 * RETURNS
 *  record index of next free record.
 *****************************************************************************/
kal_uint16 phb_data_desc_find_next_free(data_desc_enum type)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    data_desc_type *data_desc_entry = &phb_ptr->data_desc[type];

    kal_uint16 byte_counter;
    kal_uint16 bit_counter;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_DATA_DESC_FIND_NEXT_FREE);

    ASSERT(data_desc_entry != NULL);

    if ((data_desc_entry->is_support == KAL_FALSE) &&
        (data_desc_entry->free_count == 0) || (data_desc_entry->free_bitmap == NULL))
    {
        return (kal_uint16) PHB_INVALID_VALUE;
    }

    for (byte_counter = 0;
         byte_counter < (data_desc_entry->free_bitmap_bits >> BYTE_SIZE_SHIFT_ARITHMETIC); ++byte_counter)
    {
        if (data_desc_entry->free_bitmap[byte_counter] != 0)
        {
            for (bit_counter = 0; (bit_counter < BYTE_SIZE) &&
                 (((byte_counter << BYTE_SIZE_SHIFT_ARITHMETIC) + bit_counter) < data_desc_entry->record_num);
                 ++bit_counter)
            {
                if (data_desc_entry->free_bitmap[byte_counter] & (1 << bit_counter))
                {
                    return (byte_counter << BYTE_SIZE_SHIFT_ARITHMETIC) + bit_counter + 1;
                }
            }
        }
    }
    return (kal_uint16) PHB_INVALID_VALUE;
}   /* end of data_desc_append */


/*****************************************************************************
 * FUNCTION
 *  phb_data_desc_get_free_count
 * DESCRIPTION
 *  Find record index of next free record
 * PARAMETERS
 *  type                [IN]        
 *  data_desc(?)        [IN]        The data-descriptor
 * RETURNS
 *  record index of next free record.
 *****************************************************************************/
kal_uint16 phb_data_desc_get_free_count(data_desc_enum type)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    data_desc_type *data_desc_entry = &phb_ptr->data_desc[type];

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_DATA_DESC_GET_FREE_COUNT);

    ASSERT(data_desc_entry != NULL);

    return data_desc_entry->free_count;
}   /* end of data_desc_append */


/*****************************************************************************
 * FUNCTION
 *  phb_data_desc_is_free
 * DESCRIPTION
 *  Tests whether a record is free
 * PARAMETERS
 *  type                [IN]        
 *  pos                 [IN]        
 *  data_desc(?)        [IN]        The data-descriptor
 * RETURNS
 *  void
 *****************************************************************************/
free_status_enum phb_data_desc_is_free(data_desc_enum type, kal_uint16 pos)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    data_desc_type *data_desc_entry = &phb_ptr->data_desc[type];

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_DATA_DESC_IS_FREE);

    ASSERT(data_desc_entry != NULL);

    if ((data_desc_entry->is_support == KAL_FALSE) ||
        (--pos >= data_desc_entry->record_num) ||
        ((pos >> BYTE_SIZE_SHIFT_ARITHMETIC) >= data_desc_bytes[type]) || (type == DATA_DESC_SDN))
    {
        return RECORD_INVALID;
    }

    if (((kal_uint8*) data_desc_entry->free_bitmap)[pos >> BYTE_SIZE_SHIFT_ARITHMETIC] & (1 << (pos % BYTE_SIZE)))
    {
        return RECORD_FREE;
    }

    return RECORD_OCCUPIED;
}   /* end of phb_data_desc_is_free */


/*****************************************************************************
 * FUNCTION
 *  phb_data_desc_get_desc_by_ID
 * DESCRIPTION
 *  Return corresponding data descriptor type of sim_file_id
 * PARAMETERS
 *  id      [IN]        
 * RETURNS
 *  Return corresponding data descriptor type of sim_file_id
 *****************************************************************************/
data_desc_enum phb_data_desc_get_desc_by_ID(kal_uint16 id)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_DATA_DESC_GET_DESC_BY_ID);

    switch (id)
    {
        case NVRAM_EF_PHB_LID:
            return DATA_DESC_PHB;

        case FILE_ADN_IDX:
            return DATA_DESC_ADN;

        case FILE_FDN_IDX:
            return DATA_DESC_FDN;

        case FILE_MSISDN_IDX:
            return DATA_DESC_MSISDN;

        case FILE_SDN_IDX:
            return DATA_DESC_SDN;

        case FILE_BDN_IDX:
            return DATA_DESC_BDN;

        case FILE_EXT1_IDX:
            return DATA_DESC_EXT1;

        case FILE_EXT2_IDX:
            return DATA_DESC_EXT2;

        case FILE_EXT3_IDX:
            return DATA_DESC_EXT3;

        case FILE_EXT4_IDX:
            return DATA_DESC_EXT4;

    #ifdef __USIM_SUPPORT__
        case FILE_G_EXT1_IDX:
            return DATA_DESC_EXT1;

        case FILE_G_ADN_IDX:
            return DATA_DESC_ADN;

        case FILE_G_PBR_IDX:
            return DATA_DESC_PBR;
    #endif /* __USIM_SUPPORT__ */

    #ifdef __PHB_USIM_SUPPORT__
        case FILE_G_IAP_IDX:
            return DATA_DESC_IAP;

        case FILE_G_GRP_IDX:
            return DATA_DESC_GRP;

        case FILE_G_ANR_IDX:
            return DATA_DESC_ANRA;

        case FILE_G_SNE_IDX:
            return DATA_DESC_SNE;

        case FILE_G_EMAIL_IDX:
            return DATA_DESC_EMAIL;

        case FILE_G_GAS_IDX:
            return DATA_DESC_GAS;

        case FILE_G_PBC_IDX:
        case FILE_G_CCP1_IDX:
        case FILE_G_PSC_IDX:
        case FILE_G_CC_IDX:
        case FILE_G_PUID_IDX:
        case FILE_G_AAS_IDX:
            break;
    #endif /* __PHB_USIM_SUPPORT__ */ 
    }

    return (data_desc_enum) PHB_INVALID_VALUE;
}   /* end of phb_data_desc_get_desc_by_ID */


/*****************************************************************************
 * FUNCTION
 *  phb_data_desc_get_ID_by_desc
 * DESCRIPTION
 *  Return corresponding ID of data descriptor type
 * PARAMETERS
 *  type        [IN]        
 * RETURNS
 *  Return corresponding sim_file_id of data descriptor type
 *****************************************************************************/
kal_uint16 phb_data_desc_get_ID_by_desc(data_desc_enum type)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_PHB_DATA_DESC_GET_ID_BY_DESC);

    switch (type)
    {
        case DATA_DESC_PHB:
            return NVRAM_EF_PHB_LID;

        case DATA_DESC_ADN:
            return FILE_ADN_IDX;

        case DATA_DESC_FDN:
            return FILE_FDN_IDX;

        case DATA_DESC_MSISDN:
            return FILE_MSISDN_IDX;

        case DATA_DESC_SDN:
            return FILE_SDN_IDX;

        case DATA_DESC_BDN:
            return FILE_BDN_IDX;

        case DATA_DESC_EXT1:
            return FILE_EXT1_IDX;

        case DATA_DESC_EXT2:
            return FILE_EXT2_IDX;

        case DATA_DESC_EXT3:
            return FILE_EXT3_IDX;

        case DATA_DESC_EXT4:
            return FILE_EXT4_IDX;
    }

    return (kal_uint16) PHB_INVALID_VALUE;
}   /* end of phb_data_desc_get_ID_by_desc */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -