增加训练配速心率数据上传 1055/target/4 1061/1 1061/head 1062/target/1
authorhcj <1224667075@qq.com>
Sun, 29 Sep 2024 12:18:28 +0000 (20:18 +0800)
committerhcj <1224667075@qq.com>
Sun, 29 Sep 2024 12:18:28 +0000 (20:18 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp
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

index 47d665d..7f469f3 100644 (file)
@@ -179,7 +179,7 @@ enum ENTEYTYPE {
 //心率表结构体
 struct HeartRateEntry {
   uint32_t timestamp;
-  uint16_t heartRate;
+  uint8_t heartRate;
 };
 //配速结果体
 struct PaceEntry {
@@ -324,7 +324,7 @@ public:
   std::string GetTagStr();       /*获取训练目标Str*/
 
   /*配速表以及心率表配置*/
-  bool AddHeartRateData(uint32_t timestamp, uint16_t heartRate);
+  bool AddHeartRateData(uint32_t timestamp, uint8_t heartRate);
   bool AddPaceData(uint32_t timestamp, uint16_t pace);
   bool SaveHeartTable();
   bool SavePaceTable();
@@ -374,7 +374,7 @@ private:
   uint32_t heartcount{0};
 
   std::vector<HeartRateEntry> heartRateTable; // 心率表
-  std::vector<PaceEntry> paceTable;           //配速表
+  std::vector<PaceEntry> paceTable;           // 配速表
   const size_t MAX_ENTRIES = 10000;           // 规定最大进场条目数
   /*std::unique_ptr<SportData> sportdata;*/   // 使用 std::unique_ptr 管理
                                               // SportData 对象
index a9fe901..4e8d8a0 100644 (file)
@@ -1111,7 +1111,7 @@ void TraingModel::ClearPaceTable() {
   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Pace Table Cleared.\r\n");
 }
 // 添加心率数据
-bool TraingModel::AddHeartRateData(uint32_t timestamp, uint16_t heartRate) {
+bool TraingModel::AddHeartRateData(uint32_t timestamp, uint8_t heartRate) {
   // 检查重复时间戳
   for (const auto &entry : heartRateTable) {
     if (entry.timestamp == timestamp) {
index 034ea5c..1f65365 100644 (file)
@@ -87,6 +87,31 @@ extern "C" {
 #include "alipay_feature.h"
 #include "transmitting.h"
 
+bool get_training_spead_path(char *path ,uint32_t time,uint32_t max_len)
+{
+   std::string str= OHOS::TraingModel::GetInstance()->GetPaceTablePath(time);
+   if(str.length()<=3)
+   {
+        return false;
+   }
+   memcpy_s(path,max_len,str.c_str(),str.length());
+   return true;
+
+}
+
+
+bool get_training_heart_path(char *path ,uint32_t time,uint32_t max_len)
+{
+   std::string str= OHOS::TraingModel::GetInstance()->GetHeartTablePath(time);
+    if(str.length()<=3)
+   {
+        return false;
+   }
+   memcpy_s(path,max_len,str.c_str(),str.length());
+   return true;
+}
+
+
 void ble_sos_data_save(void)
 {
     OHOS::SOS_number_save();
index a9354a2..8f9242b 100644 (file)
@@ -388,6 +388,10 @@ void ble_sos_data_save(void);
 
 void ble_SOS_data_init(void);
 
+bool get_training_spead_path(char *path ,uint32_t time,uint32_t max_len);
+
+bool get_training_heart_path(char *path ,uint32_t time,uint32_t max_len);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 4667996..a7e1f16 100644 (file)
@@ -980,7 +980,7 @@ void cleanUnbindInfor(uint8_t flag)//和旧手机解绑清除配对信息
     uint8_t mac_data[6];\r
     memset(mac_data,0,6);\r
     GetwatchSaveMac(&mac_data,&MacType);\r
-    \r
+\r
     bd_addr_t addr={0};\r
     get_phone_addr(&addr,g_ble_conn_id);\r
 \r
@@ -2234,8 +2234,64 @@ void SYN_train_heart_datatCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *t
         {\r
             uint32_t timetamp=0;\r
             memcpy_s((void*)&timetamp,4,data,4);\r
-            ble_data_type type_={0x02,0x4B,0,1,1};\r
-            send_big_data(type_,NULL,0);\r
+            char path[128]={0};\r
+            if(get_training_heart_path(path,timetamp,128))\r
+            {\r
+                FILE *fp= fopen(path,"rb+");\r
+                uint32_t file_size=0;\r
+                if(fp==NULL)\r
+                {\r
+                    printf("打开文件失败 %s \r\n",path);\r
+\r
+                    ble_data_type type_={0x02,0x4b,0,1,1};\r
+                    send_big_data(type_,NULL,0);\r
+\r
+                    return ;\r
+                }\r
+                fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾\r
+                file_size = ftell(fp);       // 获取当前文件指针位置,即文件大小\r
+                fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头\r
+\r
+                int num=(ble_nus_max_data_len-18);\r
+                if(num>482)num=482;\r
+\r
+                int num_check=file_size%6;\r
+                if(num_check!=0)\r
+                {\r
+                    printf("数据有误 %d \r\n",cmd);\r
+\r
+                    ble_data_type type_={0x02,0x4b,0,1,1};\r
+                    send_big_data(type_,NULL,0);\r
+                    return ;\r
+                }\r
+            \r
+                char* buf = (char *)ym_malloc(sizeof(char)*num+1);\r
+                if(buf==NULL){fclose(fp); return ;}\r
+\r
+                uint32_t pack=1;\r
+\r
+                if(file_size%num==0)\r
+                pack=data_len/num;\r
+                else\r
+                pack=data_len/num+1;\r
+\r
+                uint32_t pack_id=1;\r
+                uint32_t read_size=0;\r
+                do\r
+                {\r
+                    memset_s(buf,num+1,0,num+1);\r
+                    read_size=fread(buf,1,num,fp);\r
+                    if(read_size!=0)\r
+                    {\r
+                        ble_data_type type_={0x02,0x4b,file_size,pack,pack_id};\r
+                        send_big_data(type_,buf,read_size);\r
+                    }\r
+                    pack_id++;\r
+                } while (read_size==num);\r
+                fclose(fp);\r
+                free(buf);\r
+\r
+            }\r
         }\r
         \r
     }\r
@@ -2255,10 +2311,68 @@ void SYN_train_speed_datatCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *t
         {\r
             uint32_t timetamp=0;\r
             memcpy_s((void*)&timetamp,4,data,4);\r
-            ble_data_type type_={0x02,0x18,0,1,1};\r
-            send_big_data(type_,NULL,0);\r
-        }\r
+            char path[128]={0};\r
+            if(get_training_spead_path(path,timetamp,128))\r
+            {\r
+                FILE *fp= fopen(path,"rb+");\r
+                uint32_t file_size=0;\r
+                if(fp==NULL)\r
+                {\r
+                    printf("打开文件失败 %s \r\n",path);\r
+\r
+                    ble_data_type type_={0x02,0x18,0,1,1};\r
+                    send_big_data(type_,NULL,0);\r
+\r
+                    return ;\r
+                }\r
+                fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾\r
+                file_size = ftell(fp);       // 获取当前文件指针位置,即文件大小\r
+                fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头\r
+\r
+                int num=(ble_nus_max_data_len-18);\r
+                if(num>482)num=482;\r
+\r
+                int num_check=file_size%6;\r
+                if(num_check!=0)\r
+                {\r
+                    printf("数据有误 %d \r\n",cmd);\r
+\r
+                    ble_data_type type_={0x02,0x18,0,1,1};\r
+                    send_big_data(type_,NULL,0);\r
+                    return ;\r
+                }\r
+            \r
+                char* buf = (char *)ym_malloc(sizeof(char)*num+1);\r
+                if(buf==NULL){fclose(fp); return ;}\r
+\r
+                uint32_t pack=1;\r
+                if(file_size%num==0)\r
+                pack=data_len/num;\r
+                else\r
+                pack=data_len/num+1;\r
+                uint32_t pack_id=1;\r
+                uint32_t read_size=0;\r
+                do\r
+                {\r
+                    memset_s(buf,num+1,0,num+1);\r
+                    read_size=fread(buf,1,num,fp);\r
+                    if(read_size!=0)\r
+                    {\r
+                        ble_data_type type_={0x02,0x18,file_size,pack,pack_id};\r
+                        send_big_data(type_,buf,read_size);\r
+                    }\r
+                    \r
+\r
+                    //send_big_data(1,buf,read_size,file_size,pack_id,pack,id,1);\r
+                    pack_id++;\r
+                } while (read_size==num);\r
+\r
+                fclose(fp);\r
+                free(buf);\r
+\r
+            }\r
         \r
+        }   \r
     }\r
        else\r
        {\r