蓝牙协议指令优化
authordxy <1731678236@qq.com>
Sat, 13 Apr 2024 10:16:48 +0000 (18:16 +0800)
committerdxy <1731678236@qq.com>
Sat, 13 Apr 2024 10:16:48 +0000 (18:16 +0800)
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c

index eabe610..e65573a 100644 (file)
@@ -1064,7 +1064,7 @@ void senfindphoneSend(uint8_t flag)
     sendBleData(sendBuf,19);\r
 }\r
 \r
-static void jsonCheck_time(uint8_t *buf)//json 格式解析\r
+static uint8_t jsonCheck_time(uint8_t *buf)//json 格式解析\r
 {\r
     char time_data[24];\r
     memset(time_data,0,24);\r
@@ -1074,7 +1074,7 @@ static void jsonCheck_time(uint8_t *buf)//json 格式解析
     cJSON* root = cJSON_Parse((const char *)json);\r
     if (root == NULL) {\r
         printf("时间 JSON解析错误\n");\r
-        return;\r
+        return 1;\r
     }\r
     char *locations;\r
     int year = 1970;\r
@@ -1132,6 +1132,7 @@ static void jsonCheck_time(uint8_t *buf)//json 格式解析
     sprintf((char *)time_data,"%d-%d-%d %d:%d:%d",year+2000,month,day,hour,minute,second);\r
     set_system_time(time_data);\r
     cJSON_Delete(root);\r
+    return 2;\r
 }\r
 \r
 \r
@@ -1153,12 +1154,91 @@ void GetUTCtime(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uin
     \r
        if(Check_CRC(crcnum,len,crcvalue))\r
        {\r
-        sendBuf[17] = 1;\r
+       \r
+        uint8_t *data;\r
+        data = crcnum;\r
+        uint8_t set_ok = 1;\r
+        set_ok = jsonCheck_time(data);\r
+        sendBuf[17] = set_ok;\r
+        sendBuf[18] = Calculate_CRC(sendBuf,18);\r
+        sendBleData(sendBuf,19);\r
+    }\r
+       else\r
+       {\r
+               sendBuf[17] = 0;\r
         sendBuf[18] = Calculate_CRC(sendBuf,18);\r
         sendBleData(sendBuf,19);\r
+    }\r
+    \r
+}\r
+\r
+static uint8_t jsonCheck_targetparam(uint8_t *buf)//训练目标参数\r
+{\r
+    \r
+    uint8_t *json;\r
+    json = buf;\r
+    cJSON* root = cJSON_Parse((const char *)json);\r
+    if (root == NULL) {\r
+        printf("时间 JSON解析错误\n");\r
+        return 1;\r
+    }\r
+        //     {\r
+        // "ty":0,\r
+        // "di":5000,\r
+        // }\r
+    cJSON* ty = cJSON_GetObjectItem(root, "ty");//目标类型\r
+    if (cJSON_IsNumber(ty)) {\r
+        printf("ty: %d\n", ty->valueint);\r
+        \r
+    }\r
+    cJSON* di = cJSON_GetObjectItem(root, "di");//目标距离\r
+    if (cJSON_IsNumber(di)) {\r
+        printf("di: %d\n", di->valueint);\r
+        \r
+    }\r
+    cJSON* ca = cJSON_GetObjectItem(root, "ca");//目标卡路里\r
+    if (cJSON_IsNumber(di)) {\r
+        printf("ca: %d\n", ca->valueint);\r
+        \r
+    }\r
+    cJSON* tm = cJSON_GetObjectItem(root, "tm");//目标时间\r
+    if (cJSON_IsNumber(tm)) {\r
+        printf("tm: %d\n", tm->valueint);\r
+        \r
+    }\r
+    cJSON* st = cJSON_GetObjectItem(root, "st");//目标步数\r
+    if (cJSON_IsNumber(st)) {\r
+        printf("st: %d\n", st->valueint);\r
+    }\r
+    cJSON_Delete(root);\r
+    return 2;\r
+}\r
+\r
+\r
+\r
+void GetTarinTarget(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取时间\r
+{\r
+    uint32_t tmp = 1;\r
+    uint16_t tmp_data = 1;\r
+    uint8_t sendBuf[19];\r
+    memset(sendBuf,0,19);\r
+    sendBuf[0] = 0x72;\r
+    sendBuf[1] = 0x02;\r
+    sendBuf[2] = 0x04;\r
+    memcpy(sendBuf+3,&tmp,4);\r
+    memcpy(sendBuf+7,&tmp,4);\r
+    memcpy(sendBuf+11,&tmp,4);\r
+    memcpy(sendBuf+15,&tmp_data,2);\r
+    \r
+       if(Check_CRC(crcnum,len,crcvalue))\r
+       {\r
         uint8_t *data;\r
         data = crcnum;\r
-        jsonCheck_time(data);\r
+        uint8_t set_ok = 1;\r
+        set_ok = jsonCheck_targetparam(data);\r
+        sendBuf[17] = set_ok;\r
+        sendBuf[18] = Calculate_CRC(sendBuf,18);\r
+        sendBleData(sendBuf,19);\r
     }\r
        else\r
        {\r
@@ -1168,6 +1248,8 @@ void GetUTCtime(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uin
     }\r
     \r
 }\r
+\r
+\r
 static void jsonCheck_alarm(uint8_t *buf)//json 解析闹钟数据\r
 {\r
     uint8_t *json;\r
@@ -1459,7 +1541,7 @@ void GetDrinkSetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *tota
     \r
 }\r
 \r
-static void jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据\r
+static uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据\r
 {\r
     uint8_t *json;\r
     json = buf;\r
@@ -1473,7 +1555,7 @@ static void jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
     cJSON* root = cJSON_Parse((const char *)json);\r
     if (root == NULL) {\r
         printf("天气 JSON解析错误\n");\r
-        return;\r
+        return 1;\r
     }\r
     cJSON *now_cjson = cJSON_GetObjectItem(root, "now");\r
     \r
@@ -1523,6 +1605,7 @@ static void jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
     // }\r
     cJSON_Delete(root);\r
     printf("weather data!!!!!!!!!!end\r\n");\r
+    return 2;\r
 }\r
 \r
 \r
@@ -1542,11 +1625,11 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,
 \r
        if(Check_CRC(crcnum,len,crcvalue))\r
        {\r
-        sendBuf[17] = 1;\r
+        uint8_t check = 1;\r
+        check = jsonCheck_weather(crcnum);\r
+        sendBuf[17] = check;\r
         sendBuf[18] = Calculate_CRC(sendBuf,18);\r
         sendBleData(sendBuf,19);\r
-        \r
-        jsonCheck_weather(crcnum);\r
     }\r
        else\r
        {\r
@@ -1718,8 +1801,8 @@ void type2AE4Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *total
         case SET_BLE_NAME_CMD:\r
             getPhoneInfo_test();\r
             break;\r
-        case SET_TRAIN_TARGET_CMD:\r
-\r
+        case SET_TRAIN_TARGET_CMD://训练目标\r
+            GetTarinTarget(typeID,data,datalen,totalData,crcvalue);\r
             break;\r
         case SET_address_book_CMD:\r
             getAPPaddressbook(typeID,data,datalen,totalData,crcvalue);\r
@@ -2771,7 +2854,7 @@ static void GetDrinkParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *
     memcpy(value+7,&tmp,4);\r
     memcpy(value+11,&tmp,4);\r
     memcpy(value+15,&tmp_data,2);\r
-    if(Check_CRC(crcnum,len,crcvalue))\r
+    if(1)\r
     {\r
         msg_drink_param_info_t drink_on_t;\r
         memset(&drink_on_t,0,sizeof(msg_drink_param_info_t));\r
@@ -2782,11 +2865,6 @@ static void GetDrinkParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *
         value[17] = drink_on_t.drink_on;// \r
         value[18] = Calculate_CRC(value,18);\r
         sendBleData(value,19);\r
-    }else\r
-    {\r
-        value[17] = 0;\r
-        value[18] = Calculate_CRC(value,18);\r
-        sendBleData(value,19);\r
     }\r
 }\r
 \r
@@ -2919,7 +2997,7 @@ static void GetSleepParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *
     memcpy(value+7,&datalen,4);\r
     memcpy(value+11,&tmp,4);\r
     memcpy(value+15,&tmp_data,2);\r
-    if(Check_CRC(crcnum,len,crcvalue))\r
+    if(1)\r
     {\r
         uint8_t sleepTime = 0;//作息时间设定 0关闭 1开启\r
         uint8_t bedTimeHour = 0;//就寝时间\r
@@ -2957,7 +3035,7 @@ static void GetAllDialUidCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *
     memcpy(value+7,&tmp,4);\r
     memcpy(value+11,&tmp,4);\r
     memcpy(value+15,&tmp_data,2);\r
-    if(Check_CRC(crcnum,len,crcvalue))\r
+    if(1)\r
     {\r
         uint8_t sleepTime = 0;//作息时间设定 0关闭 1开启\r
         uint8_t bedTimeHour = 0;//就寝时间\r
@@ -2995,7 +3073,7 @@ static void GetTargetStepCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *
     memcpy(value+7,&datalen,4);\r
     memcpy(value+11,&tmp,4);\r
     memcpy(value+15,&tmp_data,2);\r
-    if(Check_CRC(crcnum,len,crcvalue))\r
+    if(1)\r
     {\r
         uint32_t targetStep = 10000;//目标步数 4字节\r
         uint8_t ringOn = 0;//铃声提醒\r
@@ -3030,7 +3108,7 @@ static void GetTargetOtherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t
     memcpy(value+7,&datalen,4);\r
     memcpy(value+11,&tmp,4);\r
     memcpy(value+15,&tmp_data,2);\r
-    if(Check_CRC(crcnum,len,crcvalue))\r
+    if(1)\r
     {\r
         uint16_t targetKcal = 4556;//目标卡路里\r
         uint8_t targetKm = 0;//目标里程\r
@@ -3724,7 +3802,7 @@ void typeHexFiveData(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen)
 uint8_t bleSendTypeID=0;      //发送的数据类型\r
 //发送读出来的设备数据to APP\r
 uint16_t max_mtu_szie_data_len = 200;\r
-\r
+uint32_t EACH_DATA_LEN=0;//每种数据类型的的长度\r
 void sendReadData(void)\r
 {\r
     sendbigDataBufState = true;//分包同步数据不允许打断\r
@@ -3767,7 +3845,7 @@ void sendReadData(void)
         \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+STEP_DATA_LEN > ble_nus_max_data_len-3){\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
 \r
@@ -3810,7 +3888,7 @@ void sendReadData(void)
         else{\r
             if(packCount > 0)\r
             {\r
-                totalEnd = totalEnd+STEP_DATA_LEN;//第二包开始只加每个数据类型的总的字节数据大小 比如步数 数据类型 时间 步数 总共是8个就加8\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
@@ -3851,42 +3929,38 @@ void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)
     if(Check_CRC(crcnum+17,len-18,crcvalue))\r
     {\r
         bleSendTypeID=crcnum[2];\r
-\r
+        switch (crcnum[2])\r
+        {\r
+            case 0x40://同步心率历史数据\r
+                EACH_DATA_LEN = HEART_DATA_LEN;\r
+                break;\r
+            case 0x41://同步血氧历史数据\r
+                EACH_DATA_LEN = SPO2_DATA_LEN;\r
+                break;\r
+            case 0x43: //同步步数历史数据\r
+                EACH_DATA_LEN = STEP_DATA_LEN;\r
+                break;\r
+            case 0x44://同步燃脂时间数据\r
+                EACH_DATA_LEN = FATTIME_DATA_LEN;\r
+                break;\r
+            case 0x45://同步站立历史数据\r
+                EACH_DATA_LEN = STAND_DATA_LEN;\r
+                break;\r
+            case 0x46://同步卡路里历史数据\r
+                EACH_DATA_LEN = KCAL_DATA_LEN;\r
+                break;\r
+            case 0x47://同步距离历史数据\r
+                EACH_DATA_LEN = DIS_DATA_LEN;\r
+                break;\r
+            case 0x49://同步基础训练历史数据\r
+                EACH_DATA_LEN = DIS_DATA_LEN;\r
+                break;\r
+            case 0x4b://睡眠历史数据\r
+                break;\r
+            default:\r
+                break;\r
+        }\r
         sendReadData();\r
-        // switch (crcnum[2])\r
-        // {\r
-        //     case 0x40://同步心率历史数据\r
-        //         heartDataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x41://同步血氧历史数据\r
-        //         spo2DataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x43: //同步步数历史数据\r
-        //         stepDataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x44://同步燃脂时间数据\r
-        //         burntimeDataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x45://同步站立历史数据\r
-        //         standDataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x46://同步卡路里历史数据\r
-        //         kcalDataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x47://同步距离历史数据\r
-        //         disDataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x49://同步基础训练历史数据\r
-        //         trainiHistoryDataCmd(crcnum,len);\r
-        //         break;\r
-        //     case 0x4b://睡眠历史数据\r
-        //         sleepDataCmd(crcnum,len);\r
-        //         break;\r
-        //     default:\r
-        //         break;\r
-        // }\r
-        \r
-\r
     }else{\r
         crcnum[0] = 0x72;\r
         crcnum[len-1] = 0;\r