Merge #25 into xts_origin from refs/changes/25/head 27/target/1 28/target/1
author胡传军 <1224667075@qq.com>
Wed, 17 Apr 2024 03:09:24 +0000 (03:09 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Wed, 17 Apr 2024 03:09:24 +0000 (03:09 +0000)
多包数据发送修改及通讯录AT指令添加修改

* refs/changes/25/head: (2 commits squashed)

  - 多包数据发送修改及通讯录AT指令添加修改

  - 修改编译错误

Signed-off-by: aliyun8003852482 <1224667075@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/25
14 files changed:
code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h
code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h
code/sdk/application/wearable/fd230app/nativeui/phone/src/phoneaddressmodel.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
code/sdk/application/wearable/service/msg_center/include/notify/charge_notification.h
code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp
code/sdk/application/wearable/service/msg_center/src/notify/charge_notification.cpp

index 79e6252..f687ee0 100644 (file)
@@ -116,7 +116,7 @@ namespace OHOS
         
         void SetLanguage(int languageid);
         int GetLanguage();
-        void SetLanguageCode(char *languagecode);
+        void SetLanguageCode(const char *languagecode);
         std::string GetLanguageCode(void);
 
         std::string Getimei();
index cf522e3..4cc7222 100644 (file)
@@ -521,7 +521,7 @@ namespace OHOS
         return get_configData_int(CONFIGMODEL_ITEM_LANGUAGE_ID);
     }
 
-    void ConfigModel::SetLanguageCode(char *languagecode)
+    void ConfigModel::SetLanguageCode(const char *languagecode)
     {
         set_condigData_String(CONFIGMODEL_ITEM_LANGUAGE_CODE,languagecode);
     }
index 25aa400..6ec0faa 100644 (file)
@@ -9,6 +9,21 @@ namespace OHOS
 {
     static HealthService *g_pHealthService = nullptr;
     static constexpr const char *HEALTH_JSON_PATH = "/user/userdata/health/";
+    std::string GetCurrentDate()
+    {
+        time_t now = time(0);
+        tm *ltm = localtime(&now);
+        char date[20];
+        strftime(date, sizeof(date), "%Y%m%d", ltm);
+        return std::string(date);
+    }
+    //static char *JSON_F_buf=NULL;
+    const char *GET_HEALTH_JSON_PATH_C_STR()
+    {
+        
+        
+        return HEALTH_JSON_PATH;
+    }
 
     cJSON *root = NULL;
     HealthService::HealthService()
@@ -42,14 +57,7 @@ namespace OHOS
         return true;
     }
     /*获取日期*/
-    std::string GetCurrentDate()
-    {
-        time_t now = time(0);
-        tm *ltm = localtime(&now);
-        char date[20];
-        strftime(date, sizeof(date), "%Y%m%d", ltm);
-        return std::string(date);
-    }
+   
     /*生成文件*/
     std::string GetJsonFilePath()
     {
index d6175d7..3b8b54f 100644 (file)
@@ -7,6 +7,7 @@
 #define HEART_MAX_POINTS 360
 namespace OHOS
 {
+    const char * GET_HEALTH_JSON_PATH_C_STR();
     typedef struct
     {
         uint16_t SPO2;      // 血氧值
index 8840ec1..c9dcb39 100644 (file)
@@ -134,7 +134,7 @@ namespace OHOS
     }
 
     // 切换语言功能
-    bool language::ChangeLanguage(int language_status)
+    bool language::ChangeLanguage(uint32_t currentLanguageId)
     {
 
         if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance())
@@ -143,15 +143,16 @@ namespace OHOS
             return false;
         }
 
-        FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, MAX_LANGUAGE, language_status);
-        UIFont::GetInstance()->SetCurrentLangId(language_status);
+        FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, MAX_LANGUAGE, currentLanguageId);
+        UIFont::GetInstance()->SetCurrentLangId(currentLanguageId);
 
-        ConfigModel::GetInstance()->SetLanguage(language_status);
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "resFiles[language_status]:%s", resFiles[language_status]);
+        ConfigModel::GetInstance()->SetLanguageCode(languages[currentLanguageId].code);
+        ConfigModel::GetInstance()->SetLanguage(currentLanguageId);
+       // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "resFiles[language_status]:%s", resFiles[language_status]);
         return true;
     }
 
-    bool language::ChangeLanguage(char *language_code)
+    bool language::ChangeLanguage( char *language_code)
     {
         if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance())
         {
index 4f71525..1e6a343 100644 (file)
@@ -65,7 +65,7 @@ namespace OHOS
         ~language();
         static language *GetInstance();
         bool InitLangues();
-        bool ChangeLanguage(int language_status);
+        bool ChangeLanguage(uint32_t);
         bool ChangeLanguage(char *language_code);
         bool fileExists(const char *fileName);
     };
index cf41b1c..420a57a 100644 (file)
@@ -157,7 +157,6 @@ namespace OHOS
 
     void write_addressbook_bin_flle()
     {
-        #if 0
         FILE *fp= fopen(ADDRESS_BOOK_PATH,"wb+");
         if(fp==NULL)
         return;
@@ -209,26 +208,26 @@ namespace OHOS
         }
         fwrite((void *)buf,1,offset,fp);
         fclose(fp);
-        #endif
+
     }
     
     void add_addressbook(struct Contact *data)
     {
        
-        #if 0
-        if(data->name!=NULL)
+        if(strlen(data->name)>0)
         {
              
-            addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen(data->name));
+           // addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen(data->name));
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s %d",data->name,addressbook_t.num);
+            memset(addressbook_t.Contact_t[addressbook_t.num].name,0,NAME_LEN);
             strcpy(addressbook_t.Contact_t[addressbook_t.num].name,data->name);
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",addressbook_t.Contact_t[addressbook_t.num].name);
         }
         else
         {
-            addressbook_t.num-=1;
-            return;
-            addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen("未知"));
+            
+            //addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen("未知"));
+            memset(addressbook_t.Contact_t[addressbook_t.num].name,0,NAME_LEN);
             strcpy(addressbook_t.Contact_t[addressbook_t.num+1].name,"未知"); 
         }
 
@@ -240,72 +239,79 @@ namespace OHOS
         data->phone_num=2;
         for(int i=0;i<data->phone_num;i++)
         {
-            if(data->phone_number_t[i].number)
+            if(strlen( data->phone_number_t[i].number)>0)
             {
-                addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
-                =(char *)malloc(strlen(data->phone_number_t[i].number));
+                // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
+                // =(char *)malloc(strlen(data->phone_number_t[i].number));
+                memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,0,NUMBER_LEN);
                 strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,data->phone_number_t[i].number);
             }
             else
             {
-                addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
-                =(char *)malloc(strlen("未知"));
+                // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
+                // =(char *)malloc(strlen("未知"));
+                memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,0,NUMBER_LEN);
                 strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,"未知");
             }
 
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook1111111111");
 
-            if(data->phone_number_t[i].affiliating_area)
+            if(strlen(data->phone_number_t[i].affiliating_area)>0)
             {
-                addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
-                =(char *)malloc(strlen(data->phone_number_t[i].affiliating_area));
+                // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
+                // =(char *)malloc(strlen(data->phone_number_t[i].affiliating_area));
+                memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,AREA_LEN);
                 strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,data->phone_number_t[i].affiliating_area);
             }
             else
             {
-                addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
-                =(char *)malloc(strlen("未知"));
+                // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
+                memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,AREA_LEN);
                 strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,"未知");
             }
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook2222222222");
 
-            if(data->phone_number_t[i].operator_t)
+            if(strlen(data->phone_number_t[i].operator_t)>0)
             {
-                addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
-                =(char *)malloc(strlen(data->phone_number_t[i].operator_t));
+                // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
+                // =(char *)malloc(strlen(data->phone_number_t[i].operator_t));
+                memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,OPERATOR_LEN);
                 strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t,data->phone_number_t[i].operator_t);
             }
             else
             {
-                addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
-                =(char *)malloc(strlen("未知"));
+                // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
+                // =(char *)malloc(strlen("未知"));
+                memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,OPERATOR_LEN);
                 strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t,"未知");
             }
         }
         addressbook_t.num+=1;
-        #endif
-    
+
     }
     
     void add_addressbook_by_AT(char *name,char *phone)
     {
-        // Contact data;
-        // data.sex=0;
-        // data.name=name;
-        // data.phone_num=1;
+        Contact data;
+        data.sex=0;
+
+        strcpy(data.name,name);
+        data.phone_num=2;
 
-        // data.phone_number_t[0].number=phone;
-        // memset(data.phone_number_t[0].affiliating_area,0,AREA_LEN);
-        // // data.phone_number_t[0].affiliating_area=NULL;
-        // // data.phone_number_t[0].operator_t=NULL;
-        // memset(data.phone_number_t[0].affiliating_area,0,OPERATOR_LEN);
+       // =phone;
+        strcpy(data.phone_number_t[0].number,phone);
+        memset(data.phone_number_t[0].affiliating_area,0,AREA_LEN);
+        // data.phone_number_t[0].affiliating_area=NULL;
+        // data.phone_number_t[0].operator_t=NULL;
+        memset(data.phone_number_t[0].affiliating_area,0,OPERATOR_LEN);
 
         // data.phone_number_t[1].number=NULL;
         // data.phone_number_t[1].affiliating_area=NULL;
         // data.phone_number_t[1].operator_t=NULL;
+        
 
-        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook");
-        // add_addressbook(&data);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook");
+        add_addressbook(&data);
     }
 
     void free_address()
index 95375d0..586eb62 100644 (file)
@@ -15,6 +15,9 @@ ${ROOT_DIR}/application/wearable/nativeapp/nativeui/heartrate/include
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/weather/include
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/heart_blood/health_service
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/phone/include
+${ROOT_DIR}/application/wearable/fd230app/nativeui/language/include 
+${ROOT_DIR}/application/wearable/fd230app/nativeui/language
+
 )
 
 set(SOURCES
index 32e99fe..713397a 100644 (file)
@@ -17,6 +17,7 @@
 #include "WeatherModel.h"
 #include "health_service.h"
 #include "phoneaddressmodel.h"
+#include "LanguageInit.h"
 #ifdef __cplusplus
 #if __cplusplus
 extern "C" {
@@ -47,6 +48,14 @@ extern "C" {
 #include "bleService.h"
 
 
+
+
+void set_languaage(uint32_t id)
+{
+    OHOS:: language language;
+    language.ChangeLanguage(id);
+}
+
 char *addressbook(void)//获取通讯录保存文件地址路径
 {
     return ADDRESS_BOOK_PATH;
@@ -81,6 +90,27 @@ void set_ble_falg(bool falg)
 {
     ble_falg=falg;
 }
+static char* JSON_F_buf=NULL;
+const char *get_health_data_path(void)
+{
+    time_t now = time(0);
+    tm *ltm = localtime(&now);
+    char day[20];
+    strftime(day, sizeof(day), "%Y%m%d", ltm);
+    char buf[124]={0};
+    sprintf(buf,"%s%s.json",OHOS::GET_HEALTH_JSON_PATH_C_STR(),day);
+    if(JSON_F_buf!=NULL)
+    {
+        free(JSON_F_buf);
+        JSON_F_buf=NULL;
+        
+    }
+    JSON_F_buf=(char *)malloc(strlen(buf)+1);
+    strcpy(JSON_F_buf,buf);
+       
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",JSON_F_buf);
+   return JSON_F_buf;
+}
 
 void set_weather_now_data(int humidity, char* windScale, char* textNight,int uvIndex,int temp,int iconNight)
 {
index 4199b7f..e5f4388 100644 (file)
@@ -22,7 +22,9 @@ enum PAIRING
 {
     DEVICEBIND = 0,//
     DEVICEUNBIND,//设备解绑通知
-    DeviceUnBindingRequest//设备解绑请求(与新设备连接)通知
+    DeviceUnBindingRequest,//设备解绑请求(与新设备连接)通知
+    REBOOT,
+    SHUTDOWN
 };
 void set_weather_now_data(int humidity, char* windScale, char* textNight,int uvIndex,int temp,int iconNight);
 
@@ -34,6 +36,7 @@ void set_ble_falg(uint8_t falg);
 uint8_t ble_is_connect_ready(void);
 char *addressbook(void);
 void addressbookToRead(void);
+const char *get_health_data_path(void);
 
 #ifdef __cplusplus
 #if __cplusplus
index af4bba7..b3fb0d9 100644 (file)
@@ -2340,7 +2340,7 @@ static void SetLanguageCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *to
     if(Check_CRC(crcnum,len,crcvalue))\r
     {\r
         uint8_t language = crcnum[0];\r
-\r
+        set_languaage(language);\r
         value[17] = 1; //1 操作成功 2 操作失败\r
         value[18] = Calculate_CRC(value,18);\r
         sendBleData(value,19);\r
@@ -2908,6 +2908,7 @@ static void GetFactoryCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *tot
     }\r
 }\r
 //APP发送重新启动\r
+static uint8_t power_buf[2]={0};\r
 static void GetResetCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
 {\r
     uint8_t value[19];\r
@@ -2926,7 +2927,10 @@ static void GetResetCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *total
         \r
         value[17] = 1;// \r
         value[18] = Calculate_CRC(value,18);\r
+        power_buf[0]=REBOOT;\r
+        CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2);\r
         sendBleData(value,19);\r
+\r
     }else\r
     {\r
         value[17] = 0;\r
@@ -2953,6 +2957,8 @@ static void GetPowerOffCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *to
         \r
         value[17] = 1;// \r
         value[18] = Calculate_CRC(value,18);\r
+        power_buf[0]=SHUTDOWN;\r
+        CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2);\r
         sendBleData(value,19);\r
     }else\r
     {\r
@@ -3753,8 +3759,7 @@ void type2AE3Data(uint16_t cmd ,uint8_t *data,uint16_t datalen,uint8_t *totaldat
             GetSynDataEndCmd(cmd,data,datalen,totaldata,crcvalue);\r
             break;\r
         case SYN_HEART_HISTORY_DATA_CMD://同步心率历史数据\r
-            heartDataCmd(cmd,data,datalen,totaldata,crcvalue);\r
-            break;\r
+            //heartDataCmd(cmd,data,datalen,totaldata,crcvalue);\r
         case SYN_SPO2_HISTORY_DATA_CMD://同步血氧历史数据\r
         case SYN_STEP_HISTORY_DATA_CMD: //同步步数历史数据\r
         case SYN_FAT_BURN_HISTORY_DATA_CMD://同步燃脂时间数据\r
@@ -3763,7 +3768,7 @@ void type2AE3Data(uint16_t cmd ,uint8_t *data,uint16_t datalen,uint8_t *totaldat
         case SYN_DIS_HISTORY_DATA_CMD://同步距离历史数据\r
         case SYN_BASIC_TRANIN_HISTORY_DATA_CMD://同步基础训练历史数据\r
         case SYN_SLEEP_HISTORY_DATA_CMD://睡眠历史数据\r
-            // readDevDataBle(totaldata,datalen+18,crcvalue);\r
+             readDevDataBle(totaldata,datalen+18,crcvalue);\r
             break;\r
         \r
         default:\r
@@ -3815,129 +3820,189 @@ uint8_t bleSendTypeID=0;      //发送的数据类型
 //发送读出来的设备数据to APP\r
 uint16_t max_mtu_szie_data_len = 200;\r
 uint32_t EACH_DATA_LEN=0;//每种数据类型的的长度\r
-void sendReadData(void)\r
+\r
+void send_big_data(uint8_t flag,char *data,int datalen,int total,uint32_t Packet_id,uint32_t packet_total,uint8_t type_id)\r
+{\r
+    uint8_t buf[512]={0};\r
+    buf[0]=0x72;\r
+    buf[1]=0x01;\r
+    buf[2]=type_id;\r
+    memcpy(buf+3,&packet_total,4);\r
+    memcpy(buf+7,&total,4);\r
+    memcpy(buf+11,&Packet_id,4);\r
+    memcpy(buf+15,&datalen,2);\r
+    if(flag)\r
+    {\r
+        uint16_t t=0x00;\r
+        memcpy(buf+17,&t,2);\r
+        memcpy(buf+19,data,datalen);\r
+        buf[19+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
+        sendDataNow(buf,19+datalen+1);\r
+\r
+    }\r
+    else\r
+    {\r
+       \r
+        memcpy(buf+17,data,datalen);\r
+        buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
+        printf("xxxxxxxxxxxxx\r\n");\r
+        sendDataNow(buf,17+datalen+1);\r
+\r
+    }\r
+   \r
+}\r
+\r
+void Read_spo2_file_buf_Data(uint8_t id)\r
 {\r
     sendbigDataBufState = true;//分包同步数据不允许打断\r
-    static uint32_t packCount = 0;\r
-    uint8_t buf[517];\r
-    memset(buf,0,517);\r
-    uint32_t dataLen = 0;\r
-    uint32_t sendDataLen = 0;\r
-    uint32_t totalLen = 0;\r
-    dataLen = 640; \r
-    uint32_t dataPack = 1;\r
-    uint16_t dataPackLen = 640;//减掉前面17+2个字节的包头总共就是19个数据(多包) 一包就减去17个字节\r
-    uint32_t time = 0;\r
-    uint32_t step = 0;\r
-    packCount = 1;\r
-    \r
-    uint16_t startDataLen = 17;\r
-    uint8_t crc = 0x00;\r
-    uint8_t crcvalue = 0x00;\r
-    uint16_t totalEnd = 0;\r
-    buf[0] = 0x72;\r
-    buf[1] = 0x01;\r
-    buf[2] = bleSendTypeID;\r
-    memcpy(buf+3,&dataPack,4);\r
-    memcpy(buf+7,&dataLen,4);\r
-    memcpy(buf+11,&dataPack,4);\r
-    memcpy(buf+15,&dataPackLen,2);\r
-    if(dataLen > ble_nus_max_data_len)//300-192=108 \r
-    {\r
-        startDataLen = 19;\r
-    }\r
-    while (1)\r
-    {\r
-\r
-\r
-        //json id=0 \r
-        time = 1711348052+3600*packCount;\r
-        memcpy(buf+startDataLen,&time,4);//21 \r
-        startDataLen=startDataLen+4;\r
-        step = 1000+packCount*1000;\r
-        memcpy(buf+startDataLen,&step,4);//25  \r
-        startDataLen=startDataLen+4;//时间 步数 时间 步数 时间 步数 每八个字节一个数据\r
+    char *buf=(char *)malloc(sizeof(char)*512);\r
+\r
+    const char *path=get_health_data_path();\r
+    FILE *fp= fopen(path,"r+");\r
+    if(fp==NULL)\r
+    {\r
+        printf("打开文件失败%s\r\n",path);\r
+        return;\r
+    }\r
+    int ret=fread(buf,1,512,fp);\r
+    uint8_t count=1;\r
+    while (ret==512)\r
+    {   \r
+        buf=realloc(buf,512*count+512);\r
+        ret=fread(buf+512*count,1,512,fp);\r
+        count++;\r
+    }\r
+    cJSON *heart_data=cJSON_Parse(buf);\r
+    free(buf);\r
+    printf("读文件\r\n");\r
+    if(heart_data==NULL)\r
+    {\r
+        printf("解析失败\r\n");\r
+    }\r
+    cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,"spo2_data_list");\r
+    int item_num=cJSON_GetArraySize(heart_data_list);\r
+    char *send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+    int send_len=0;\r
+    uint32_t Packet_id=1;\r
+    uint16_t packet_total;\r
+    if(item_num%96==0)\r
+    {\r
+        packet_total=item_num/96;\r
+    }\r
+    else\r
+    {\r
+         packet_total=item_num/96+1;\r
+    }\r
+    for(int i=0;i<item_num;i++)\r
+    {\r
+        cJSON * heart_data_item=cJSON_GetArrayItem(heart_data_list,i);\r
+        uint32 timestamp=cJSON_GetObjectItem(heart_data_item,"timestamp")->valueint;\r
+        uint8_t vale=cJSON_GetObjectItem(heart_data_item,"oxygen_value")->valueint;\r
+        memcpy(send_buf+send_len,&timestamp,4);\r
+        send_len+=4;\r
+        memcpy(send_buf+send_len,&vale,1);\r
+        send_len+=1;\r
         \r
-        //498\r
-        // printf("startDataLen:%d totalEnd:%d ble_nus_max_data_len %d\r\n",startDataLen,totalEnd,ble_nus_max_data_len);\r
-        if( startDataLen+EACH_DATA_LEN > ble_nus_max_data_len-3){\r
-            // printf("startDataLen111111111111:%d totalEnd:%d crcvalue:%d\r\n",startDataLen,totalEnd,crcvalue);\r
-            totalEnd = totalEnd+startDataLen;//240 300-240 \r
+        if((i%96==0 && i!=0) || (item_num-1==i))\r
+        {\r
+            //发送数据\r
+            if(item_num-1==i)\r
+            {\r
+                send_big_data(0,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+                free(send_buf);\r
+                sendbigDataBufState=false;\r
 \r
-            \r
-            // printf("startDataLen22222222222:%d totalEnd:%d crcvalue:%x\r\n",startDataLen,totalEnd,crcvalue);\r
-            if((totalEnd-17) >= dataLen && totalEnd > 17)\r
+            }else\r
             {\r
-                memcpy(buf+11,&packCount,4);\r
-                dataPackLen = startDataLen-17;\r
-                memcpy(buf+15,&dataPackLen,2);\r
-                crcvalue = Calculate_CRC_Big(buf+17,dataPackLen);\r
-                printf("end crcvalue1:%x\r\n",crcvalue);\r
-                buf[startDataLen] = crcvalue;\r
-                sendDataNow(buf,startDataLen+1);\r
-\r
-                packCount = 1;\r
-                sendbigDataBufState  = false;\r
-                break;\r
-            }else{\r
-                memcpy(buf+11,&packCount,4);\r
-                dataPackLen = startDataLen-19;//减掉前面17+2个字节的包头总共就是19个数据\r
-                memcpy(buf+15,&dataPackLen,2);\r
-                crcvalue = Calculate_CRC_Big(buf+19,dataPackLen);\r
-                uint16_t pack_size = ble_nus_max_data_len-17-crcvalue;\r
-                memcpy(buf+17,&pack_size,2);\r
-                printf("end crcvalue3:%x %d %d %d\r\n",crcvalue,ble_nus_max_data_len,pack_size,crcvalue);\r
-                buf[startDataLen] = crcvalue;//\r
-                sendDataNow(buf,startDataLen+1);\r
-                packCount+=1;\r
-                if(dataLen - totalEnd > ble_nus_max_data_len)//总的减去已发送的数据,如果还是大于最大mtu的大小还是还是按照分包来计算\r
-                {\r
-                    startDataLen = 19;\r
-                }\r
-                else{\r
-                    startDataLen = 17;\r
-                }\r
+                send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+                free(send_buf);\r
+                send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+                send_len=0;\r
             }\r
-            // printf("startDataLen2222222222:%d totalEnd:%d\r\n",startDataLen,totalEnd);\r
         }\r
-        else{\r
-            if(packCount > 0)\r
+        send_buf=realloc(send_buf,i*5+5);\r
+    }\r
+    cJSON_free(heart_data);\r
+    \r
+}\r
+\r
+void Read_heart_file_buf_Data(uint8_t num)\r
+{\r
+    sendbigDataBufState = true;//分包同步数据不允许打断\r
+    char *buf=(char *)malloc(sizeof(char)*512);\r
+\r
+    const char *path=get_health_data_path();\r
+    FILE *fp= fopen(path,"r+");\r
+    if(fp==NULL)\r
+    {\r
+        return;\r
+    }\r
+    int ret=fread(buf,1,512,fp);\r
+    uint8_t count=1;\r
+    while (ret==512)\r
+    {   \r
+        buf=realloc(buf,512*count+512);\r
+        ret=fread(buf+512*count,1,512,fp);\r
+        count++;\r
+    }\r
+    printf("读文件\r\n");\r
+    cJSON *heart_data=cJSON_Parse(buf);\r
+    free(buf);\r
+    if(heart_data==NULL)\r
+    {\r
+        printf("解析失败\r\n");\r
+    }\r
+    cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,"heart_data_list");\r
+    int item_num=cJSON_GetArraySize(heart_data_list);\r
+    char *send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+    int send_len=0;\r
+    uint32_t Packet_id=1;\r
+    uint16_t packet_total;\r
+    if(item_num%num==0)\r
+    {\r
+        packet_total=item_num/num;\r
+    }\r
+    else\r
+    {\r
+         packet_total=item_num/num+1;\r
+    }\r
+    for(int i=0;i<item_num;i++)\r
+    {\r
+        cJSON * heart_data_item=cJSON_GetArrayItem(heart_data_list,i);\r
+        uint32 timestamp=cJSON_GetObjectItem(heart_data_item,"timestamp")->valueint;\r
+        uint8_t vale=cJSON_GetObjectItem(heart_data_item,"heart_value")->valueint;\r
+        printf("heart_value :%d\r\n",vale);\r
+        printf("timestamp :%d\r\n",timestamp);\r
+        memcpy(send_buf+send_len,&timestamp,4);\r
+        send_len+=4;\r
+        memcpy(send_buf+send_len,&vale,1);\r
+        send_len+=1;\r
+        \r
+        if(((i+1)%num==0 && i!=0) || (item_num-1==i))\r
+        {\r
+            //发送数据\r
+            if(item_num-1==i)\r
             {\r
-                totalEnd = totalEnd+EACH_DATA_LEN;//第二包开始只加每个数据类型的总的字节数据大小 比如步数 数据类型 时间 步数 总共是8个就加8\r
-                // printf("pack1 startDataLen22222222222:%d totalEnd:%d crcvalue:%x\r\n",startDataLen,totalEnd,crcvalue);\r
-                if((totalEnd-17) >= dataLen && totalEnd > 17)\r
-                {\r
-                    memcpy(buf+11,&packCount,4);\r
-                    dataPackLen = startDataLen-17;\r
-                    memcpy(buf+15,&dataPackLen,2);\r
-                    crcvalue = Calculate_CRC_Big(buf+17,dataPackLen);\r
-                    buf[startDataLen] = crcvalue;\r
-                    sendDataNow(buf,startDataLen+1);\r
-                    sendbigDataBufState  = false;\r
-                    break;\r
-                }\r
-            }else{\r
-                if(dataPackLen < ble_nus_max_data_len) //只有总的包数小于最大的mtu的大小\r
-                {\r
-                    totalEnd = startDataLen-17;//不包含前17个字节的数据,前17个不是数据类型\r
-                    // printf("pack0 startDataLen22222222222:%d totalEnd:%d crcvalue:%x\r\n",startDataLen,totalEnd,crcvalue);\r
-                    if(totalEnd >= dataLen && totalEnd > 0)\r
-                    {\r
-                        memcpy(buf+11,&packCount,4);\r
-                        dataPackLen = startDataLen-17;\r
-                        memcpy(buf+15,&dataPackLen,2);\r
-                        crcvalue = Calculate_CRC_Big(buf+17,dataPackLen);\r
-                        printf("total end crcvalue2:%x\r\n",crcvalue);\r
-                        buf[startDataLen] = crcvalue;//校验和的值 最后一个校验和也要发给app\r
-                        sendDataNow(buf,startDataLen+1);\r
-                        sendbigDataBufState  = false;\r
-                        break;\r
-                    }\r
-                }\r
+                printf("sendbuf :%s sendbuf_len%d\r\n",send_buf,send_len);\r
+                send_big_data(0,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+                free(send_buf);\r
+                sendbigDataBufState=false;\r
+\r
+            }else\r
+            {\r
+                send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+                free(send_buf);\r
+                send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+                send_len=0;\r
             }\r
         }\r
+        send_buf=realloc(send_buf,i*5+10);\r
     }\r
+    cJSON_free(heart_data);\r
+    \r
 }\r
+\r
+\r
 //手机app下发读设备数据指令\r
 void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)\r
 {\r
@@ -3948,9 +4013,12 @@ void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)
         {\r
             case 0x40://同步心率历史数据\r
                 EACH_DATA_LEN = HEART_DATA_LEN;\r
+                Read_heart_file_buf_Data(3);\r
                 break;\r
             case 0x41://同步血氧历史数据\r
+                printf("同步血氧数据\r\n");\r
                 EACH_DATA_LEN = SPO2_DATA_LEN;\r
+                Read_spo2_file_buf_Data(0x41);\r
                 break;\r
             case 0x43: //同步步数历史数据\r
                 EACH_DATA_LEN = STEP_DATA_LEN;\r
@@ -3975,7 +4043,7 @@ void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)
             default:\r
                 break;\r
         }\r
-        sendReadData();\r
+        //sendReadData();\r
     }else{\r
         crcnum[0] = 0x72;\r
         crcnum[len-1] = 0;\r
index 809a6f8..357ed56 100644 (file)
@@ -10,7 +10,7 @@ namespace OHOS
     UIViewGroup* lowPowerShow(void);
     void set_lowpower_falg(bool falg);
     void FreelowPower(void);
-    void low_power_paly(void);
+    void low_power_paly(bool);
      
     class lowppowrAnimatorStopListener :public OHOS::UIImageAnimatorView::AnimatorStopListener
     {
index bfe9013..feeab27 100755 (executable)
@@ -40,6 +40,7 @@
 #include "testhrsenson.h" 
 #include "ConfigModel.h"
 #include "power_display_service.h"
+#include "bletest.h"
 //#include "Systemupgrade.h"
 namespace OHOS {
 
@@ -278,7 +279,7 @@ void MsgCenterNotifyLowPowerAlarmProc(const Topic topic, Request* req)
     if(*x==3)
     {
         //倒计时结束后,直接执行关机动画
-        low_power_paly();
+        low_power_paly(true);
     }
     else if(*x==0)
     {
@@ -742,19 +743,53 @@ void MsgCenterNotifyCat1PowerOnProc(const Topic topic, Request* req)
 #endif
 
 
-#ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION  //如果支持设备配对通知
+//#ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION  //如果支持设备配对通知
 //设备绑定通知
 void MsgCenterNotifyDeviceBindProc(const Topic topic, Request* req)
 {
-    unused(req);
+    //unused(req);
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyBindProc Bind!");
     const power_display_svr_api_t *display_api = power_display_svr_get_api();
     if (display_api->get_screen_state() != SCREEN_ON)
     {
         display_api->turn_on_screen();
     }
-    NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
-    NotificationManager::GetInstance()->ShowNotify(showDeviceBindingNotify, (uint16_t)topic, true);
+    uint8_t* data=(uint8_t*)req->data;
+    if(data!=NULL && req->len>=2)
+    {
+        switch (data[0])
+        {
+        case DEVICEBIND:
+            NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
+            NotificationManager::GetInstance()->ShowNotify(showDeviceBindingNotify, (uint16_t)topic, true);
+            break;
+        case DEVICEUNBIND:
+            NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
+            NotificationManager::GetInstance()->ShowNotify(showDeviceUnBindingNotify, (uint16_t)topic, true);
+            break;
+        case DeviceUnBindingRequest:
+            NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
+            NotificationManager::GetInstance()->ShowNotify(showDeviceUnbindingRequestNotify, (uint16_t)topic, true);
+            break;
+        case SHUTDOWN:
+            set_lowpower_falg(true);
+            NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
+            NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true);
+            low_power_paly(true);
+            break;
+        case REBOOT:
+            set_lowpower_falg(true);
+            NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
+            NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true);
+            low_power_paly(false);
+            break;
+
+        default:
+            break;
+        }
+       
+    }
+   
 }
 
 //设备解绑通知
@@ -785,7 +820,7 @@ void MsgCenterNotifyDeviceUnBindingRequestProc(const Topic topic, Request* req)
     NotificationManager::GetInstance()->ShowNotify(showDeviceUnbindingRequestNotify, (uint16_t)topic, true);
 
 }
-#endif
+//#endif
 
 //查找手表通知
 void MsgCenterNotifyFindWatchProc(const Topic topic, Request* req)
index a1c358d..f2c2a9b 100644 (file)
@@ -175,9 +175,11 @@ namespace OHOS
         }
         
     }
-    void low_power_paly(void)
+    bool poweroff_flag=true;
+    void low_power_paly(bool falg)
     {
         //uapi_poweroff_device(); // 关机
+        poweroff_flag=falg;
         group->SetVisible(true);
         UIImageAnimatorView::AnimatorStopListener *stoplistener =  static_cast<UIImageAnimatorView::AnimatorStopListener *>(lowppowrAnimatorStopListener::GetInstance());
         ShutDownImageAnimatorView->SetAnimatorStopListener(stoplistener);
@@ -313,7 +315,7 @@ namespace OHOS
             if(battery_falg)
             {
                 osTimerStop(low_power_timer);
-                low_power_paly();
+                low_power_paly(true);
 
             }
             else
@@ -330,9 +332,10 @@ namespace OHOS
     {
         //UNUSED(view);
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxxxxxxxxxOnAnimatorStop");
-       
-        uapi_poweroff_device(); // 关机    
-        
+        if(poweroff_flag)
+        uapi_poweroff_device(); // 关机 
+        else
+        uapi_reboot_device();
         //NotificationManager::GetInstance()->StopNotify();
         //
         // if(strcmp(view.GetViewId(),LOW_POWER_BUTTON)!=0)