芯方式

Call log 乱码@@@的问题

0
阅读(595)

[DESCRIPTION]
从老版本工程中用过的sim卡,然后拿到新的版本工程上的手机,call log name会显示@@@ 乱码。
[SOLUTION]
10A之前的版本
这个问题是历史的原因,由于以前name 为空的时候,我们写0进去,对于0 是有意义的。而我们现在如果name 为空
,会写0xff,如果都是新项目就没有问题,如果sim卡 从原来的项目拿到现在的项目才会有这个问题。
10 A之前的可以修改如下函数:
static void phb_startup_translate_ln_from_sim(kal_uint8 *data, control_block_type *control_block)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint16 rec_size, alpha_size, i;
nvram_ef_phb_ln_struct *record;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
record = (nvram_ef_phb_ln_struct*) control_block->data;
rec_size = control_block->length / control_block->seg_total;
alpha_size = rec_size - PHB_LENGTH_AFTER_ALPHA_ID;
if ((data[alpha_size] != 0) && (is_empty(data, rec_size) == KAL_FALSE))
{
istring_type istring;
phb_ef_struct phb_ef;
phb_ef.alpha_id = data;
phb_ef.mandatory = (phb_ef_mandatory_struct*) ((kal_uint8*) data + alpha_size);
/* Set up phb_entry->alpha_id */
record->array[record->no_entry].name_dcs = 0;
record->array[record->no_entry].name_length = 0;
kal_mem_set((kal_uint8*) record->array[record->no_entry].name, 0, L4_MAX_NAME);
istring.length = L4_MAX_NAME;
istring.data = (kal_uint8*) record->array[record->no_entry].name;
record->array[record->no_entry].name_length = istring_decode_from_sim((kal_uint8) alpha_size,
phb_ef.alpha_id, &istring);
/*新增代码*/
for (i = 0; i < alpha_size; i++)
{
if (phb_ef.alpha_id[i] != 0)
{
break;
}
}
if (i >= alpha_size)
{
record->array[record->no_entry].name_length = 0;
}
/*新增代码 end*/}
/*原来代码不变*/
.........
}
10A的版本
修改srv_clog_revise_ln中对name的判读,如下
if (ln->alpha_id.name_length == SRV_CLOG_PS_U8_INVALID_VALUE ||
ln->alpha_id.name_dcs == SRV_CLOG_PS_U8_INVALID_VALUE ||
srv_clog_is_ps_str_invalid((CHAR*) ln->alpha_id.name, SRV_CLOG_L4NAME_MAX_SIZE)||
ln->alpha_id.name_length==0||srv_clog_is_compatible_empty(&ln->alpha_id))
{
ln->alpha_id.name_length = 0;
ln->alpha_id.name_dcs = PHB_ASCII;
SRV_CLOG_SET_STR_EMPTY(ln->alpha_id.name);
}
定义函数 :
BOOL srv_clog_is_compatible_empty(const l4_name_struct * alpa)
{
kal_uint32 i=0;
for(;iname_length;i++)
{
if(alpa->name[i]!=0)
return FALSE;
}
return TRUE;
}

ICfans