小睡及睡眠数据修改 399/4 399/head 400/target/1
authorhcj <1224667075@qq.com>
Fri, 28 Jun 2024 07:42:40 +0000 (15:42 +0800)
committerhcj <1224667075@qq.com>
Fri, 28 Jun 2024 07:42:40 +0000 (15:42 +0800)
code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp
code/sdk/application/wearable/service/ble_service/blemoder/CMakeLists.txt
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 0658e48..73622aa 100644 (file)
@@ -32,10 +32,19 @@ namespace OHOS
         uapi_get_YYMMDD_Time(day,'\0');
 
         sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+        if (stat("user/userdata/sleep", &info) != 0)
+        {
+            if (mkdir("user/userdata/sleep", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
+            {
+                return false; // Failed to create folder
+            }
+        }
+
         if (stat(dir_path, &info) != 0)
         {
             if (mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
             {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir  fail %s",dir_path);
                 return false; // Failed to create folder
             }
         }
@@ -48,7 +57,7 @@ namespace OHOS
         fp=fopen(file_path,"wb+");
         if(fp==NULL)
         {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail");
             return false;
         }
 
@@ -65,6 +74,7 @@ namespace OHOS
         fwrite(&total_time,1,2,fp);
 
 
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data succ");
 
         fclose(fp);
         return true;
index 1b9bc4d..8636427 100644 (file)
@@ -21,6 +21,7 @@ ${ROOT_DIR}/application/wearable/fd230app/nativeui/traing/training_card/include
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/config/include
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/traing/include
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/uiservice/include
+${ROOT_DIR}/application/wearable/fd230app/nativeui/sleep/include
 #${ROOT_DIR}/application/wearable/fd230app/nativeui/alarm/include 
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/alarmclockmanage/include 
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include 
@@ -37,6 +38,7 @@ ${ROOT_DIR}/application/wearable/fd230app/nativeui/set_dial/include
 )
 
 set(SOURCES
+#${CMAKE_CURRENT_SOURCE_DIR}/bletest.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/bletest.cpp
 )
 
index 8faa4ec..3a2a831 100644 (file)
@@ -35,7 +35,7 @@
 
 #include "SetDialModel.h"
 
-
+#include "SleepModel.h"
 //#include "AlarmClockModel.h"
 #ifdef __cplusplus
 #if __cplusplus
@@ -70,7 +70,145 @@ extern "C" {
 
 #include <dirent.h>
 
+uint8_t ble_AT_add_nap_data(uint16_t time)
+{
+    OHOS::NAP_T data;
+    data.duration=time;
+    uint32_t creationTime;
+    int ret =uapi_get_timestampe_ss(&creationTime);
+    data.fall_asleep_timestamp=creationTime-60*60;
+    data.wake_up_timestamp=creationTime;
+    set_nap_data(&data);
+}
+
+uint8_t ble_get_sleep_data(uint32_t file_size,uint8_t day_,uint8_t *data)
+{
+    char dir_path[64]={0};
+    char day[12]={0};
+    uapi_get_YYMMDD_Time_extend(day,'\0', day_);
+    sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+
+    struct DIR *dir;
+    struct dirent *ent;
+
+    std::string fileName = ent->d_name;
+    uint32_t offset=0;
+    uint8_t sleep_count=1;
+
+    if ((dir = opendir(dir_path)) != NULL)
+    {
+        while ((ent = readdir(dir)) != NULL)
+        {
+            if (fileName != "." && fileName != "..")
+            {
+             
+                if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN ) // 普通文件
+                {
+
+                    char file_path[128]={0};
+                    sprintf_s(file_path,128,"%s/%s",dir_path,ent->d_name);
+                    
+                    FILE * fp = fopen(file_path,"rb+");
+                    if(fp==NULL)
+                    {
+                        printf(" fopen fail %s\r\n",file_path);
+                        return 1 ;
+                    }
+
+                    uint16_t sleep_file_size=0;
+                    if (fp != NULL)
+                    {
+                        fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+                        sleep_file_size = ftell(fp);       // 获取当前文件指针位置,即文件大小
+                        sleep_file_size++;
+                        fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+                        memcpy(data+offset,&sleep_file_size,2);
+                        *(data+offset+2)=sleep_count;
+                        sleep_count++;
+                        offset+=3;
+                        uint16_t read_size =fread(data+offset,1,sleep_file_size,fp);
+
+                        if((read_size+1)==sleep_file_size)
+                        offset+=read_size;
+                        else
+                        printf(" fread fail read_size:%d!= sleep_file_size:%d \r\n",read_size,sleep_file_size);
+
+                        fclose(fp);
+                    }
+                }
+            }
+            else if (ent->d_type == DT_DIR) // 目录
+            {
+                continue;
+            }
+        }
+    }
+    closedir(dir);
+
+    return offset;
+}
+
+
+
+
+uint8_t ble_get_sleep_data_dir(uint32_t *file_size,uint8_t day_)
+{
+    char dir_path[64]={0};
+    char day[12]={0};
+    uapi_get_YYMMDD_Time_extend(day,'\0', day_);
+    sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+
+    struct DIR *dir;
+    struct dirent *ent;
+
+    std::string fileName = ent->d_name;
+    uint8_t file_count=0;
+
+    if ((dir = opendir(dir_path)) != NULL)
+    {
+        while ((ent = readdir(dir)) != NULL)
+        {
+            if (fileName != "." && fileName != "..")
+            {
+             
+                if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN ) // 普通文件
+                {
+
+                    char file_path[128]={0};
+                    sprintf_s(file_path,128,"%s/%s",dir_path,ent->d_name);
+                    
+                    FILE * fp = fopen(file_path,"rb+");
+                    if(fp==NULL)
+                    {
+                        printf(" fopen fail %s\r\n",file_path);
+                        return file_count;
+                    }
+                   
+                    if (fp != NULL)
+                    {
+                        fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+                        *file_size += ftell(fp)+3;       // 获取当前文件指针位置,即文件大小
+                        fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+                        fclose(fp);
+                    }
+                    file_count++;
+                }
+            }
+            else if (ent->d_type == DT_DIR) // 目录
+            {
+                continue;
+            }
+        }
+    }
+    else
+    {
+        printf(" opendir fail %s\r\n",dir_path);
+        return file_count;
+    }
+    closedir(dir);
 
+    return file_count;
+}
 
 void ble_set_password(uint8_t falg, char * data)
 {
@@ -588,30 +726,12 @@ char * tar_dir_to_json_buf_malloc_(char* file_name,uint32_t *file_size)
     struct DIR *dir;
     struct dirent *ent;
    
-
     if ((dir = opendir(dir_path)) != NULL)
     {
         while ((ent = readdir(dir)) != NULL)
         {
             std::string fileName = ent->d_name;
 
-            char file_path[128]={0};
-            sprintf_s(file_path,128,"%s/%s",TAR_PATH,ent->d_name);
-              
-            FILE * fp = fopen(file_path,"rb+");
-            if(fp==NULL)
-            {
-                printf(" fopen fail %s\r\n",file_path);
-                return NULL;
-            }
-            if (fp != NULL)
-            {
-                fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
-                *file_size = ftell(fp);       // 获取当前文件指针位置,即文件大小
-                fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
-            }
-            fclose(fp);
-
             if (fileName != "." && fileName != "..")
             {
                 //std::string filePath = directory + fileName;
@@ -621,6 +741,24 @@ char * tar_dir_to_json_buf_malloc_(char* file_name,uint32_t *file_size)
                 {
                    
                     //*file_size=ent->d_reclen;
+                    char file_path[128]={0};
+                    sprintf_s(file_path,128,"%s/%s",TAR_PATH,ent->d_name);
+                    
+                    FILE * fp = fopen(file_path,"rb+");
+                    if(fp==NULL)
+                    {
+                        printf(" fopen fail %s\r\n",file_path);
+                        return NULL;
+                    }
+                    if (fp != NULL)
+                    {
+                        fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+                        *file_size = ftell(fp);       // 获取当前文件指针位置,即文件大小
+                        fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+                    }
+                    fclose(fp);
+
+
                     memcpy(file_name,file_path,strlen(file_path));
                     uint8_t crc= Calculate_CRC_file(file_name);
 
index 3a4749d..bcbca34 100644 (file)
@@ -27,6 +27,9 @@ extern "C"
 #include "errcode.h"
 #include "bleEvent.h"
 
+
+
+
     typedef enum transmitting_type {
     TRANS_DIAL_TRANSMITTING,
     TRANS_DIAL_SUCC,
@@ -246,6 +249,13 @@ void get_tar_dir_file_count(void);
 
 uint32_t tar_rmove(char *tar_path);
 
+uint8_t ble_get_sleep_data_dir(uint32_t *file_size,uint8_t day_);
+
+
+uint8_t ble_get_sleep_data(uint32_t file_size,uint8_t day_,uint8_t *data);
+
+uint8_t ble_AT_add_nap_data(uint16_t time);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 56255aa..da63cb8 100644 (file)
@@ -1717,7 +1717,9 @@ void GetVoiceVibrateParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *to
         }else if(type == 1)//只改变铃声音量参数 其他还是保持不变 按照原来的参数\r
         {\r
             int ring_volume = 0;\r
+\r
             ring_volume = data[1];\r
+\r
             Set_CallVolume(ring_volume);\r
 \r
         }else if(type == 2)//只改变媒体音量\r
@@ -4524,8 +4526,9 @@ void type2AE3Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,u
 {\r
     uint16_t cmd = cmd_buf[1]*256+cmd_buf[2];\r
      #ifdef BLE_LOG\r
-    printf("typeHexOneData:0x%04X\r\n",cmd);\r
+    \r
     #endif\r
+    printf("typeHexOneData:0x%04X\r\n",cmd);\r
     // uint8_t typeID = cmd_buf[2];\r
     switch (cmd)\r
     {\r
@@ -4727,10 +4730,79 @@ uint16_t max_mtu_szie_data_len = 200;
 uint32_t EACH_DATA_LEN=0;//每种数据类型的的长度\r
 \r
 \r
+void Send_Sleep_Bin_Data(uint8_t day, uint8_t num)\r
+{\r
+   \r
+    char *data=NULL;\r
+    uint32_t file_size=1;\r
+    uint8_t sleep_count = ble_get_sleep_data_dir(&file_size,day);\r
+\r
+    printf("Send_Sleep_Bin_Data file_size : %d \r\n",file_size);\r
+\r
+    data=(char *)malloc(file_size);\r
+    data[0]=sleep_count;\r
+\r
+    if(data==NULL)\r
+    {\r
+        #ifdef BLE_LOG\r
+            printf("malloc\r\n");\r
+        #endif\r
+\r
+        return;\r
+    }\r
+    ble_get_sleep_data(file_size,day,(uint8_t*)data+1);\r
+\r
+\r
+    if(data==NULL || file_size==1)\r
+    {\r
+        send_big_data(1,NULL,0,0,1,1,0x4b,1);\r
+        sendbigDataBufState = false;//分包同步数据不允许打断\r
+        return;\r
+    }\r
+    \r
+    uint32_t surplus_len=file_size;\r
+    uint32_t pack;\r
+    if(file_size%num==0)\r
+    {\r
+        pack=file_size/num;\r
+    }\r
+    else\r
+    {   \r
+        pack=file_size/num+1;\r
+    }\r
+        //printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+    uint32_t pack_id=1;\r
+    uint32_t offset=0;\r
+    while (surplus_len!=0)\r
+    {\r
+        if(surplus_len>=num)\r
+        {\r
+            surplus_len=surplus_len-num;\r
+            printf("%d %d %d %d\r\n",num,file_size,pack_id,pack);\r
+            send_big_data(1,data+offset,num,file_size,pack_id,pack,0x4b,1);\r
+            offset+=num;\r
+        }\r
+        else\r
+        {\r
+            //#ifdef BLE_LOG\r
+                printf("%d %d %d %d\r\n",surplus_len,file_size,pack_id,pack);\r
+            //#endif\r
+            send_big_data(1,data+offset,surplus_len,file_size,pack_id,pack,0x4b,1);\r
+            break;\r
+        }\r
+        pack_id++;\r
+    }\r
+    free(data);\r
+    \r
+}\r
+\r
 \r
-void Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char *data_item)\r
+bool Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char *data_item)\r
 {\r
    \r
+    // send_big_data(1,NULL,0,0,1,1,id,1);\r
+    // return;\r
+\r
     char *buf=NULL;\r
     const char *path=NULL;\r
     uint8_t timeBit = 4;//默认是4个字节的时间戳\r
@@ -4745,21 +4817,14 @@ void Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char
             path=get_health_OXYGEN_data_path(day);\r
             dataBit = 1;//血氧数据字节1个字节 uint8_t\r
             break;\r
-        case 0x4b://睡眠历史数据\r
-            path=NULL;\r
-            break;\r
     }\r
     if(path==NULL)\r
     {\r
-        send_big_data(1,NULL,0,0,1,1,id,1);\r
-        sendbigDataBufState = false;//分包同步数据不允许打断\r
-        return;\r
+        return false;\r
     }\r
-    \r
     FILE *fp= fopen(path,"r+");\r
     if(fp==NULL)\r
     {\r
-        send_big_data(1,NULL,0,0,1,1,id,1);\r
         #ifdef BLE_LOG\r
             printf("打开文件失败 %s \r\n",path);\r
         #endif\r
@@ -4768,11 +4833,14 @@ void Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char
             ym_free(path);\r
             path = NULL;\r
         }\r
-       \r
-        sendbigDataBufState = false;//分包同步数据不允许打断\r
-        return;\r
+        return false;\r
     }\r
+\r
     buf = (char *)ym_malloc(sizeof(char)*512);\r
+    if(buf==NULL)\r
+    {\r
+        return false;\r
+    }\r
     int ret=fread(buf,1,512,fp);\r
     uint8_t count=1;\r
     while (ret==512)\r
@@ -4781,28 +4849,39 @@ void Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char
         ret=fread(buf+512*count,1,512,fp);\r
         count++;\r
     }\r
+\r
     fclose(fp);\r
+\r
     if(path)\r
     {\r
         ym_free(path);\r
         path = NULL;\r
     }\r
+\r
     cJSON *heart_data=cJSON_Parse(buf);\r
+\r
+    if(buf)\r
+    free(buf);\r
+    \r
     #ifdef BLE_LOG\r
         printf("读文件\r\n");\r
     #endif\r
     if(heart_data==NULL)\r
-    {\r
-        #ifdef BLE_LOG\r
-            printf("解析失败\r\n");\r
-        #endif\r
-        send_big_data(1,NULL,0,0,1,1,id,1);\r
-        sendbigDataBufState = false;//分包同步数据不允许打断\r
-        return;\r
-    }\r
+    return false;   \r
     cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,data_item);\r
+    if(heart_data_list==NULL)\r
+    return false;\r
     int item_num=cJSON_GetArraySize(heart_data_list);\r
+    if(item_num==0)\r
+    return false;\r
+\r
     char *send_buf=(char *)ym_malloc(sizeof(char)*HEART_DATA_LEN);\r
+    if(send_buf==NULL)\r
+    {\r
+        cJSON_Delete(heart_data);\r
+        return false;\r
+    }\r
+   \r
     int send_len=0;\r
     uint32_t Packet_id=1;\r
     uint16_t packet_total;\r
@@ -4843,7 +4922,6 @@ void Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char
                     ym_free(send_buf);\r
                     send_buf = NULL;\r
                 }\r
-                sendbigDataBufState=false;\r
 \r
             }else\r
             {\r
@@ -4866,20 +4944,14 @@ void Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char
         ym_free(send_buf);\r
         send_buf = NULL;\r
     }\r
-\r
-    sendbigDataBufState=false;\r
-\r
     cJSON_Delete(heart_data);\r
-    \r
+    return true;\r
 }\r
 \r
 void Read_BIN_file_buf_send_bin_Data(uint8_t day,uint32_t pack_size,uint16_t id)\r
 {\r
     sendbigDataBufState = true;//分包同步数据不允许打断\r
-    char *buf=NULL;\r
     const char *data=NULL;\r
-    uint8_t timeBit = 4;//默认是4个字节的时间戳\r
-    uint8_t dataBit = 1;//默认是1个字节的数据\r
     uint32_t data_len = 0;\r
    \r
     data=ble_sywee_history(day,&data_len,id);\r
@@ -4890,42 +4962,39 @@ void Read_BIN_file_buf_send_bin_Data(uint8_t day,uint32_t pack_size,uint16_t id)
         sendbigDataBufState = false;//分包同步数据不允许打断\r
         return;\r
     }\r
-    \r
-        \r
 \r
-        uint32_t surplus_len=data_len;\r
-        uint32_t pack;\r
-        if(data_len%pack_size==0)\r
+    uint32_t surplus_len=data_len;\r
+    uint32_t pack;\r
+    if(data_len%pack_size==0)\r
+    {\r
+        pack=data_len/pack_size;\r
+    }\r
+    else\r
+    {   \r
+        pack=data_len/pack_size+1;\r
+    }\r
+        //printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+    uint32_t pack_id=1;\r
+    uint32_t offset=0;\r
+    while (surplus_len!=0)\r
+    {\r
+        if(surplus_len>=pack_size)\r
         {\r
-            pack=data_len/pack_size;\r
+            surplus_len=surplus_len-pack_size;\r
+            send_big_data(1,data+offset,pack_size,data_len,pack_id,pack,id,1);\r
+            offset+=pack_size;\r
         }\r
         else\r
-        {   \r
-            pack=data_len/pack_size+1;\r
-        }\r
-         //printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
-        uint32_t pack_id=1;\r
-        uint32_t offset=0;\r
-        while (surplus_len!=0)\r
         {\r
-           if(surplus_len>=pack_size)\r
-           {\r
-                surplus_len=surplus_len-pack_size;\r
-                send_big_data(1,data+offset,pack_size,data_len,pack_id,pack,id,1);\r
-                offset+=pack_size;\r
-           }\r
-           else\r
-           {\r
-                #ifdef BLE_LOG\r
-                    printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
-                #endif\r
-                send_big_data(1,data+offset,surplus_len,data_len,pack_id,pack,id,1);\r
-                break;\r
-           }\r
-           pack_id++;\r
+            #ifdef BLE_LOG\r
+                printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+            #endif\r
+            send_big_data(1,data+offset,surplus_len,data_len,pack_id,pack,id,1);\r
+            break;\r
         }\r
-        free(data);\r
-        sendbigDataBufState = false;\r
+        pack_id++;\r
+    }\r
+    free(data);\r
     \r
 }\r
 \r
@@ -4959,21 +5028,25 @@ void readDevDataBle(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,u
         switch (bleSendTypeID)\r
         {\r
             case 0x40://同步心率历史数据\r
+        \r
+\r
                 EACH_DATA_LEN = HEART_DATA_LEN;\r
                 num=(ble_nus_max_data_len-18)/HEART_DATA_LEN;\r
-                if(num>96)\r
-                {\r
-                    num=96;\r
-                }\r
+                if(num>96)num=96;\r
                 #ifdef BLE_LOG\r
                 printf("同步心率数据,每包最多:%d 条数据 data:%d %d\r\n",num,data[0],len);\r
                 #endif\r
-                Read_JSON_file_buf_send_bin_Data(data[0],num,0x40,"heart_data_list");\r
+                if(!Read_JSON_file_buf_send_bin_Data(data[0],num,0x40,"heart_data_list"))\r
+                send_big_data(1,NULL,0,0,1,1,0x40,1);\r
+\r
                 break;\r
             case 0x41://同步血氧历史数据\r
                 EACH_DATA_LEN = SPO2_DATA_LEN;\r
                 num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
-                Read_JSON_file_buf_send_bin_Data(data[0],num,0x41,"spo2_data_list");\r
+                if(num>96)num=96;\r
+                if(!Read_JSON_file_buf_send_bin_Data(data[0],num,0x41,"spo2_data_list"))\r
+                send_big_data(1,NULL,0,0,1,1,0x41,1);\r
+\r
                 break;\r
             case 0x43: //同步步数历史数据\r
             \r
@@ -5039,8 +5112,9 @@ void readDevDataBle(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,u
                 break;\r
             case 0x4b://睡眠历史数据\r
                 EACH_DATA_LEN = DIS_DATA_LEN;\r
-                num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
-                Read_JSON_file_buf_send_bin_Data(data[0],num,0x4b,"heart_data_list");\r
+                num=(ble_nus_max_data_len-18);\r
+                if(num>482)num=482;\r
+                Send_Sleep_Bin_Data(data[0],num);\r
                 break;\r
             case 0x21://文件目录\r
                 EACH_DATA_LEN = DIS_DATA_LEN;\r