1. 程式人生 > >電話本電話號碼不能顯示的問題

電話本電話號碼不能顯示的問題

 

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