map.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "include.h"
  2. #if BT_MAP_EN
  3. u32 map_start_tick;
  4. u8 map_time_data[7] = {0};
  5. void bt_map_start(void);
  6. int nibble_for_char(char c);
  7. void bt_map_kick(void)
  8. {
  9. memset(map_time_data, 0, 7);
  10. map_start_tick = tick_get();
  11. bt_map_start();
  12. }
  13. bool bt_map_time_get(u8 *buf, u8 len)
  14. {
  15. if (map_time_data[0] == 0) {
  16. printf("map data empty!\n");
  17. return false;
  18. }
  19. if (tick_check_expire(map_start_tick, 30000)) {
  20. printf("map data outdated!\n"); //超过30s,数据过时
  21. return false;
  22. }
  23. memcpy(buf, map_time_data, min(len, 7));
  24. return true;
  25. }
  26. void bt_get_time(char *ptr)
  27. {
  28. my_printf("-->set time\n");
  29. //#if UART0_PRINTF_SEL
  30. bool ios_flag = bt_is_ios_device();
  31. 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]);
  32. u8 month = nibble_for_char(ptr[4])*10 + nibble_for_char(ptr[5]);
  33. u8 day = nibble_for_char(ptr[6])*10 + nibble_for_char(ptr[7]);
  34. u8 hour = nibble_for_char(ptr[9 - ios_flag])*10 + nibble_for_char(ptr[10 - ios_flag]);
  35. u8 min = nibble_for_char(ptr[11 - ios_flag])*10 + nibble_for_char(ptr[12 - ios_flag]);
  36. u8 sec = nibble_for_char(ptr[13 - ios_flag])*10 + nibble_for_char(ptr[14 - ios_flag]);
  37. if ((year >= 2000) && (year <= 3000) && (month <= 12) && (day <= 31) && (hour <= 24) && (min <= 60) && sec <= 60) {
  38. ios_flag ? printf("IOS get time:\n") : printf("Android get time:\n");
  39. printf("date:%04d.%02d.%02d time:%02d:%02d:%02d\n",year,month,day,hour,min,sec);
  40. memcpy(&map_time_data[0], &year, 2);
  41. map_time_data[2] = month;
  42. map_time_data[3] = day;
  43. map_time_data[4] = hour;
  44. map_time_data[5] = min;
  45. map_time_data[6] = sec;
  46. if (!ios_flag) {
  47. sys_cb.map_retry = 0;
  48. }
  49. msg_enqueue(EVT_BT_MAP_DONE);
  50. } else {
  51. // if(!ios_flag){
  52. // sys_cb.map_retry = 1;
  53. // bt_map_start();
  54. // }
  55. }
  56. //#endif
  57. }
  58. void bt_map_data_callback(uint8_t *packet) //获取时间例程
  59. {
  60. char *ptr = (char *)(packet+13);
  61. bt_get_time(ptr);
  62. }
  63. #endif