📄 phb_data_desc.c
字号:
{
/*----------------------------------------------------------------*/
/* 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 + -