}
+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);
}
+
void ble_sos_data_save(void)
{
OHOS::SOS_number_save();
\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