pbap.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "include.h"
  2. #if BT_PBAP_EN
  3. //static char qp[] = {"=12=34=56=78=9A=BC=DE=F0=12=34=56=78"}; //for test
  4. //获取IOS的电话本,需要在bt_get_class_of_device()中把COD改为0x240408
  5. static u8 qp_convert_do(char *in)
  6. {
  7. u8 utf8_cod = 0;
  8. for(u8 i = 0;i < 2;i++){
  9. if(*in > '@' && *in < 'G'){
  10. utf8_cod |= (0x0A + *in - 'A') << 4*(1-i);
  11. }else if(*in > '/' && *in < ':'){
  12. utf8_cod |= (*in - '0') << 4*(1-i);
  13. }
  14. in++;
  15. }
  16. return utf8_cod;
  17. }
  18. static void qp_convert(char *out)
  19. {
  20. u8 cnt = strlen(out);
  21. u8 utf8_len = 0;
  22. for(u8 i = 0;i < cnt;i ++){
  23. if(out[i] != '='){
  24. out[utf8_len++] = qp_convert_do(&out[i]);
  25. i++;
  26. }
  27. }
  28. out[utf8_len] = '\0';
  29. }
  30. //type:本地号码[0], 来电号码[1], 去电号码[2], 未接号码[3]
  31. void bt_pbap_data_callback(u8 type, void *item)
  32. {
  33. //注意函数内不要进行耗时大的操作,会影响电话本获取的速度
  34. struct pbap_buf_t *p = (struct pbap_buf_t *)item;
  35. //memcpy(p->name,qp,sizeof(qp));
  36. if(p->name[0] == '='){
  37. qp_convert(p->name);
  38. }
  39. /*printf("name:");
  40. for(u8 i = 0;i < strlen(p->name);i++){
  41. printf("%X ",p->name[i]);
  42. }*/
  43. printf("[%d] [name:%s] ", type, p->name);
  44. printf("[tele:%s] ", p->anum);
  45. if (type) {
  46. printf("[date:%s]\n", p->bnum);
  47. } else {
  48. if (p->bnum[0]) {
  49. printf("[%s]\n", p->bnum);
  50. } else {
  51. printf("\n");
  52. }
  53. }
  54. }
  55. #endif //BT_PBAP_EN