電話本電話號碼不能顯示的問題
原因:不能顯示時,該條電話記錄沒有儲存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