添加0106协议 451/1 451/head 453/target/1
authorhcj <1224667075@qq.com>
Thu, 4 Jul 2024 10:39:07 +0000 (18:39 +0800)
committerhcj <1224667075@qq.com>
Thu, 4 Jul 2024 10:39:07 +0000 (18:39 +0800)
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/ble_service/bleservice/bleEvent.h
code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h
code/sdk/drivers/peripheral/cywee/src/main_dml.c

index 285a9d4..2e30180 100644 (file)
@@ -83,6 +83,83 @@ void ble_set_ai_Answer_str(char *buf)
     OHOS::AiVoiceModel::GetInstance().SetAiAnswerStrStr(std::string(buf));
 }
 
+uint8_t ble_get_heart_data()
+{
+    OHOS::HeartRateData *data=(OHOS::HeartRateData*)malloc(sizeof(OHOS::HeartRateData));
+    data=OHOS::HealthService ::GetInstance()->ReadHeartRateData();
+    uint8_t heart=0;
+    if(data==NULL)
+    heart=0;
+    else
+    heart=data->Heart;
+
+    free(data);
+    return heart;
+}
+
+uint8_t ble_get_oxygen_data()
+{
+    OHOS::BloodOxygenData  *data=(OHOS::BloodOxygenData*)malloc(sizeof(OHOS::BloodOxygenData));
+    data=OHOS::HealthService ::GetInstance()->ReadBloodOxygenData();
+    uint8_t spo2=0;
+    if(data==NULL)
+    spo2=0;
+    else
+    spo2=data->SPO2;
+
+    free(data);
+    return spo2;
+}
+
+
+cJSON* ble_get_recs_data()
+{
+    cJSON* data_arryJSON = cJSON_CreateArray();
+    struct Trainingdata * data=NULL;
+    int i=0;
+    //char file_path[128] = {0};
+    char timeday[12] = {0};
+    uapi_get_YYMMDD_Time_extend(timeday, '_',0);
+    printf("%s\r\n",timeday);
+    //sprintf(file_path, "%s%s.bin", TRAINING_PATH_BLE, timeday);
+
+    while(data=read_Trainingdata_data(timeday, i))
+    {
+        cJSON* itemJSON = cJSON_CreateObject();
+        if(data!=NULL)
+        {
+            cJSON_AddNumberToObject(itemJSON,"src",data->src);
+            cJSON_AddNumberToObject(itemJSON,"ty",data->ty);
+            cJSON_AddNumberToObject(itemJSON,"st",data->st);
+            cJSON_AddNumberToObject(itemJSON,"sp",data->sp);
+            cJSON_AddNumberToObject(itemJSON,"tgt",data->tgt);
+            cJSON_AddNumberToObject(itemJSON,"tg",data->tg);
+            cJSON_AddNumberToObject(itemJSON,"pg",data->pg);
+            cJSON_AddNumberToObject(itemJSON,"du",data->du);
+            cJSON_AddNumberToObject(itemJSON,"ca",data->ca);
+            cJSON_AddNumberToObject(itemJSON,"di",data->di);
+            cJSON_AddNumberToObject(itemJSON,"hr",data->hr);
+            cJSON_AddNumberToObject(itemJSON,"stp",data->stp);
+            cJSON_AddNumberToObject(itemJSON,"ti",data->ti);
+            cJSON_AddNumberToObject(itemJSON,"cir",data->cir);
+            cJSON_AddNumberToObject(itemJSON,"alt",data->alt);
+            cJSON_AddNumberToObject(itemJSON,"fpc",data->fpc);
+            cJSON_AddNumberToObject(itemJSON,"spc",data->spc);
+            cJSON_AddNumberToObject(itemJSON,"std",data->std);
+            cJSON_AddNumberToObject(itemJSON,"cdc",data->cdc);
+
+            cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
+            free(data);
+            data=NULL;
+        }
+        else{
+            break;
+        }
+        i++;
+    }
+    return data_arryJSON;
+}
+
 // {
 // "type":3, 
 // "list":[
index e8ca311..21cc0ef 100644 (file)
@@ -26,7 +26,7 @@ extern "C"
 #include "stdint.h"
 #include "errcode.h"
 #include "bleEvent.h"
-
+#include "cJSON.h"
 
 
 
@@ -274,10 +274,47 @@ char Comment[30];
 char Cenre[1];
 }Tag_Trailer_t;
 
+typedef struct Tag_ID3V2
+{
+    char Header[3]; /*必须为"ID3"否则认为标签不存在*/
+
+    char Ver; /*版本号ID3V2.3 就记录3*/
+
+    char Revision; /*副版本号此版本记录为0*/
+
+    char Flag; /*存放标志的字节,这个版本只定义了三位,稍后详细解说*/
+
+    char Size[4]; /*标签大小,包括标签头的10 个字节和所有的标签帧的大小*/
+}Tag_ID3V2_t;
+
+
+typedef struct Tag_ID3V2_TAG
+{
+    char ID[4]; /*用四个字符标识一个帧,说明其内容,稍后有常用的标识对照表*/
+
+    char  Size[4]; /*帧内容的大小,不包括帧头,不得小于1*/
+
+    char Flags[2]; /*存放标志,只定义了6 位,稍后详细解说*/
+
+}Tag_ID3V2_TAG_T;
+
+
+
+
 char * dir_to_json_buf_malloc_(uint8_t type);
 
 char * dir_to_json_buf_malloc_(uint8_t type);
 
+
+
+/////////////////////数据同步////////////////////////////
+
+uint8_t ble_get_heart_data(void);
+
+uint8_t ble_get_oxygen_data(void);
+
+cJSON* ble_get_recs_data(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 6aba681..1f5e91b 100644 (file)
@@ -2763,55 +2763,97 @@ static void GetSDSpaceCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *total
     } \r
 }\r
 //获取当前数据\r
-static void GetCurDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+void GetCurDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
 {\r
+    if(!Check_CRC(data,len,crcvalue))\r
+    {\r
+        send_big_data(1,NULL,0,0,1,1,0x06,1);\r
+        return;\r
+    }\r
     cJSON *dataJSON = cJSON_CreateObject();\r
-    const char *string_value[8]={"hr","spo2","stress","steps","duration","standup","calories","distance"};\r
-    for(uint8_t i = 0;i<8;i++)\r
+    const char *string_value[7]={"hr","spo2","steps","duration","standup","calories","distance"};\r
+    for(uint8_t i = 0;i<7;i++)\r
     {\r
         cJSON* data_arryJSON = cJSON_CreateObject();\r
-        \r
-        cJSON_AddNumberToObject(data_arryJSON,"value",80);\r
-        cJSON_AddNumberToObject(data_arryJSON,"time",1633686477);\r
-        cJSON_AddItemToObject(dataJSON,string_value[i],data_arryJSON);\r
-    } \r
+        uint32_t value=0;\r
+        if(i==0)\r
+        {\r
+            value=ble_get_heart_data();\r
+        }\r
+        else if(i==1)\r
+        {\r
+            value=ble_get_oxygen_data();\r
+        }\r
+        else if(i==2)\r
+        {\r
+            value=get_step_data();\r
+        }\r
+        else if(i==3)\r
+        {\r
+            value=get_fat_time_data();\r
+        }\r
+        else if(i==4)\r
+        {\r
+            value=1;\r
+        }\r
+        else if(i==5)\r
+        {\r
+            value=get_calories_data();\r
+        }\r
+        else if(i==6)\r
+        {\r
+            value=get_distance_data();\r
+        }\r
+\r
 \r
+        cJSON_AddNumberToObject(data_arryJSON,"value",value);\r
+        uint32_t creationTime;\r
+        int ret =uapi_get_timestampe_ss(&creationTime);\r
+        cJSON_AddNumberToObject(data_arryJSON,"time",creationTime);\r
+\r
+        cJSON_AddItemToObject(dataJSON,string_value[i],data_arryJSON);\r
+    }\r
+    cJSON *recJSON= ble_get_recs_data();\r
+    cJSON_AddItemToObject(dataJSON,"recs",recJSON);\r
     char *json_format = cJSON_PrintUnformatted(dataJSON);\r
-       printf("%d\n",strlen(json_format));\r
+       printf("GetCurDataCmd %d %s\n",strlen(json_format),json_format);\r
     cJSON_Delete(dataJSON);\r
-    printf("%s\n",json_format);\r
+\r
     uint32_t data_len = strlen(json_format);\r
-    uint8_t value[data_len+18];\r
-    memset(value,0,data_len+18);\r
-    uint32_t tmp = 1;\r
-    uint16_t tmp_data = data_len;\r
-    uint32_t dataLen = data_len;\r
-    value[0] = 0x72;\r
-    value[1] = 0x01;\r
-    value[2] = 0x06;\r
-    memcpy(value+3,&tmp,4);\r
-    memcpy(value+7,&dataLen,4);\r
-    memcpy(value+11,&tmp,4);\r
-    memcpy(value+15,&tmp_data,2);\r
-    \r
-    // uint8_t buf[22] = {0x7b,0x22,0x74,0x70,0x22,0x3a,0x31,0x2c,0x22,0x70,0x6e,0x22,0x3a,0x22,0x69,0x50,0x68,0x6f,0x6e,0x65,0x22,0x7d};\r
-    \r
-    if(Check_CRC(data,len,crcvalue))\r
+    uint32_t surplus_len=data_len;\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_len%pack_size==0)\r
     {\r
-        memcpy(value+17,(uint8_t *)json_format,data_len);\r
-        \r
-        uint8_t lrc = Calculate_CRC(value,data_len+17);\r
-        printf("lrc:%d",lrc);\r
-        value[data_len+18] = lrc;\r
-        sendBleData(value,data_len+18);\r
-    }else\r
+        pack=data_len/pack_size;\r
+    }\r
+    else\r
+    {   \r
+        pack=data_len/pack_size+1;\r
+    }\r
+    uint32_t pack_id=1;\r
+    uint32_t offset=0;\r
+    while (surplus_len!=0)\r
     {\r
-        value[17] = 0;\r
-        uint8_t lrc = Calculate_CRC(value,18);\r
-        value[18] = lrc;\r
-        sendBleData(value,19);\r
+        if(surplus_len>=pack_size)\r
+        {\r
+            surplus_len=surplus_len-pack_size;\r
+            send_big_data(1,json_format+offset,pack_size,data_len,pack_id,pack,0x06,1);\r
+            offset+=pack_size;\r
+        }\r
+        else\r
+        {\r
+            \r
+            printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+            send_big_data(1,json_format+offset,surplus_len,data_len,pack_id,pack,0x06,1);\r
+            break;\r
+        }\r
+        pack_id++;\r
     }\r
     cJSON_free(json_format);\r
+    \r
 }\r
 //获取当手表电池电量\r
 static void GetBatteryLevelCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
index ce675a9..57fd69f 100644 (file)
@@ -779,6 +779,8 @@ void CustomEventPublish_TOPIC_EVENT_MESSAGENOTE(void);
 
 void send_AI_is_ready(uint8_t type);
 
+void GetCurDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue);
+
 #ifdef __cplusplus
 }
 #endif
index 6067736..36fdcb6 100644 (file)
@@ -527,6 +527,7 @@ void cywee_hand_updown_switch(int cmd);
 void cywee_ar_alert_switch(int cmd);
 
 void step_history_save(void);
+uint32_t get_step_data(void);
 void stand_history_save(void);
 void calories_history_save(void);
 void distances_history_save(void);
index a5f69bf..328d569 100644 (file)
@@ -117,6 +117,10 @@ void cywee_restoreData(void)
     //WM_OS_restoreData(int* data, uint32_t len,uint8_t type)(int* data, uint32_t len,uint8_t type);
 }
 
+uint32_t get_step_data(void)
+{
+    return stepcount;
+}
 void step_history_save(void)
 {
     CWM_OS_saveData_history(&stepcount,&history_step_,sizeof(int),CYWEE_SAVE_DATA_STEP);