增加紧急电话不自动挂断 及GPS协议补充 1965/1 1965/head 1966/target/1
authorhcj <1224667075@qq.com>
Tue, 15 Jul 2025 03:29:26 +0000 (11:29 +0800)
committerhcj <1224667075@qq.com>
Tue, 15 Jul 2025 03:29:26 +0000 (11:29 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.h
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/msg_center/src/notify/makephone_notification.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp

index 38b2b10..d34311b 100644 (file)
@@ -247,11 +247,11 @@ struct SportData {
 };
 
 //经纬度结构体
-struct GPSData {
+typedef struct GPSData {
   uint32_t timestamp; // 时间戳
   double latitude;  // 纬度
   double longitude; // 经度
-};
+}GPSData_t;
 //画布点位结构体
 
 class TraingModel {
index 573af0d..fdbfdcc 100644 (file)
@@ -203,6 +203,66 @@ bool get_training_spead_path(char *path ,uint32_t time,uint32_t max_len)
 }
 
 
+bool get_training_GPS_path(char *path ,uint32_t time,uint32_t max_len)
+{
+  std::string str = OHOS::TraingModel::GetInstance()->GetGPSDataPath(time);
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"get_training_spead:%s\r\n",str.c_str());
+   if(str.length()<=3)
+   {
+        return false;
+   }
+   memcpy_s(path,max_len,str.c_str(),str.length());
+   return true;
+
+}
+
+// typedef struct GPSData {
+//   uint32_t timestamp; // 时间戳
+//   double latitude;  // 纬度
+//   double longitude; // 经度
+// }GPSData_t;
+
+int  read_GPS_DATA(char *path ,uint8_t *out_buf)
+{
+    FILE *fp= fopen(path,"rb+");
+    uint32_t file_size=0;
+
+    int len=0;
+
+    OHOS::GPSData_t data={0};
+
+    while (1)
+    {
+        int read_size=fread(&data,1,sizeof(data),fp);
+        if(read_size!=sizeof(data) )
+        {
+            len+=sizeof(data);
+
+            int temp_data=data.timestamp;
+            memcpy_s(out_buf,4,&temp_data,sizeof(data.timestamp));
+
+            int temp_latitude=(int)(data.latitude *10000000);
+            memcpy_s(out_buf,4,&temp_data,sizeof(temp_latitude));
+
+            int temp_longitude=(int)(data.longitude*1000000);
+            memcpy_s(out_buf,4,&temp_data,sizeof(temp_latitude));
+
+
+        }
+        else 
+        {
+            break;
+        }
+    }
+
+    fclose(fp);
+   
+
+   return len;
+}
+
+
+
 bool get_training_heart_path(char *path ,uint32_t time,uint32_t max_len)
 {
   std::string str = OHOS::TraingModel::GetInstance()->GetHeartTablePath(time);
@@ -216,6 +276,7 @@ bool get_training_heart_path(char *path ,uint32_t time,uint32_t max_len)
 }
 
 
+
 void ble_sos_data_save(void)
 {
     OHOS::SOS_number_save();
index cc3ee4f..1cda30b 100644 (file)
@@ -425,9 +425,14 @@ char * get_dial_path(void);
 
 errcode_t get_dial_file_path(char* input_dialname ,uint32_t input_size, char* output_file_path , uint32_t max_output_size);
 
+bool get_training_GPS_path(char *path ,uint32_t time,uint32_t max_len);
+
+
 
 uint16_t get_str_nodisplay_number(char *str, uint32_t max_len);
 
+int  read_GPS_DATA(char *path ,uint8_t *out_buf);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index d56d6e2..aa8a46c 100644 (file)
@@ -3502,8 +3502,99 @@ void APP_send_sos_Cmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData
 \r
 void GetGPSCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
 {\r
-    ble_data_type type_={0x02,0x4f,0,1,1};\r
-    send_big_data(type_,NULL,0);\r
+   {\r
+    if(Check_CRC(data,len,crcvalue))\r
+       {\r
+        if(len==4)\r
+        {\r
+            uint32_t timetamp=0;\r
+            memcpy_s((void*)&timetamp,4,data,4);\r
+            char path[128]={0};\r
+            if(get_training_GPS_path(path,timetamp,128))\r
+            {\r
+                FILE *fp= fopen(path,"rb+");\r
+                uint32_t file_size=0;\r
+                if(fp==NULL)\r
+                {\r
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"打开文件失败 %s \r\n",path);\r
+                    ble_data_type type_={0x02,0x4f,0,1,1};\r
+                    send_big_data(type_,NULL,0);\r
+                    return ;\r
+                }\r
+                fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾\r
+                file_size = ftell(fp);       // 获取当前文件指针位置,即文件大小\r
+                fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头\r
+                fclose(fp);\r
+\r
+                int num=(ble_nus_max_data_len-18);\r
+                if(num>482)num=482;\r
+\r
+                char* buf = (char *)ym_malloc( file_size );\r
+                if(buf==NULL){fclose(fp); return ;}\r
+\r
+                int data_size= read_GPS_DATA(path,buf);\r
+            \r
+                uint32_t surplus_len=data_size;\r
+                uint32_t offset=0;\r
+\r
+                uint32_t pack;\r
+                uint16_t pack_size=(ble_nus_max_data_len-18);\r
+                if(pack_size>482)pack_size=482;\r
+\r
+                if(data_size%pack_size==0)\r
+                {\r
+                    pack=data_size/pack_size;\r
+                }\r
+                else\r
+                {   \r
+                    pack=data_size/pack_size+1;\r
+                }\r
+                uint32_t pack_id=1;\r
+                while (surplus_len!=0)\r
+                {\r
+                    if(surplus_len>=pack_size)\r
+                    {\r
+                        surplus_len=surplus_len-pack_size;\r
+\r
+                        ble_data_type type_={0x02,0x4f,data_size,pack,pack_id};\r
+                        send_big_data(type_,(char *)buf+offset,pack_size);\r
+                        offset+=pack_size;\r
+                    }\r
+                    else\r
+                    {\r
+                    \r
+                        ble_data_type type_={0x02,0x4f,data_size,pack,pack_id};\r
+                        send_big_data(type_,(char *)buf+offset,surplus_len);\r
+                        break;\r
+                    }\r
+                    pack_id++;\r
+                }\r
+\r
+               \r
+                free(buf);\r
+\r
+            }\r
+            else\r
+            {\r
+                ble_data_type type_={0x02,0x4f,0,1,1};\r
+                send_big_data(type_,NULL,0);\r
+            }\r
+        \r
+        }\r
+        else\r
+        {\r
+            ble_data_type type_={0x02,0x4f,0,1,1};\r
+            send_big_data(type_,NULL,0);\r
+        }  \r
+    }\r
+       else\r
+       {\r
+        ble_data_type type_={0x02,0x4f,0,1,1};\r
+        send_big_data(type_,NULL,0);\r
+    }\r
+\r
+   //send_big_data(1,NULL,0,0,1,1,,2);\r
+}\r
 \r
    //send_big_data(1,NULL,0,0,1,1,0x4f,2);\r
 }\r
index dc25cb0..be1b0ba 100755 (executable)
@@ -839,7 +839,13 @@ void CalldialTimerCallBackProc(int data)
 {
     if(dail_falg<=DIAL_TIME)
     dail_falg++;
-    if(dail_falg>=DIAL_TIME)
+    
+    if(dail_falg>=DIAL_TIME &&
+     strcmp(CallerLogModel::GetInstance()->GetPhoneNumber().c_str(),"110")!=0
+      && strcmp(CallerLogModel::GetInstance()->GetPhoneNumber().c_str(),"112")!=0
+       && strcmp(CallerLogModel::GetInstance()->GetPhoneNumber().c_str(),"120")!=0
+        && strcmp(CallerLogModel::GetInstance()->GetPhoneNumber().c_str(),"119")!=0 
+         && strcmp(CallerLogModel::GetInstance()->GetPhoneNumber().c_str(),"122")!=0 )
     {
         cat1_call_hungup_timer();
 
index 0c50a3e..6626cdb 100644 (file)
@@ -903,7 +903,8 @@ void cat1_call_dial(char* phonenum)
     if (volte == true){
          WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"cat1_call_dial %s\n",phonenum);
         // #if PY_SRV_VER_CURRENT >=16
-        if(g_py_ver>=16)
+        if(g_py_ver>=16 && strcmp(phonenum,"110")!=0 && strcmp(phonenum,"112")!=0 && strcmp(phonenum,"120")!=0
+        && strcmp(phonenum,"119")!=0 && strcmp(phonenum,"122")!=0 )
         {
             if(osTimerIsRunning(g_timer_time_Dial)==0  )
             {