123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #include "include.h"
- #if BT_MAP_EN
- int nibble_for_char(char c);
- void bt_map_start(void);
- void ble_charge_box_cmd_set(u8 cmd);
- void tws_send_map_time(u8* buf);
- u32 map_start_tick;
- u8 map_time_data[7] = {0};
- extern bool bt_time_get_flag;
- void bt_map_kick(void)
- {
- memset(map_time_data, 0, 7);
- map_start_tick = tick_get();
- bt_map_start();
- }
- int nibble_for_char(char c){
- if (c >= '0' && c <= '9') return c - '0';
- if (c >= 'a' && c <= 'f') return c - 'a' + 10;
- if (c >= 'A' && c <= 'F') return c - 'A' + 10;
- return -1;
- }
- void bt_get_time(char *ptr)
- {
- bool ios_flag = bt_is_ios_device();
- 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]);
- u8 month = nibble_for_char(ptr[4])*10 + nibble_for_char(ptr[5]);
- u8 day = nibble_for_char(ptr[6])*10 + nibble_for_char(ptr[7]);
- u8 hour = nibble_for_char(ptr[9 - ios_flag])*10 + nibble_for_char(ptr[10 - ios_flag]);
- u8 min = nibble_for_char(ptr[11 - ios_flag])*10 + nibble_for_char(ptr[12 - ios_flag]);
- u8 sec = nibble_for_char(ptr[13 - ios_flag])*10 + nibble_for_char(ptr[14 - ios_flag]);
- if((year >= 2000) && (year <= 3000) && (month <= 12) && (day <= 31) && (hour <= 24) && (min <= 60) && sec <= 60){
- printf("date:%04d.%02d.%02d time:%02d:%02d:%02d\n",year,month,day,hour,min,sec);
- bt_time_get_flag = true;
- memcpy(&map_time_data[0], &year, 2);
- map_time_data[2] = month;
- map_time_data[3] = day;
- map_time_data[4] = hour;
- map_time_data[5] = min;
- map_time_data[6] = sec;
- }
- }
- void bt_map_data_callback(uint8_t *packet)
- {
- char *ptr = (char *)(packet+13);
- bt_get_time(ptr);
- }
- const char * hfp_get_at_cmd(void) {
- return "AT+CCLK?\r";//获取IOS手机时间(安卓暂不支持),获取回调函数hfp_get_time
- }
- u32 hfp_start_tick;
- u8 hfp_time_data[7] = {0};
- void hfp_at_kick(void)
- {
- memset(hfp_time_data, 0, 7);
- hfp_start_tick = tick_get();
- //printf("hfp_at_kick\n");
- bt_send_msg(BT_MSG_HFP_AT_CMD);
- delay_5ms(10); //延迟一下,等它发送完毕
- }
- bool hfp_at_time_get(u8 *buf, u8 len)
- {
- if (hfp_time_data[0] == 0) {
- printf("hfp time empty!\n");
- return false;
- }
- if (tick_check_expire(hfp_start_tick, 30000)) {
- printf("hfp time outdated!\n"); //超过30s,数据过时
- return false;
- }
- memcpy(buf, hfp_time_data,7);
- return true;
- }
- int nibble_for_char(char c);
- void hfp_get_time(char *ptr)
- {
- // my_printf("-->(hfp)set time\n");
- u16 year = 2000 + nibble_for_char(ptr[0])*10 + nibble_for_char(ptr[1]);
- u8 month = nibble_for_char(ptr[2])*10 + nibble_for_char(ptr[3]);
- u8 day = nibble_for_char(ptr[4])*10 + nibble_for_char(ptr[5]);
- u8 hour = nibble_for_char(ptr[6])*10 + nibble_for_char(ptr[7]);
- u8 min = nibble_for_char(ptr[8])*10 + nibble_for_char(ptr[9]);
- u8 sec = nibble_for_char(ptr[10])*10 + nibble_for_char(ptr[11]);
- if((year >= 2000) && (year <= 3000) && (month <= 12) && (day <= 31) && (hour <= 24) && (min <= 60) && sec <= 60){
- printf("IOS get time:\ndate:%04d.%02d.%02d time:%02d:%02d:%02d\n", year, month, day, hour, min, sec);
- memcpy(&hfp_time_data[0], &year, 2);
- hfp_time_data[2] = month;
- hfp_time_data[3] = day;
- hfp_time_data[4] = hour;
- hfp_time_data[5] = min;
- hfp_time_data[6] = sec;
- bt_time_get_flag = true;
- }
- }
- void hfp_notice_network_time(u8 *buf, u16 len)
- {
- // char cache[16] = "";
- // memcpy(cache, buf, min(len, 15));
- // printf("hfp_notice_network_time:%s\n", cache);
- if (bt_is_ios_device()) {
- hfp_get_time((char *)buf);
- }
- }
- #endif
|