bsp_map.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "include.h"
  2. #if BT_MAP_EN
  3. int nibble_for_char(char c);
  4. void bt_map_start(void);
  5. void ble_charge_box_cmd_set(u8 cmd);
  6. void tws_send_map_time(u8* buf);
  7. u32 map_start_tick;
  8. u8 map_time_data[7] = {0};
  9. extern bool bt_time_get_flag;
  10. void bt_map_kick(void)
  11. {
  12. memset(map_time_data, 0, 7);
  13. map_start_tick = tick_get();
  14. bt_map_start();
  15. }
  16. int nibble_for_char(char c){
  17. if (c >= '0' && c <= '9') return c - '0';
  18. if (c >= 'a' && c <= 'f') return c - 'a' + 10;
  19. if (c >= 'A' && c <= 'F') return c - 'A' + 10;
  20. return -1;
  21. }
  22. void bt_get_time(char *ptr)
  23. {
  24. bool ios_flag = bt_is_ios_device();
  25. u16 year = ios_flag? 2000 + nibble_for_char(ptr[2])*10 + nibble_for_char(ptr[3]) : nibble_for_char(ptr[0])*1000 + nibble_for_char(ptr[1])*100 + nibble_for_char(ptr[2])*10 + nibble_for_char(ptr[3]);
  26. u8 month = nibble_for_char(ptr[4])*10 + nibble_for_char(ptr[5]);
  27. u8 day = nibble_for_char(ptr[6])*10 + nibble_for_char(ptr[7]);
  28. u8 hour = nibble_for_char(ptr[9 - ios_flag])*10 + nibble_for_char(ptr[10 - ios_flag]);
  29. u8 min = nibble_for_char(ptr[11 - ios_flag])*10 + nibble_for_char(ptr[12 - ios_flag]);
  30. u8 sec = nibble_for_char(ptr[13 - ios_flag])*10 + nibble_for_char(ptr[14 - ios_flag]);
  31. if((year >= 2000) && (year <= 3000) && (month <= 12) && (day <= 31) && (hour <= 24) && (min <= 60) && sec <= 60){
  32. printf("date:%04d.%02d.%02d time:%02d:%02d:%02d\n",year,month,day,hour,min,sec);
  33. bt_time_get_flag = true;
  34. memcpy(&map_time_data[0], &year, 2);
  35. map_time_data[2] = month;
  36. map_time_data[3] = day;
  37. map_time_data[4] = hour;
  38. map_time_data[5] = min;
  39. map_time_data[6] = sec;
  40. }
  41. }
  42. void bt_map_data_callback(uint8_t *packet)
  43. {
  44. char *ptr = (char *)(packet+13);
  45. bt_get_time(ptr);
  46. }
  47. const char * hfp_get_at_cmd(void) {
  48. return "AT+CCLK?\r";//获取IOS手机时间(安卓暂不支持),获取回调函数hfp_get_time
  49. }
  50. u32 hfp_start_tick;
  51. u8 hfp_time_data[7] = {0};
  52. void hfp_at_kick(void)
  53. {
  54. memset(hfp_time_data, 0, 7);
  55. hfp_start_tick = tick_get();
  56. //printf("hfp_at_kick\n");
  57. bt_send_msg(BT_MSG_HFP_AT_CMD);
  58. delay_5ms(10); //延迟一下,等它发送完毕
  59. }
  60. bool hfp_at_time_get(u8 *buf, u8 len)
  61. {
  62. if (hfp_time_data[0] == 0) {
  63. printf("hfp time empty!\n");
  64. return false;
  65. }
  66. if (tick_check_expire(hfp_start_tick, 30000)) {
  67. printf("hfp time outdated!\n"); //超过30s,数据过时
  68. return false;
  69. }
  70. memcpy(buf, hfp_time_data,7);
  71. return true;
  72. }
  73. int nibble_for_char(char c);
  74. void hfp_get_time(char *ptr)
  75. {
  76. // my_printf("-->(hfp)set time\n");
  77. u16 year = 2000 + nibble_for_char(ptr[0])*10 + nibble_for_char(ptr[1]);
  78. u8 month = nibble_for_char(ptr[2])*10 + nibble_for_char(ptr[3]);
  79. u8 day = nibble_for_char(ptr[4])*10 + nibble_for_char(ptr[5]);
  80. u8 hour = nibble_for_char(ptr[6])*10 + nibble_for_char(ptr[7]);
  81. u8 min = nibble_for_char(ptr[8])*10 + nibble_for_char(ptr[9]);
  82. u8 sec = nibble_for_char(ptr[10])*10 + nibble_for_char(ptr[11]);
  83. if((year >= 2000) && (year <= 3000) && (month <= 12) && (day <= 31) && (hour <= 24) && (min <= 60) && sec <= 60){
  84. printf("IOS get time:\ndate:%04d.%02d.%02d time:%02d:%02d:%02d\n", year, month, day, hour, min, sec);
  85. memcpy(&hfp_time_data[0], &year, 2);
  86. hfp_time_data[2] = month;
  87. hfp_time_data[3] = day;
  88. hfp_time_data[4] = hour;
  89. hfp_time_data[5] = min;
  90. hfp_time_data[6] = sec;
  91. bt_time_get_flag = true;
  92. }
  93. }
  94. void hfp_notice_network_time(u8 *buf, u16 len)
  95. {
  96. // char cache[16] = "";
  97. // memcpy(cache, buf, min(len, 15));
  98. // printf("hfp_notice_network_time:%s\n", cache);
  99. if (bt_is_ios_device()) {
  100. hfp_get_time((char *)buf);
  101. }
  102. }
  103. #endif