原因:不能显示时,该条电话记录没有保存type类型,导致data_len后移,而代码中取的长度值仍是那一位,而此时该值为0xFF,导致系统认为电话号码为空
正常的电话记录在trace dump中的显示
例一
例二
有问题的电话记录在trace dump中的显示
例一
例二
修改:
Pbmgsdi.c
pbm_gsdi_process_sim_data
{
……
//muxiang add for phone number can't display 2010.11.2
/*-------------------------------------------------------------------------------------------------------------------
typedef PACKED struct {
byte bcd_len;
byte ton_npi;
byte number[10];
...
} pbm_fixed_sim_rec_s_type
normal bcd_len = 0x07 ton_npi = 0x81
error bcd_len = 0xff ton_npi = 0x07
--------------------------------------------------------------------------------------------------------------------*/
/*if (fixed_sim_record->bcd_len == 0xFF)
{
if(fixed_sim_record->ton_npi != 0xFF)
fixed_sim_record->bcd_len = fixed_sim_record->ton_npi;
}*/
//end
{
//muxiang modify for phone number can't display 2011.3.21
uint8 i;
for(i=0;i<10;i++)
{
if(fixed_sim_record->number[i]==0xFF)
break;
}
fixed_sim_record->bcd_len = i;
}
……
}
蓝色字体部分是第一次的改动,判断bcd_len字段是否为0xFF,是则进一步判断ton_npi是否为0xFF,不是则将ton_npi的值拷贝给bcd_len
但是这种改法想当然的以为ton_npi的值就是bcd_len的值,在碰到ton_npi和bcd_len都是0xFF时,这个改法依然会有问题
之后客户还是发现有电话号码不能显示的问题存在,所以有了红色字体的改动,将number字段遍历一次,获取其长度并赋值给bcd_len