debug 1 164/target/1
authorDXY <1731678236@qq.com>
Sat, 11 May 2024 11:43:30 +0000 (19:43 +0800)
committerDXY <1731678236@qq.com>
Sat, 11 May 2024 11:43:30 +0000 (19:43 +0800)
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.h

index a4a53d4..7826e08 100755 (executable)
@@ -406,6 +406,8 @@ static void thread_main(const void *unused)
     cat1_server_init();\r
 #endif\r
 \r
+    uapi_blesrv_service_init();\r
+    \r
     start_custom_ble_service();\r
 \r
     startup_post_init();\r
index 23adfee..edac3ba 100644 (file)
@@ -108,6 +108,7 @@ namespace OHOS
         void openBle(void);        // 主动开启蓝牙\r
         bool get_ble_status(void); // 获取蓝牙是否关闭还是开启 1就是开启 0关闭 一开机默认是开启蓝牙\r
         void getDeviceState(void);\r
+        void malloc_test(void);\r
     }\r
     bool ClassicBlueToothPresenter::OnChange(UICheckBox::UICheckBoxState state)\r
     {\r
@@ -116,17 +117,18 @@ namespace OHOS
         {\r
         case UICheckBox::SELECTED:\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BlueTooth Capability Is Enabled");\r
+            malloc_test();\r
+            // start_custom_ble_service(); // 主动开启蓝牙\r
 \r
-            start_custom_ble_service(); // 主动开启蓝牙\r
-\r
-            ConfigModel::GetInstance()->SetClassicBlueToothState(true);\r
+            // ConfigModel::GetInstance()->SetClassicBlueToothState(true);\r
             break;\r
         case UICheckBox::UNSELECTED:\r
+            malloc_test();\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BlueTooth Capability Is Disabled");\r
 \r
-            stop_custom_ble_service();\r
+            // stop_custom_ble_service();\r
 \r
-            ConfigModel::GetInstance()->SetClassicBlueToothState(false);\r
+            // ConfigModel::GetInstance()->SetClassicBlueToothState(false);\r
             break;\r
         default:\r
             break;\r
index 58d4379..46311d2 100644 (file)
@@ -423,8 +423,10 @@ void set_user_data(msg_user_info_t data)
 
     
     //目标站立
+    printf("目标站立\r\n");
     p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SPORTS_GOAL_STANDUP_TIMES,data.target_stand);
     //目标燃脂
+    printf("目标燃脂\r\n");
     p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SPORTS_GOAL_DURATION,data.fat_time);
     /*
     时制
@@ -660,7 +662,7 @@ const char *get_health_data_path(void)
     }
     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;
 }
@@ -772,6 +774,7 @@ void read_message_data(void)
                }
             }
         }
+        cJSON_Delete(data_root);
     }
     // printf("message_infor_s.num%d\r\n",message_infor_s.num); //2 1 0
     // for(uint8_t i = message_infor_s.num-1;i > 0 ;i--)
index ee5f23c..7d52fb8 100644 (file)
@@ -55,7 +55,29 @@ static uint16_t data_len = 0;
 ble_recv_data_info_t ble_recv_data;\r
 ble_recv_msg_callback_t g_recv_msg_toUI = NULL;\r
 #if 1\r
+#include "app_msg_manager.h"\r
+#include "app_tx_process.h"\r
+static int ym_malloc_count = 0,ym_free_count = 0;\r
+static void *ym_malloc(unsigned int size)\r
+{\r
+    // app_pkg_msg_send(HEAPINFO, DIAG_CONTROL_FALSE, NULL, 0);\r
 \r
+    return malloc(size);\r
+}\r
+static void  ym_free(void * p)\r
+{\r
+    free(p);\r
+}\r
+void malloc_test(void)\r
+{\r
+    for(int i = 0;i<1000;i++)\r
+    {\r
+        char * temp = ym_malloc(i*10);\r
+        printf("i:%d,addr:%x\r\n",i,temp);\r
+        \r
+    }\r
+    app_pkg_msg_send(HEAPINFO, DIAG_CONTROL_FALSE, NULL, 0);\r
+}\r
 // typedef void (*hx3695_msg_callback_t)(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen);\r
 uint32_t ble_recv_register_msg_callback(ble_recv_msg_callback_t func)\r
 {\r
@@ -135,9 +157,6 @@ int ble_recv_msg_callback(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_da
                 drink_info.end_hour = msg_data[6];\r
                 drink_info.end_min = msg_data[7];\r
                 drink_info.frequenc = msg_data[8];\r
-                printf("drink_info %d %d %d %d %d %d\r\n",drink_info.drink_on,drink_info.alarm_mode,\r
-                drink_info.target_drink,drink_info.start_hour,drink_info.startt_min,drink_info.end_hour,\r
-                drink_info.end_min,drink_info.frequenc);\r
                 // memcpy(msg_data,&drink_info,sizeof(msg_drink_set_param_info_t));\r
                 break;\r
             case GET_DRINK_SWITCH_CMD:\r
@@ -156,10 +175,6 @@ int ble_recv_msg_callback(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_da
                 break;\r
         }\r
     }\r
-    for(uint16_t i = 0;i<msg_datalen;i++)\r
-    {\r
-        printf("%02x ",msg_data[i]);\r
-    }\r
     int ret = 1;\r
     return ret;\r
 }\r
@@ -177,7 +192,6 @@ void char_to_big(uint8_t *src_str,uint8_t *res_str,uint8_t len)
     {\r
         if(src_str[i] >= 'a' && src_str[i] <= 'z') {\r
             src_str[i] = src_str[i] - 32;\r
-            printf("src_tr:\r\n");\r
         }\r
     }\r
     memcpy(res_str,src_str,len);\r
@@ -189,7 +203,6 @@ void cameram_data(void)//拍照发送数据 调用这个接口即可
     osal_msleep(100); /* wait 100 ms */\r
     memset(data,0,2);\r
     (void)ble_hid_server_send_input_report(&data, 2); /* 上报按下按键 把停止发送指令也要发送 防止一直拍照*/\r
-    printf("cameram_send_data:0x%x",ret);\r
 }\r
 \r
 bool bigDataBufState=false;//大数据传输状态\r
@@ -274,10 +287,6 @@ errcode_t sendBleData(uint8_t *buf,uint16_t len)
     errcode_t ret = ERRCODE_FAIL;\r
     printf("bigDataBufState:%d and  sendbigDataBufState %d\r\n",bigDataBufState,sendbigDataBufState);\r
     if(bigDataBufState == true || sendbigDataBufState == true)return ERRCODE_FAIL; //在手表发送分包数据时 手表不允许发指令给app\r
-    for(uint16_t i = 0;i<len;i++)\r
-    {   \r
-       printf("%02x ",buf[i]);\r
-    }\r
     if(Bleconnect == true )\r
     {\r
         ret = svr_ble_bt_gatts_noyify(buf,len);\r
@@ -290,11 +299,6 @@ void sendDataNow(uint8_t *buf,uint16_t len)
 {\r
     if(Bleconnect == true )\r
     {\r
-        for(uint16_t i = 0;i<len;i++)\r
-        {   \r
-            printf("%02x ",buf[i]);\r
-        }\r
-\r
         svr_ble_bt_gatts_noyify(buf,len);\r
     }\r
 }\r
@@ -302,7 +306,8 @@ void sendDataNow(uint8_t *buf,uint16_t len)
 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, uint8_t type)\r
 {\r
     // 动态分配内存空间,防止堆栈溢出\r
-    uint8_t *buf = malloc(17 + datalen + 1); \r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send_big_data!!!\r\n");\r
+    uint8_t *buf = ym_malloc(17 + datalen + 1); \r
     if (buf == NULL) {\r
         printf("内存分配失败\n");\r
         return;\r
@@ -333,7 +338,8 @@ void send_big_data(uint8_t flag, char *data, int datalen, int total, uint32_t Pa
         sendBleData(buf, 17 + datalen + 1); // 判断是否在传输或接收多包数据\r
     }\r
 \r
-    free(buf); // 释放内存空间\r
+    ym_free(buf); // 释放内存空间\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send_big_data1111!!!\r\n");\r
 }\r
 //发送训练状态[app发起的运动]\r
 void sendtraningstatedata(uint8_t state ,uint16_t time)\r
@@ -443,7 +449,7 @@ static uint8_t  jsonCheck_phoneinfor(uint8_t *buf,uint8_t *mac_data,char *devnam
             memcpy((uint8_t *)devname,(uint8_t *)pn->valuestring,strlen(pn->valuestring));\r
         }\r
         \r
-        printf("设备名称: %s\n", pn->valuestring);\r
+        // printf("设备名称: %s\n", pn->valuestring);\r
     }\r
 \r
     cJSON* tp = cJSON_GetObjectItem(root, "tp");\r
@@ -515,7 +521,6 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用
 void getDeviceState(void)\r
 {\r
     bool ret = bt_is_acl_connected(&phone_addr);\r
-    printf("remove11111!!!!!!:%d",ret);\r
 }\r
 \r
 void clearPaireFlag(uint8_t flag)\r
@@ -570,25 +575,25 @@ void comfirmPaire(uint8_t flag)
     if(flag == 1)\r
     {\r
         first_bond = 1;\r
-        printf("gap_ble_pair_remote_device 333333333 %x-%x-%x-%x-%x-%x\r\n",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]);\r
+        // printf("gap_ble_pair_remote_device 333333333 %x-%x-%x-%x-%x-%x\r\n",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]);\r
 \r
         errcode_t code = gap_ble_pair_remote_device(&phone_addr);\r
         if(code!=ERRCODE_SUCC)\r
         {\r
             printf("gap_ble_pair_remote_device fail %X\r\n",code);\r
         }\r
-\r
     }else{\r
         first_bond = 0;\r
         errcode_t ret = 0;\r
         ret = gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
-        printf("gap_ble_disconnect_remote_device %x\r\n",ret);\r
+        // printf("gap_ble_disconnect_remote_device %x\r\n",ret);\r
         ret = gap_ble_remove_all_pairs(); \r
         bool ret_ok = gap_remove_all_pairs();\r
-        printf("gap_remove_all_pairs  %x %x\r\n",ret,ret_ok);\r
+        // printf("gap_remove_all_pairs  %x %x\r\n",ret,ret_ok);\r
         if(savephonename != NULL)\r
         {\r
-            free(savephonename);\r
+            ym_free(savephonename);\r
+            savephonename = NULL;\r
         }\r
     }\r
 }\r
@@ -619,14 +624,14 @@ static void getRecvPhoneInfo(uint8_t *phonemac,uint8_t *name,uint8_t *len,uint8_
         long fileSize = ftell(jsfile);\r
         fseek(jsfile, 0, SEEK_SET);\r
 \r
-        char *jsonData = (char *)malloc(fileSize + 1);\r
+        char *jsonData = (char *)ym_malloc(fileSize + 1);\r
         fread(jsonData, 1, fileSize, jsfile);\r
         jsonData[fileSize] = '\0';\r
         fclose(jsfile);\r
 \r
         // 解析JSON数据\r
         cJSON *root = cJSON_Parse(jsonData);\r
-        free(jsonData);\r
+        ym_free(jsonData);\r
 \r
         if (root != NULL) {\r
             cJSON *modifiedJson = cJSON_GetObjectItem(root,"mac");\r
@@ -710,13 +715,13 @@ static uint8_t *getPhoneName(uint8_t *crcnum)//获取手机设备名称
             uint8_t datalen = strlen(pn->valuestring)+1;   \r
             if(datalen - 1 > 0){\r
                 pn->valuestring[datalen-1]='\0';\r
-                str = malloc(sizeof(char)*datalen);\r
-                savephonename =  malloc(sizeof(char)*datalen);\r
+                str = ym_malloc(sizeof(char)*datalen);\r
+                savephonename =  ym_malloc(sizeof(char)*datalen);\r
                 memcpy(str,(uint8_t *)pn->valuestring,datalen);\r
                 // strcpy(str,pn->valuestring);\r
                 memcpy(savephonename,(uint8_t *)pn->valuestring,datalen);\r
                 // strcpy(savephonename,pn->valuestring);\r
-                printf("str:%s savephonename:%s\n",str,savephonename);\r
+                // printf("str:%s savephonename:%s\n",str,savephonename);\r
             }\r
             printf("设备名称: %s\n", pn->valuestring);\r
         }\r
@@ -777,14 +782,14 @@ void GetwatchSaveMac(uint8_t *mac,uint8_t *mactype)//获取手表本地保存的
         long fileSize = ftell(jsfile);\r
         fseek(jsfile, 0, SEEK_SET);\r
 \r
-        char *jsonData = (char *)malloc(fileSize + 1);\r
+        char *jsonData = (char *)ym_malloc(fileSize + 1);\r
         fread(jsonData, 1, fileSize, jsfile);\r
         jsonData[fileSize] = '\0';\r
         fclose(jsfile);\r
         // 解析JSON数据\r
         cJSON *root = cJSON_Parse(jsonData);\r
         // 释放资源\r
-        free(jsonData);\r
+        ym_free(jsonData);\r
         if (root != NULL) {\r
             cJSON *modifiedJson = cJSON_GetObjectItem(root,"mac");\r
             if (cJSON_IsArray(modifiedJson)) {\r
@@ -833,15 +838,14 @@ static void GetwatchSaveNameLen(uint8_t *datalen)//获取手表本地保存的
         long fileSize = ftell(jsfile);\r
         fseek(jsfile, 0, SEEK_SET);\r
 \r
-        char *jsonData = (char *)malloc(fileSize + 1);\r
+        char *jsonData = (char *)ym_malloc(fileSize + 1);\r
         fread(jsonData, 1, fileSize, jsfile);\r
         jsonData[fileSize] = '\0';\r
         fclose(jsfile);\r
 \r
         // 解析JSON数据\r
         cJSON *root = cJSON_Parse(jsonData);\r
-        free(jsonData);\r
-\r
+        ym_free(jsonData);\r
         if (root != NULL) {\r
             cJSON *pn = cJSON_GetObjectItem(root,"pn");\r
             if(cJSON_IsString(pn))\r
@@ -869,22 +873,22 @@ static uint8_t *GetwatchSaveName(void)//获取手表本地保存的手机设备
         long fileSize = ftell(jsfile);\r
         fseek(jsfile, 0, SEEK_SET);\r
 \r
-        char *jsonData = (char *)malloc(fileSize + 1);\r
+        char *jsonData = (char *)ym_malloc(fileSize + 1);\r
         fread(jsonData, 1, fileSize, jsfile);\r
         jsonData[fileSize] = '\0';\r
         fclose(jsfile);\r
 \r
         // 解析JSON数据\r
         cJSON *root = cJSON_Parse(jsonData);\r
-        free(jsonData);\r
-\r
+        ym_free(jsonData);\r
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ym_free ym_malloc_count:%d ym_free_count:%d\r\n",ym_malloc_count,ym_free_count);\r
         if (root != NULL) {\r
             cJSON *pn = cJSON_GetObjectItem(root,"pn");\r
             if(cJSON_IsString(pn))\r
             {\r
                 uint8_t showname_len = strlen(pn->valuestring)+1;\r
                 if(showname_len-1 > 0){\r
-                    str = malloc(sizeof(char)*showname_len);\r
+                    str = ym_malloc(sizeof(char)*showname_len);\r
                     pn->valuestring[showname_len-1]='\0';\r
                     str[showname_len]=0;\r
                     memcpy(str,(uint8_t *)pn->valuestring,showname_len);\r
@@ -994,7 +998,8 @@ void sendBindInfor(uint8_t *crcnum)
                 CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)buf,devnamelen+2);\r
                 if(devname)\r
                 {   \r
-                    free(devname);\r
+                    ym_free(devname);\r
+                    devname = NULL;\r
                 }\r
             }else{\r
                 printf("phone devname is no name11111!!!!!!!!!:");\r
@@ -1060,7 +1065,8 @@ void sendBindInfor(uint8_t *crcnum)
                 CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)buf,devnamelen+2);\r
                 if(devname)\r
                 {\r
-                    free(devname);\r
+                    ym_free(devname);\r
+                    devname = NULL;\r
                 }\r
             }else{\r
                 uint8_t buf[2]; \r
@@ -1141,7 +1147,7 @@ void sendParieSuccess(uint8_t flag,bd_addr_t *addr)//发送配对成功指令to
             if(savephonename != NULL)\r
             {\r
                 cJSON_AddStringToObject(dataJSON,"pn",(char *)savephonename);\r
-                free(savephonename);\r
+                ym_free(savephonename);\r
                 savephonename = NULL;\r
             }\r
             cJSON_AddNumberToObject(dataJSON,"phoneType",phoneType);\r
@@ -1159,7 +1165,8 @@ void sendParieSuccess(uint8_t flag,bd_addr_t *addr)//发送配对成功指令to
                 }\r
                 fclose(file);\r
             }\r
-            free(jsonString);\r
+            // ym_free(jsonString);\r
+            cJSON_free(jsonString);\r
             cJSON_Delete(dataJSON);\r
             // 读取JSON文件\r
 \r
@@ -1247,7 +1254,7 @@ static uint8_t jsonCheck_time(uint8_t *buf)//json 格式解析
     cJSON* time = cJSON_GetObjectItem(root, "time");\r
     if (cJSON_IsNumber(time)) {\r
         printf("time: %d\n", time->valueint);\r
-        printf("time: %d\n", time->valueint);\r
+        // printf("time: %d\n", time->valueint);\r
     }\r
     cJSON* jsweek = cJSON_GetObjectItem(root, "week");\r
     if (cJSON_IsNumber(jsweek)) {\r
@@ -1890,12 +1897,15 @@ void SetsteptargetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *to
     \r
 }\r
 \r
-uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据\r
+uint8_t jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析 天气数据\r
 {\r
-\r
+    uint8_t flag = 0;\r
+    // flag = 2;\r
+    // memcpy(check,&flag,1);\r
+    // return 0;\r
     uint8_t *json;\r
     json = buf;\r
-    printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json));\r
+    // printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json));\r
     #if 0\r
 \r
         FILE *fp=fopen("user/weather.json","wb+");\r
@@ -1904,10 +1914,13 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
         fputs((char *)buf,fp);\r
         fclose(fp);\r
     #endif\r
+    printf("开始解析天气数据\n");\r
     cJSON* root = cJSON_Parse((const char *)json);\r
     if (root == NULL) {\r
         printf("天气 JSON解析错误\n");\r
-        return 2;\r
+        flag = 2;\r
+        memcpy(check,&flag,1);\r
+        return 0;\r
     }\r
     printf("开始解析天气 JSON\n");\r
     cJSON *now_cjson = cJSON_GetObjectItem(root, "now");\r
@@ -1920,7 +1933,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
     int iconNight = cJSON_GetObjectItem(now_cjson, "iconNight")->valueint;\r
 \r
     set_weather_now_data(humidity,windScale,textNight,uvIndex,temp,iconNight);\r
-    printf("开始解析天气 JSON!!!!\n");\r
+\r
 //     "address":\r
 // {"lat":225737664,\r
 // "atm":"1010",\r
@@ -1935,7 +1948,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
     int lat = cJSON_GetObjectItem(address_cjson, "lat")->valueint;\r
     int lon = cJSON_GetObjectItem(address_cjson, "lon")->valueint;\r
     set_weather_address_data(lat,atm,city,subLocality,lon);\r
-    printf("开始解析天气 JSON11111\n");\r
+\r
     cJSON *daily = cJSON_GetObjectItem(root, "daily");\r
     for(int i=0;i<7;i++)\r
     {   \r
@@ -1948,9 +1961,9 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
         int  tempMax=cJSON_GetObjectItem(data,"tempMax")->valueint;\r
         set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i);\r
     }\r
-    printf("开始解析天气 JSON2222222\n");\r
     cJSON_Delete(root);\r
-    printf("weather data!!!!!!!!!!end\r\n");\r
+    flag = 1;\r
+    memcpy(check,&flag,1);\r
     return 1;\r
 }\r
 \r
@@ -1968,11 +1981,11 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,
     memcpy(sendBuf+7,&tmp,4);\r
     memcpy(sendBuf+11,&tmp,4);\r
     memcpy(sendBuf+15,&tmp_data,2);\r
-    printf("GetWeatherCmd:len:%d crcnum:%s\r\n",len,crcnum);\r
+    // printf("GetWeatherCmd:len:%d crcnum:%s\r\n",len,crcnum);\r
        if(Check_CRC(crcnum,len,crcvalue))\r
        {\r
         uint8_t check = 1;\r
-        check = jsonCheck_weather(crcnum);\r
+        jsonCheck_weather(crcnum,&check);\r
         sendBuf[17] = check;\r
         sendBuf[18] = Calculate_CRC(sendBuf,18);\r
         sendBleData(sendBuf,19);\r
@@ -2175,7 +2188,7 @@ void getAPPaddressbook(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalD
 void type2AE4Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue)\r
 {\r
     uint16_t typeID = buf_cmd[1]*256+buf_cmd[2];\r
-    printf("type2AE4Data typeID:0x%x\r\n",typeID);\r
+    // printf("type2AE4Data typeID:0x%x\r\n",typeID);\r
     switch (typeID) //ID\r
     {\r
         case USER_INFOR_CMD://app下发的获取用户信息\r
@@ -2328,7 +2341,7 @@ static void GetAlarmDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *t
         }else{\r
             if(data_len != 0){\r
                 memcpy(value+17,json_format,data_len);\r
-                free(json_format);\r
+                cJSON_free(json_format);\r
             }\r
             \r
         }\r
@@ -2388,7 +2401,7 @@ static void aboutDeviceCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *to
     if(Check_CRC(crcnum,len,crcvalue))\r
     {\r
         memcpy(value+17,(uint8_t *)json_format,data_len);//17+69 = 86\r
-        free(json_format);\r
+        cJSON_free(json_format);\r
         value[data_len+17] = Calculate_CRC(value,data_len+17);//\r
         // printf("data_len:%d %x %d!!!!!\r\n",data_len,value[data_len+17],data_len+17);\r
         sendBleData(value,data_len+18);\r
@@ -2510,7 +2523,7 @@ static void GetCurDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *tot
     if(Check_CRC(crcnum,len,crcvalue))\r
     {\r
         memcpy(value+17,(uint8_t *)json_format,data_len);\r
-        free(json_format);\r
+        cJSON_free(json_format);\r
         uint8_t lrc = Calculate_CRC(value,data_len+17);\r
         printf("lrc:%d",lrc);\r
         value[data_len+18] = lrc;\r
@@ -2596,9 +2609,9 @@ static void RemoveFileCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *tot
     memcpy(value+15,&tmp_data,2);\r
     if(Check_CRC(crcnum,len,crcvalue))\r
     {\r
-        uint8_t switch_on = crcnum[0];//0 关闭 1 开启\r
+        uint8_t file_type= crcnum[0];//1 ota 2 MP3\r
 \r
-        value[17] = 1; //1 操作成功 2 操作失败\r
+        value[17] = 1; //\r
         value[18] = Calculate_CRC(value,18);\r
         sendBleData(value,19);\r
     }else\r
@@ -3811,7 +3824,8 @@ static void Send_json_Data_Cmd(uint16_t pack_size,uint8_t id)
            }\r
            pack_id++;\r
         }\r
-        free(json_format);\r
+        cJSON_free(json_format);\r
+        // ym_free(json_format);\r
 }\r
 //同步睡眠数据\r
 static void sleepDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
@@ -4199,7 +4213,7 @@ uint32_t EACH_DATA_LEN=0;//每种数据类型的的长度
 void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)\r
 {\r
     sendbigDataBufState = true;//分包同步数据不允许打断\r
-    char *buf=(char *)malloc(sizeof(char)*512);\r
+    char *buf=NULL;\r
     const char *path=NULL;\r
     uint8_t timeBit = 4;//默认是4个字节的时间戳\r
     uint8_t dataBit = 1;//默认是1个字节的数据\r
@@ -4240,7 +4254,6 @@ void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)
     {\r
         send_big_data(1,NULL,0,0,1,1,id,1);\r
         sendbigDataBufState = false;//分包同步数据不允许打断\r
-        free(buf);\r
         return;\r
     }\r
     \r
@@ -4249,10 +4262,15 @@ void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)
     {\r
         send_big_data(1,NULL,0,0,1,1,id,1);\r
         printf("打开文件失败%s\r\n",path);\r
-        free(buf);\r
+        if(path)\r
+        {\r
+            free(path);\r
+            path = NULL;\r
+        }\r
         sendbigDataBufState = false;//分包同步数据不允许打断\r
         return;\r
     }\r
+    buf = (char *)ym_malloc(sizeof(char)*512);\r
     int ret=fread(buf,1,512,fp);\r
     uint8_t count=1;\r
     while (ret==512)\r
@@ -4262,15 +4280,17 @@ void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)
         count++;\r
     }\r
     cJSON *heart_data=cJSON_Parse(buf);\r
-    free(buf);\r
+    ym_free(buf);\r
+\r
     printf("读文件\r\n");\r
     if(heart_data==NULL)\r
     {\r
         printf("解析失败\r\n");\r
+        return;\r
     }\r
     cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,data_item);\r
     int item_num=cJSON_GetArraySize(heart_data_list);\r
-    char *send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+    char *send_buf=(char *)ym_malloc(sizeof(char)*HEART_DATA_LEN);\r
     int send_len=0;\r
     uint32_t Packet_id=1;\r
     uint16_t packet_total;\r
@@ -4302,21 +4322,35 @@ void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)
             {\r
                 printf("sendbuf :%s sendbuf_len%d\r\n",send_buf,send_len);\r
                 send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,id,1);\r
-                free(send_buf);\r
+                if(send_buf)\r
+                {\r
+                    ym_free(send_buf);\r
+                    send_buf = NULL;\r
+                }\r
                 sendbigDataBufState=false;\r
 \r
             }else\r
             {\r
                 send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,id,1);\r
-                free(send_buf);\r
-                send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+                if(send_buf)\r
+                {\r
+                    ym_free(send_buf);\r
+                    send_buf = NULL;\r
+                }\r
+                \r
+                send_buf=(char *)ym_malloc(sizeof(char)*HEART_DATA_LEN);\r
                 send_len=0;\r
                 Packet_id++;\r
             }\r
         }\r
         send_buf=realloc(send_buf,i*5+10);\r
     }\r
-    cJSON_free(heart_data);\r
+    if(send_buf)\r
+    {\r
+        ym_free(send_buf);\r
+        send_buf = NULL;\r
+    }\r
+    cJSON_Delete(heart_data);\r
     \r
 }\r
 //type\r
@@ -4542,7 +4576,7 @@ void message_data(int uid,int appid,char  *title,char  *msg,int hasCode)
         fseek(jsfile, 0, SEEK_END);\r
         long fileSize = ftell(jsfile);\r
         fseek(jsfile, 0, SEEK_SET);\r
-        char *jsonData = (char *)malloc(fileSize + 1);\r
+        char *jsonData = (char *)ym_malloc(fileSize + 1);\r
         fread(jsonData, 1, fileSize, jsfile);\r
         jsonData[fileSize] = '\0';\r
         fclose(jsfile);\r
@@ -4550,7 +4584,7 @@ void message_data(int uid,int appid,char  *title,char  *msg,int hasCode)
         // printf("jsonData %s",jsonData);\r
         data_root= cJSON_Parse(jsonData);\r
         // data_root = cJSON_GetObjectItem(modifiedJson,"infor");\r
-        free(jsonData);\r
+        ym_free(jsonData);\r
 \r
     }else{\r
         data_root = cJSON_Parse("{\\r
@@ -4628,9 +4662,11 @@ void message_data(int uid,int appid,char  *title,char  *msg,int hasCode)
         fwrite(jsonString, 1, strlen(jsonString), fp);\r
         fclose(fp);\r
     }\r
-    free(jsonString);\r
+    cJSON_free(jsonString);\r
+    cJSON_Delete(data_root);\r
     read_message_data();\r
 \r
+\r
 }\r
 int uft8_check(char *chinese_string,int length)\r
 {\r
@@ -4638,7 +4674,7 @@ int uft8_check(char *chinese_string,int length)
      for (i = 0; i < length;) {\r
         // 判断是否为ASCII字符\r
         if ((unsigned char)chinese_string[i] < 0x80) {\r
-            printf("ASCII character: %d\n", (int)(unsigned char)chinese_string[i]);\r
+            // printf("ASCII character: %d\n", (int)(unsigned char)chinese_string[i]);\r
             i++;\r
         } else {\r
             // 假设这里我们只处理3字节的UTF-8字符\r
@@ -4665,7 +4701,6 @@ int uft8_check(char *chinese_string,int length)
 //安卓消息接收解析数据 //ANCS 2AE1\r
 uint8_t jscheck_ancs(uint8_t *data)\r
 {\r
-    \r
     uint8_t *json;\r
     json = data;\r
     cJSON* root = cJSON_Parse((const char *)json);\r
@@ -4680,8 +4715,8 @@ uint8_t jscheck_ancs(uint8_t *data)
     int hasCode_t = 0;\r
     char *titleBuf;\r
     char *msgBuf;\r
-    titleBuf = malloc(TITLE_BUF_LEN);\r
-    msgBuf = malloc(MSG_BUF_LEN);\r
+    titleBuf = ym_malloc(TITLE_BUF_LEN);\r
+    msgBuf = ym_malloc(MSG_BUF_LEN);\r
     if(titleBuf == NULL || msgBuf == NULL)//申请内存失败不在申请\r
     {\r
         return 2;\r
@@ -4738,11 +4773,11 @@ uint8_t jscheck_ancs(uint8_t *data)
     cJSON_Delete(root);\r
     message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t);\r
     if(titleBuf != NULL){\r
-        free(titleBuf);\r
+        ym_free(titleBuf);\r
         titleBuf = NULL;\r
     }\r
     if(msgBuf != NULL){\r
-        free(msgBuf);\r
+        ym_free(msgBuf);\r
         msgBuf = NULL;\r
     }\r
     return 1;\r
@@ -4824,9 +4859,8 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
     {\r
         return;\r
     }\r
-    \r
+    printf("bleDataRecv handle:%d\r\n",handle);\r
     ble_read_data* read_data_tmp = NULL;\r
-    printf("bleDataRecv\r\n");\r
     for(int i = 0;i<MAX_HANDLE_NUM;i++)\r
     {\r
         if(handle_l[i].handle == 0)//第一次用 \r
@@ -4839,15 +4873,15 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
             if((totalData[0]==0x4a || totalData[0]==0x73)&& totalData[1] <= 0x09){//多包第一包\r
                 if(handle_l[i].data)//保证第一包时释放buf\r
                 {\r
-                    free(handle_l[i].data);\r
+                    ym_free(handle_l[i].data);\r
+                    handle_l[i].data = NULL;\r
                     memset(&handle_l[i],0,sizeof(ble_read_data));\r
                     handle_l[i].handle = handle;\r
                 }\r
-                \r
             }\r
             if(handle_l[i].data == NULL )//释放过的\r
             {\r
-                printf("bleDataRecv!!!!!!!\r\n");\r
+                printf("bleDataRecv!!!!!!!!!!!!!recv %x %x\r\n",totalData[0],totalData[1]);\r
                 if(event_size <= 17 || !((totalData[0] ==0x4a || totalData[0] == 0x73) && totalData[1] <= 0x09))//第一包的数据一定要大于17个字节并且第一包的数据头必须为0x73 或者0x4a 并且类型小于0x09 类型根据协议可自行增加或者减少\r
                 {\r
                     break;\r
@@ -4856,20 +4890,23 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
                 handle_l[i].totalDataLen = totalDataLen;\r
                 \r
                 \r
-                printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\r
+                // printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\r
                 if(totalDataLen > event_size-17)//多包数据第一包处理,大于一包的数据长度 514-17=494\r
                 {\r
                     packdataLen = event_size-17;//多包数据第一包数据不带CRC校验和的\r
-                    handle_l[i].data = malloc(totalDataLen+1);\r
+                    \r
+                    handle_l[i].data = ym_malloc(totalDataLen+1);\r
+                    printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\r
                     memcpy(handle_l[i].data,totalData+17,packdataLen);//从第十七个字节开始接收数据data\r
                     handle_l[i].data_len = packdataLen;\r
                     memset(handle_l[i].cmd_data,0,17);\r
                     memcpy(handle_l[i].cmd_data,totalData,17);\r
                 }else{//一包数据\r
+                    printf("bleDataRecv one %d\r\n",totalDataLen);\r
                     packdataLen = event_size-18;\r
                     if(totalDataLen != 0)\r
                     {\r
-                        handle_l[i].data = malloc(totalDataLen+1);\r
+                        handle_l[i].data =ym_malloc(totalDataLen+1);\r
                         memcpy(handle_l[i].data,totalData+17,packdataLen);\r
                     }\r
                     memset(handle_l[i].cmd_data,0,17);\r
@@ -4880,25 +4917,21 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
                 }\r
             }else//多包数据存储\r
             {\r
-                printf("muilt 122222;%d handle_l[i].data_len:%d\r\n",handle_l[i].data_len,handle_l[i].data_len);\r
-                \r
+\r
                 handle_l[i].data_len = handle_l[i].data_len+event_size;\r
-                printf("muilt 133333;%d handle_l[i].data_len:%d\r\n",handle_l[i].data_len,handle_l[i].data_len);\r
+                printf("muilt 133333 handle_l[i].data_len:%d\r\n",handle_l[i].data_len);\r
                 if(handle_l[i].data_len >= handle_l[i].totalDataLen)//接收完整的数据\r
                 {\r
                     uint32_t packEndLen = handle_l[i].data_len-event_size;//这是最后一包的起始地址\r
                     handle_l[i].data_len = handle_l[i].data_len-1;//减去最后一个字节的CRC校验和 才算是总的数据长度\r
                     \r
                     memcpy(handle_l[i].data+packEndLen,totalData,handle_l[i].data_len);//为了不把CRC copy到data所以多一步操作\r
-                    \r
-                    printf("muilt END2;!!!!!\r\n");\r
                     handle_l[i].crcvalue = totalData[event_size-1];//最后一个字节为总的数据包的CRC\r
                     read_data_tmp = &handle_l[i];\r
                     \r
                 }else{\r
                     memcpy(handle_l[i].data+handle_l[i].data_len,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy\r
                 }\r
-                \r
             }\r
             break;\r
         } \r
@@ -4906,20 +4939,24 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
     }\r
     if(read_data_tmp)//获取到完整数据,处理数据且释放内存\r
     {\r
-        printf("pack data end!!!!!!\r\n");\r
+        printf("pack data start!!!!!\r\n");\r
         //处理数据..\r
         if(read_data_tmp->data)\r
         {\r
             read_data_tmp->data[read_data_tmp->totalDataLen]=0;\r
         }\r
         bleLongRecvData(read_data_tmp->data,read_data_tmp->totalDataLen,read_data_tmp->cmd_data,NULL,read_data_tmp->crcvalue);\r
-        free(read_data_tmp->data);\r
+        if(read_data_tmp->data)//只有数据不为NULL的才释放\r
+        {\r
+            ym_free(read_data_tmp->data);\r
+        }\r
         read_data_tmp->data_len = 0;\r
         read_data_tmp->data = NULL;\r
         read_data_tmp->totalDataLen = 0;\r
         //read_data_tmp->handle = 0;\r
         read_data_tmp->crcvalue = 0;\r
         memset(read_data_tmp->cmd_data,0,17);\r
+        printf("pack data end!!!!!!\r\n");\r
     }\r
     \r
 \r
@@ -4938,7 +4975,6 @@ void free_ble_data(void)//以防断开蓝牙没有释放数据类型
 //接收app下发的原始数据 \r
 void revBleOldData(uint8_t *buf, uint16_t event_size,uint16_t handle)//每包的数据大小\r
 {\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxxxxx");\r
     printf("handle :%d data2ae3Cmd:%d data2ae4Cmd:%d  event_size %d\r\n",handle,data2ae3Cmd,data2ae4Cmd,event_size);\r
     bleDataRecv(buf,event_size,handle);\r
 }\r
index 23c0938..900f001 100644 (file)
@@ -33,6 +33,7 @@ ble_recv_msg_callback_t ble_recv_get_send_msg_callback_func(void);
 //msg_datalen 数据内容长度 
 //返回值 解析数据成功返回 1 解析失败返回 0 
 // 
+void malloc_test(void);
 int ble_recv_msg_callback(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_data, uint16_t msg_datalen);
 void cameram_send_data(void);
 /*********************TYPE+ID***********************************
index bbe557f..56641db 100644 (file)
@@ -37,6 +37,9 @@ extern "C" {
 #include "ppgBleService.h"\r
 #include "build_version.h"\r
 #include "custom_runtime.h"\r
+#include "custom_utils.h"\r
+\r
+\r
 \r
 // extern void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid);\r
 // extern void bts_init_128bit_uuid(const bt_uuid_t *uuid);\r
@@ -106,8 +109,8 @@ uint16_t data2ae3Cmd = 0;//2ae3短指令特征值
 uint16_t data2ae4Cmd = 0;\r
 uint16_t data2ae5Cmd = 0;\r
 uint16_t data2ae1Cmd = 0;//安卓消息来电\r
+uint16_t data2ae0Cmd = 0;//OTA\r
 \r
-#if 1//def SUPPORT_BLE_SERVICE\r
 static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
 {\r
     memcpy(&phone_addr,addr,sizeof(bd_addr_t));\r
@@ -167,7 +170,7 @@ static void svr_ble_adv_data_set(int adv_id)
     char watchName[32];\r
     memset_s(watchName, sizeof(watchName), 0, sizeof(watchName));\r
 \r
-    (void)sprintf_s(watchName, sizeof(watchName), "%s %02x%02x",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
+    (void)sprintf_s(watchName, sizeof(watchName), "%s %02X%02X",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
     // (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME);\r
 \r
     ret = bluetooth_set_local_name((unsigned char*)watchName, strlen((char*)watchName) + 1);\r
@@ -876,11 +879,14 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data4))\r
     {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae0 result->value_handle4  %d\r\n",result->value_handle);\r
-        // shortCmdChara = result->value_handle;\r
+        if(data2ae0Cmd == 0)\r
+        {\r
+            data2ae0Cmd = result->value_handle;\r
+        }\r
     }\r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data5))\r
     {\r
-        if(data2ae3Cmd == 0)\r
+        if(data2ae1Cmd == 0)\r
         {\r
             data2ae1Cmd = result->value_handle;\r
         }\r
@@ -1011,34 +1017,27 @@ static void svr_ble_bt_gatts_req_read_cb(uint8_t server_id, uint16_t conn_id, ga
 \r
 \r
 static uint8_t falg = 0;\r
+\r
 static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, gatts_req_write_cb_t *write_cb_para,\r
     errcode_t status)\r
 { \r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_server_handle %d conn_id :%d write_cb_para->length:%d write_cb_para->handle %d write_cb_para->request_id:%d",g_ble_server_handle,conn_id,write_cb_para->length,\r
     write_cb_para->handle,write_cb_para->request_id);\r
     // printf("alipay_handle%d",alipay_handle);\r
-    for(uint16_t i = 0;i<write_cb_para->length;i++)\r
+    #if 0\r
+    char *hex_str_tmp = malloc(10*1024);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%x\r\n",hex_str_tmp);\r
+    uint16_t i=0;\r
+    for( i = 0;i<write_cb_para->length;i++)\r
     {   \r
-        printf("%x ",write_cb_para->value[i]);\r
-       \r
-    }\r
-    //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"handle :%d %d %d".write_cb_para->handle,get_factory_ate_write_handl(),get_factory_ota_write_handl());\r
-    if (write_cb_para->handle == get_factory_ate_write_handl()) \r
-    {\r
-        factory_recv_cmd_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
-    }\r
-    else if (write_cb_para->handle == get_factory_ota_write_handl())\r
-    {\r
-        factory_recv_ota_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
-    }else if(write_cb_para->handle == alipay_handle)\r
-    {\r
-        printf("alipay wirte!!!!!");\r
-        // svr_alipay_bt_gatts_noyify(buf,5);\r
-        errcode_t ret = svr_alipay_msg_write(ALIPAY_MSG_BT, write_cb_para->value, write_cb_para->length, false);\r
-\r
-    }else{\r
-        revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
+        //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"%x ",write_cb_para->value[i]);\r
+        sprintf(hex_str_tmp+i*3,"%02X ",write_cb_para->value[i]);\r
     }\r
+    hex_str_tmp[i*3] = 0;\r
+    // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%s\r\n",hex_str_tmp);\r
+    free(hex_str_tmp);\r
+    #endif\r
+    blesrv_service_recv_msg_handler(write_cb_para->handle,write_cb_para->value,write_cb_para->length);\r
 }\r
 static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t mtu_size, errcode_t status)\r
 {\r
@@ -1284,7 +1283,131 @@ void ble_avd_mode_change(uint8_t mode)
             break;\r
     }\r
 }\r
-#endif\r
+/**=================protocol recv decode service (task)=============================================================================================*/\r
+typedef struct\r
+{\r
+    uint16_t service_handle;\r
+    uint32_t msg_len;\r
+    uint8_t *msg_data;\r
+} blesrv_custom_cmd_t;\r
+\r
+#define MAX_BUF_LEN  (2+4+4) //sizeof(blesrv_custom_cmd_t) /*MTU max 514 , sizeof(blesrv_custom_cmd_t)*/\r
+static unsigned long g_blesrv_queue = 0xFFFFFFFF;\r
+static uint8_t g_blesrv_queue_created = 0;\r
+void blesrv_service_recv_msg_handler(uint16_t srv_handle, uint8_t * msg_data, uint32_t msg_len)\r
+{\r
+    int ret;\r
+    \r
+    if( g_blesrv_queue_created == 0) return ;\r
+     if (msg_data == NULL) return ;\r
+\r
+    blesrv_custom_cmd_t mail={0};\r
+    uint32_t sendlen = MAX_BUF_LEN;\r
+\r
+    \r
+    mail.service_handle = srv_handle;\r
+    mail.msg_len = msg_len;\r
+    mail.msg_data = (uint8_t*)malloc(msg_len);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:mail.msg_data %x\r\n",mail.msg_data);\r
+    if(mail.msg_data==NULL)\r
+    {\r
+        return ;\r
+    }\r
+    memcpy_s(mail.msg_data,msg_len,msg_data,msg_len);\r
+\r
+    ret = osal_msg_queue_write_copy(g_blesrv_queue, (void *)&mail, MAX_BUF_LEN , 0);\r
+    if (ret != OSAL_SUCCESS)\r
+    {\r
+        PRINT("Error blesrv Check send failed! err=0x%x! \r\n", ret);\r
+    }\r
+    \r
+}\r
+\r
+static void blesrv_service_check_task(void const *arg)\r
+{\r
+    unused(arg);\r
+    int32_t ret;\r
+    blesrv_custom_cmd_t mail={0};\r
+    uint32_t msgsize = MAX_BUF_LEN;\r
+\r
+    while (1)\r
+    {\r
+        ret = osal_msg_queue_read_copy(g_blesrv_queue, (void *)&mail, &msgsize,\r
+                                       OSAL_MSGQ_WAIT_FOREVER);\r
+        if (ret != OSAL_SUCCESS)\r
+        {\r
+            continue;\r
+        }\r
+        \r
+        uint8_t *p_msgbuf = mail.msg_data;\r
+        uint16_t server_handle = mail.service_handle;\r
+        uint32_t msg_len = mail.msg_len;\r
+\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:%d %d %x %x %x\r\n",msg_len,server_handle,p_msgbuf[0],p_msgbuf[1],p_msgbuf[2]);\r
+        #if 0\r
+        if (server_handle == get_factory_ate_write_handl()) \r
+        {\r
+            factory_recv_cmd_data(p_msgbuf,msg_len,server_handle);\r
+        }\r
+        else if (server_handle == get_factory_ota_write_handl())\r
+        {\r
+            factory_recv_ota_data(p_msgbuf,msg_len,server_handle);\r
+        }else if(server_handle == alipay_handle)\r
+        {\r
+            printf("alipay wirte!!!!!");\r
+            // svr_alipay_bt_gatts_noyify(buf,5);\r
+            errcode_t ret = svr_alipay_msg_write(ALIPAY_MSG_BT, p_msgbuf, msg_len, false);\r
+\r
+        }else{\r
+            revBleOldData(p_msgbuf,msg_len,server_handle);\r
+        }\r
+        #endif\r
+\r
+        // free(mail.msg_data);\r
+        // mail.msg_data = NULL;\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:end\r\n");\r
+    }\r
+}\r
+#define BLESRV_APP_BOARD_MSG_COUNT 50\r
+#define BLESRV_APP_BOARD_TASK_SIZE 0x2000\r
+#define BLESRV_BOARD_TASK_PRIO 7\r
+void create_blesrv_queue(void)\r
+{\r
+    if (osal_msg_queue_create("blesrv_service_queue", BLESRV_APP_BOARD_MSG_COUNT, &g_blesrv_queue,\r
+                              0, MAX_BUF_LEN) != ERRCODE_SUCC)\r
+    {\r
+        printf("[blesrv][service] app create mail fail\n");\r
+        g_blesrv_queue_created = 0;\r
+    }else{\r
+        g_blesrv_queue_created = 1;\r
+    }\r
+\r
+}\r
+errcode_t uapi_blesrv_service_init(void)\r
+{\r
+\r
+    PRINT("uapi_blesrv_service_init !\r\n");\r
+    app_task_definition_t taskcfg = {0};\r
+    taskcfg.create_queue_handle = create_blesrv_queue;\r
+    taskcfg.attr.name = "blesrv_recv_service";\r
+    taskcfg.attr.priority = osPriorityNormal;\r
+    taskcfg.attr.stack_size = BLESRV_APP_BOARD_TASK_SIZE;\r
+    taskcfg.func = blesrv_service_check_task;\r
+    taskcfg.use_mem = USE_DTCM_MEM;\r
+\r
+    errcode_t ret = uapi_create_osThread_custom(&taskcfg);\r
+    if (ret != ERRCODE_SUCC)\r
+    {\r
+        PRINT("create blesrv_service failed %d!\r\n", ret);\r
+        return ERRCODE_FAIL;\r
+    }\r
+\r
+    return ERRCODE_SUCC;\r
+}\r
+\r
+\r
+\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif
\ No newline at end of file
index 5dd5eaa..5ffdb72 100644 (file)
@@ -37,6 +37,9 @@ errcode_t svr_ble_bt_gatts_noyify(uint8_t *data, uint16_t data_len);
 void svr_ble_adv_start(void);
 void svr_ble_adv_stop(void);
 void ble_avd_mode_change(uint8_t mode);
+//
+void blesrv_service_recv_msg_handler(uint16_t srv_handle, uint8_t * msg_data, uint32_t msg_len);
+errcode_t uapi_blesrv_service_init(void);
 #ifdef __cplusplus
 }
 #endif