添加表盘市场下载能力 183/1 183/head 185/target/1
authorSnickerSun <snickersun@163.com>
Mon, 27 May 2024 02:08:46 +0000 (10:08 +0800)
committerSnickerSun <snickersun@163.com>
Mon, 27 May 2024 02:08:46 +0000 (10:08 +0800)
code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h
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/drivers/peripheral/utils/custom_runtime.h

index 37c61ca..a4ad413 100644 (file)
@@ -244,7 +244,7 @@ namespace OHOS
             {ConfigDataType::DATATYPE_INT,     "GoalCalories",             "300"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_CALORIES,    //运动目标卡路里  300(kcal)
             {ConfigDataType::DATATYPE_INT,     "GoalStandupTimes",         "10"    },// CONFIGMODEL_ITEM_SPORTS_GOAL_STANDUP_TIMES,    //运动目标站立次数 10
             {ConfigDataType::DATATYPE_INT,     "GoalDuration",             "30"    },// CONFIGMODEL_ITEM_SPORTS_GOAL_DURATION,    //运动目标时长   30(分钟)
-            {ConfigDataType::DATATYPE_DOUBLE,  "GoalDistance",             "8.0"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE,    //运动目标距离   8.0(km)
+            {ConfigDataType::DATATYPE_INT,     "GoalDistance",             "8"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE,    //运动目标距离   8.0(km)
             {ConfigDataType::DATATYPE_BOOL,    "Dnotdisturb",              "false" },// CONFIGMODEL_ITEM_DNOTDISTURB //勿扰模式默认关闭
             {ConfigDataType::DATATYPE_INT,     "SystemVolume",             "100"  },// CONFIGMODEL_ITEM_SYSTEM_VOLUME //
             {ConfigDataType::DATATYPE_INT,     "CallVolume",               "100"  },// CONFIGMODEL_ITEM_CALL_VOLUME //
index 8476ac9..a3b376c 100644 (file)
@@ -120,7 +120,7 @@ void ble_set_drink_remind(msg_drink_info_t data)
     if(data.drink_on)
     {
         printf("目标:%d\r\n",data.goal);
-        p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIFMOFEL_ITEM_DRINK_GOAL,(double)data.goal);
+        p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIFMOFEL_ITEM_DRINK_GOAL,data.goal);
         printf("开始时间:%d\r\n",data.time_start);
         p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIFMOFEL_ITEM_DRINK_START,data.time_start);
         if(data.drink_on==2)
index b8ac042..261157b 100644 (file)
@@ -94,7 +94,33 @@ static const char* getHandlname(uint16_t handle)
     return "unknown handle";\r
 \r
 }\r
+static errcode_t get_file_recv_file_path(char* input_filename ,uint32_t input_size, char* output_file_path , uint32_t max_output_size)\r
+{\r
+    if(input_filename == NULL || output_file_path == NULL)\r
+    {\r
+        return ERRCODE_FAIL;\r
+    }\r
+\r
+    int ret = sprintf_s(output_file_path,max_output_size,"/user/userdata/%s",input_filename);\r
+    if (ret < 0)\r
+        return ERRCODE_FAIL;\r
+\r
+    return ERRCODE_SUCC;\r
+} \r
+\r
+static errcode_t get_dial_file_path(char* input_dialname ,uint32_t input_size, char* output_file_path , uint32_t max_output_size)\r
+{\r
+    if(input_dialname == NULL || output_file_path == NULL)\r
+    {\r
+        return ERRCODE_FAIL;\r
+    }\r
 \r
+    int ret = sprintf_s(output_file_path,max_output_size,"/user/dial/%s.bin",input_dialname);\r
+    if (ret < 0)\r
+        return ERRCODE_FAIL;\r
+\r
+    return ERRCODE_SUCC;\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
@@ -1936,16 +1962,39 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,ui
     \r
 }\r
 \r
+\r
+void query_dial_installed(ble_read_data *buffer_handle,uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+{\r
+\r
+    uint8_t reply[2]={0};\r
+    if (len != 2)\r
+    {\r
+         ble_reply_cmdarr(cmd,reply,2);//crc error\r
+    }\r
+    if(Check_CRC(data,len,crcvalue))\r
+    {\r
+        uint16_t dial_uid  = *(uint16_t*)data;\r
+        printf("query dial 0x%04X installed !!!!!!!!\r\n",dial_uid);\r
+        reply[0]=2; //该表盘是否已安装 0:指令校验失败 1:已安装 2:未安装\r
+        reply[1]=0; //表盘列表是否已满 0:未满 1:已满\r
+        ble_reply_cmdarr(cmd,reply,2);\r
+        \r
+    }else{\r
+        ble_reply_cmdarr(cmd,reply,2);//crc error\r
+    }\r
+\r
+}\r
+\r
 void getUserInfo(ble_read_data *buffer_handle,uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
 {\r
     \r
 \r
     printf("getUserInfo ");\r
-    for(uint8_t i = 0;i<len;i++)\r
-    {\r
-        printf("%x ",data[i]);\r
-    }\r
-    printf("\n");\r
+    // for(uint8_t i = 0;i<len;i++)\r
+    // {\r
+    //     printf("%x ",data[i]);\r
+    // }\r
+    // printf("\n");\r
     if(Check_CRC(data,len,crcvalue))\r
     {\r
         ble_reply_cmd(USER_INFOR_CMD,1);\r
@@ -2126,7 +2175,7 @@ void getAPPaddressbook(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalDat
 void type2AE4Data(ble_read_data *buffer_handle,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%04X\r\n",typeID);\r
     switch (typeID) //ID\r
     {\r
         case USER_INFOR_CMD://app下发的获取用户信息\r
@@ -2157,6 +2206,9 @@ void type2AE4Data(ble_read_data *buffer_handle,uint8_t *buf_cmd,uint8_t *data,ui
         case SET_OTHER_TARGET_CMD:\r
             GetOtherTarget(typeID,data,datalen,totalData,crcvalue);\r
             break;\r
+        case QUERY_DIAL_INSTALLED_PARAM_CMD:\r
+            query_dial_installed(buffer_handle,typeID,data,datalen,totalData,crcvalue);\r
+            break;\r
         case DELETE_FILE_CMD:\r
             break;\r
         case SYN_BASIC_REAL_HEATR_CMD:\r
@@ -4748,7 +4800,7 @@ void ancsDataShowCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,
 void type2AE1Data(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("type2AE1Data typeID:0x%x\r\n",typeID);\r
+    printf("type2AE1Data typeID:0x%4X\r\n",typeID);\r
     switch (typeID) //ID\r
     {\r
         case ANDROID_ANCS_CMD://\r
@@ -4866,7 +4918,6 @@ errcode_t decode_ota_json(ble_read_data *buffer_handle)
         */\r
 \r
     cJSON* root = cJSON_Parse((const char *)data);\r
-    \r
     if(root != NULL)\r
     {         \r
         cJSON* ota_type_json = cJSON_GetObjectItem(root, "type");\r
@@ -4877,9 +4928,19 @@ errcode_t decode_ota_json(ble_read_data *buffer_handle)
 \r
         cJSON* ota_name_json = cJSON_GetObjectItem(root, "name");\r
         if ( ota_name_json != NULL && cJSON_IsString(ota_name_json)) {\r
-            buffer_handle->file_recv_stat.file_name = ota_name_json->valuestring;\r
+            uint32_t filenamelen=strlen(ota_name_json->valuestring);\r
+            if (filenamelen > 0 && filenamelen < 255)\r
+            {\r
+                buffer_handle->file_recv_stat.file_name = malloc(filenamelen);\r
+                if (buffer_handle->file_recv_stat.file_name!=NULL)\r
+                    memcpy_s(buffer_handle->file_recv_stat.file_name,filenamelen,ota_name_json->valuestring,filenamelen);\r
+                //下载完成再在 cancel download 里 free filename\r
+            }else{\r
+                buffer_handle->file_recv_stat.file_name = NULL;\r
+            }\r
+        }else{\r
+            buffer_handle->file_recv_stat.file_name = NULL;\r
         }\r
-\r
         cJSON* ota_size_json = cJSON_GetObjectItem(root, "size");\r
         if(ota_size_json != NULL && cJSON_IsNumber(ota_size_json))\r
         {\r
@@ -4926,20 +4987,268 @@ errcode_t decode_ota_json(ble_read_data *buffer_handle)
     }\r
 }\r
 \r
+\r
+errcode_t decode_mp3_json(ble_read_data *buffer_handle)\r
+{\r
+    uint8_t *data = buffer_handle->data+sizeof(msg_header_t);\r
+    uint16_t datalen = buffer_handle->totalDataLen;\r
+    printf("ota_json_file_save %s\n",data);\r
+\r
+    /**\r
+        MP3文件信息格式\r
+        {\r
+        "type":2, \r
+        "name":"夜曲.mp3",\r
+        "size":3894464\r
+        }\r
+        */\r
+\r
+    cJSON* root = cJSON_Parse((const char *)data);\r
+    \r
+    if(root != NULL)\r
+    {         \r
+        cJSON* ota_type_json = cJSON_GetObjectItem(root, "type");\r
+        if(ota_type_json != NULL && cJSON_IsNumber(ota_type_json))\r
+        {\r
+            buffer_handle->file_recv_stat.file_type = ota_type_json->valueint;\r
+        }\r
+\r
+        cJSON* ota_name_json = cJSON_GetObjectItem(root, "name");\r
+        if ( ota_name_json != NULL && cJSON_IsString(ota_name_json)) {\r
+            uint32_t filenamelen=strlen(ota_name_json->valuestring);\r
+            if (filenamelen > 0 && filenamelen < 255)\r
+            {\r
+                buffer_handle->file_recv_stat.file_name = malloc(filenamelen);\r
+                if (buffer_handle->file_recv_stat.file_name!=NULL)\r
+                    memcpy_s(buffer_handle->file_recv_stat.file_name,filenamelen,ota_name_json->valuestring,filenamelen);\r
+                //下载完成再在 cancel download 里 free filename\r
+            }else{\r
+                buffer_handle->file_recv_stat.file_name = NULL;\r
+            }\r
+        }\r
+\r
+        cJSON* ota_size_json = cJSON_GetObjectItem(root, "size");\r
+        if(ota_size_json != NULL && cJSON_IsNumber(ota_size_json))\r
+        {\r
+            buffer_handle->file_recv_stat.file_size = ota_size_json->valueint;\r
+        }\r
+        cJSON_Delete(root);\r
+\r
+        printf("  ota_type= %d, ota_name=%s, ota_size=%d \n",\r
+            buffer_handle->file_recv_stat.file_type,\r
+            buffer_handle->file_recv_stat.file_name,\r
+            buffer_handle->file_recv_stat.file_size\r
+        );\r
+        buffer_handle->file_recv_stat.received_size = 0;\r
+        buffer_handle->file_recv_stat.lrcvalue = 0;\r
+        buffer_handle->receive_file_flag = 1;\r
+        return ERRCODE_SUCC;\r
+    }else{\r
+        buffer_handle->receive_file_flag = 0;        \r
+        return ERRCODE_FAIL;\r
+    }\r
+}\r
+\r
+errcode_t decode_dial_info(ble_read_data *buffer_handle)\r
+{\r
+\r
+    printf("decode_dial_info \n");\r
+    for(uint8_t i = 0;i<buffer_handle->data_len;i++)\r
+    {\r
+        printf("%x ",buffer_handle->data[i]);\r
+    }\r
+    printf("\n");\r
+    if (buffer_handle->data_len == 6)\r
+    {\r
+\r
+        return ERRCODE_SUCC;\r
+    }\r
+    uint8_t *data = buffer_handle->data+sizeof(msg_header_t);\r
+    uint16_t datalen = buffer_handle->totalDataLen;\r
+\r
+    msg_recv_dial_info_t dialinfo={0};\r
+    msg_recv_dial_info_t *pdialinfo=(msg_recv_dial_info_t*)data;\r
+\r
+    // dialinfo.dial_count = pdialinfo->dial_count;\r
+    dialinfo.dial_uid = pdialinfo->dial_uid;\r
+    dialinfo.file_name_len = pdialinfo->file_name_len;\r
+    // dialinfo.file_type = pdialinfo->file_type;\r
+\r
+    if (dialinfo.file_name_len < 0 || dialinfo.file_name_len >255)\r
+    {\r
+        printf("file name len should in [0,255] \n");\r
+        return ERRCODE_FAIL;\r
+    }\r
+    char * filename = malloc(dialinfo.file_name_len);\r
+    uint8_t file_count = data[sizeof(msg_recv_dial_info_t)+dialinfo.file_name_len];\r
+    if (filename == NULL)\r
+    {\r
+        printf("file name malloc failed  filename_len %d\n",dialinfo.file_name_len);\r
+        return ERRCODE_FAIL;\r
+    }\r
+    memcpy_s(filename,dialinfo.file_name_len,data+sizeof(msg_recv_dial_info_t),dialinfo.file_name_len);\r
+    buffer_handle->file_recv_stat.file_name = filename;\r
+    \r
+    printf(" dial name = %s, dial file count = %d \n",\r
+        filename,\r
+        file_count\r
+    );\r
+    buffer_handle->file_recv_stat.received_size = 0;\r
+    buffer_handle->file_recv_stat.lrcvalue = 0;\r
+    buffer_handle->receive_file_flag = 0;\r
+\r
+    free(filename);\r
+    return ERRCODE_SUCC;\r
+\r
+}\r
+\r
+errcode_t decode_single_dial_info(ble_read_data *buffer_handle)\r
+{\r
+\r
+    printf("decode_single_dial_info \n");\r
+    for(uint8_t i = 0;i<buffer_handle->data_len;i++)\r
+    {\r
+        printf("%x ",buffer_handle->data[i]);\r
+    }\r
+    printf("\n");\r
+    if (buffer_handle->data_len == 6)\r
+    {\r
+\r
+        return ERRCODE_SUCC;\r
+    }\r
+    uint8_t *data = buffer_handle->data+sizeof(msg_header_t);\r
+    uint16_t datalen = buffer_handle->totalDataLen;\r
+\r
+    msg_recv_single_dial_info_t dialinfo={0};\r
+    msg_recv_single_dial_info_t *pdialinfo=(msg_recv_single_dial_info_t*)data;\r
+\r
+    dialinfo.dial_count = pdialinfo->dial_count;\r
+    dialinfo.dial_uid = pdialinfo->dial_uid;\r
+    dialinfo.file_name_len = pdialinfo->file_name_len;\r
+    dialinfo.file_type = pdialinfo->file_type;\r
+\r
+    if (dialinfo.file_name_len < 6 || dialinfo.file_name_len >255)\r
+    {\r
+        printf("file name len should in [6,255] \n");\r
+        return ERRCODE_FAIL;\r
+    }\r
+\r
+    \r
+\r
+    char * filename = malloc(dialinfo.file_name_len+1);\r
+    //下载完成再在 cancel download 里 free filename\r
+\r
+    uint32_t file_size = 0;\r
+    memcpy_s((void*)&file_size,sizeof(uint32_t),(void*)&data[sizeof(msg_recv_single_dial_info_t)+dialinfo.file_name_len],sizeof(uint32_t));\r
+    if (filename == NULL)\r
+    {\r
+        printf("file name malloc failed  filename_len %d\n",dialinfo.file_name_len);\r
+        return ERRCODE_FAIL;\r
+    }\r
+    memcpy_s(filename,dialinfo.file_name_len,data+sizeof(msg_recv_single_dial_info_t),dialinfo.file_name_len);\r
+    filename[dialinfo.file_name_len] ='\0';\r
+    //在runtime中备份一个安装文件名。\r
+    memset_s(get_device_runtime_status()->current_dial_name,sizeof(get_device_runtime_status()->current_dial_name),0,sizeof(get_device_runtime_status()->current_dial_name));\r
+    memcpy_s(get_device_runtime_status()->current_dial_name,sizeof(get_device_runtime_status()->current_dial_name),filename,dialinfo.file_name_len);\r
+\r
+    buffer_handle->file_recv_stat.file_name = filename;\r
+    buffer_handle->file_recv_stat.file_size = file_size;\r
+    buffer_handle->file_recv_stat.file_type = 3;//表盘\r
+    printf("  filetype = %d, file_name=%s, file_size=%d , dial_uid %04X ,dial_count %d, dial_filetype %d\n",\r
+        buffer_handle->file_recv_stat.file_type,\r
+        buffer_handle->file_recv_stat.file_name,\r
+        buffer_handle->file_recv_stat.file_size,\r
+        dialinfo.dial_uid,\r
+        dialinfo.dial_count,\r
+        dialinfo.file_type\r
+\r
+    );\r
+    buffer_handle->file_recv_stat.received_size = 0;\r
+    buffer_handle->file_recv_stat.lrcvalue = 0;\r
+    buffer_handle->receive_file_flag = 1;\r
+\r
+    return ERRCODE_SUCC;\r
+\r
+}\r
+static errcode_t install_dial(void)\r
+{\r
+    printf("install %s\n",get_device_runtime_status()->current_dial_name);\r
+    char *lzmapkgname =(char*)(get_device_runtime_status()->current_dial_name);\r
+    char *lzmaindex = strstr(lzmapkgname,".lzma");\r
+    if (lzmaindex != NULL)\r
+    {\r
+        char dial_basename[64]={0};\r
+        int dial_basenamelen =  (lzmaindex - lzmapkgname);\r
+        printf("dial_basenamelen %d\n",dial_basenamelen);\r
+        if (dial_basenamelen>0 )\r
+        {\r
+            memcpy_s(dial_basename,sizeof(dial_basename),get_device_runtime_status()->current_dial_name,dial_basenamelen);\r
+        }\r
+        else{\r
+            return ERRCODE_FAIL;\r
+        }\r
+        printf("dial_basename %s\n",dial_basename);\r
+        char dialbin_filepath[128]={0};\r
+        if (get_dial_file_path(dial_basename,strlen(dial_basename),dialbin_filepath,sizeof(dialbin_filepath)) != ERRCODE_SUCC)\r
+        {\r
+            return ERRCODE_FAIL;\r
+        }\r
+        printf("dialbin_filepath %s\n",dialbin_filepath);\r
+        char lzma_filepath[128]={0};\r
+        if (get_file_recv_file_path(lzmapkgname,strlen(lzmapkgname),lzma_filepath,sizeof(lzma_filepath)) != ERRCODE_SUCC)\r
+        {\r
+            return ERRCODE_FAIL;\r
+        }\r
+        printf("lzma_filepath %s\n",lzma_filepath);\r
+        errcode_t ret = uapi_dial_pkg_decompress(lzma_filepath,dialbin_filepath);\r
+        printf("decode %s to %s , ret %X \n",lzma_filepath,dialbin_filepath, ret);\r
+        if ( ret == ERRCODE_SUCC)\r
+            return ERRCODE_SUCC;\r
+        else\r
+            return ERRCODE_FAIL;\r
+    }else{\r
+        printf(".lzma not found\n");\r
+        return ERRCODE_FAIL;\r
+    }\r
+\r
+}\r
 void decode_file_checksum(ble_read_data *buffer_handle)\r
 {\r
 \r
     uint8_t msg_crc = get_crc_from_lrc(buffer_handle->lrcvalue);\r
-    if (msg_crc == buffer_handle->crcvalue)\r
+    if ((msg_crc == buffer_handle->crcvalue) \r
+    || (buffer_handle->cmd_header.direction == MSG_DIRECTION_RECV_ANDROID ))\r
     {\r
         uint8_t file_crc = get_crc_from_lrc(buffer_handle->file_recv_stat.lrcvalue);\r
         uint8_t crc_recv = buffer_handle->data[sizeof(msg_header_t)];\r
-        if (file_crc == crc_recv)\r
+#if 0\r
+        if ((file_crc == crc_recv) ||\r
+            (buffer_handle->cmd_header.direction == MSG_DIRECTION_RECV_ANDROID))\r
+#else\r
+        if (file_crc == crc_recv) \r
+#endif\r
         {\r
             ble_reply_cmd(FILE_CHECKSUM_RECV_CMD,1);\r
-             do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_STARTOTA,NULL,0);\r
+            switch(buffer_handle->file_recv_stat.file_type)\r
+            {\r
+                case 1: //ota\r
+                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_STARTOTA,NULL,0);\r
+                    break;\r
+                case 2://mp3\r
+\r
+                    break;\r
+                case 3://dial\r
+                    //TODO: 设置成当前下载的表盘\r
+                    if (install_dial() == ERRCODE_SUCC)\r
+                        ble_reply_cmd(DIAL_INSTALL_REPY_CMD,1);\r
+                    else\r
+                        ble_reply_cmd(DIAL_INSTALL_REPY_CMD,0);\r
+                    break;\r
+                default:\r
+                    break;\r
+            }\r
         }else{\r
-            ble_reply_cmd(FILE_CHECKSUM_RECV_CMD,2);\r
+            ble_reply_cmd(FILE_CHECKSUM_RECV_CMD,2);           \r
         }\r
     }else{\r
         ble_reply_cmd(FILE_CHECKSUM_RECV_CMD,0);\r
@@ -4950,9 +5259,11 @@ void decode_file_checksum(ble_read_data *buffer_handle)
 void type2AE0Data(ble_read_data *buffer_handle)\r
 {\r
     uint16_t typeID = buffer_handle->cmd_header.cmdtype*256 + buffer_handle->cmd_header.cmdid;\r
-    printf("type2AE0Data typeID:0x%x datalen %d\r\n",typeID,buffer_handle->totalDataLen);\r
+    printf("type2AE0Data typeID:0x%04X datalen %d\r\n",typeID,buffer_handle->totalDataLen);\r
     bool checkcrc = (get_crc_from_lrc(buffer_handle->lrcvalue) == buffer_handle->crcvalue);\r
-    if( checkcrc == true )\r
+    \r
+    if ( (checkcrc == true ) || \r
+    (buffer_handle->cmd_header.direction == MSG_DIRECTION_RECV_ANDROID))\r
     {\r
         switch (typeID) //ID\r
         {\r
@@ -4967,16 +5278,37 @@ void type2AE0Data(ble_read_data *buffer_handle)
                 }\r
                 break;\r
             case MP3_FILE_RECV_CMD:\r
-\r
+                {\r
+                    if (decode_mp3_json( buffer_handle) == ERRCODE_SUCC)\r
+                    {\r
+                        ble_reply_cmd(MP3_FILE_RECV_CMD,1);\r
+                    }else{\r
+                        ble_reply_cmd(MP3_FILE_RECV_CMD,2);\r
+                    }               \r
+                }\r
                 break;\r
             case DIAL_FILE_RECV_CMD:\r
+                {\r
+                    if (decode_dial_info( buffer_handle) == ERRCODE_SUCC)\r
+                    {\r
+                        ble_reply_cmd(DIAL_FILE_RECV_CMD,1);\r
+                    }else{\r
+                        ble_reply_cmd(DIAL_FILE_RECV_CMD,2);\r
+                    }               \r
+                }\r
                 break;\r
             case FILE_CHECKSUM_RECV_CMD:\r
                 decode_file_checksum(buffer_handle);\r
                 break;\r
-            case EPO_DATA_RECV_CMD:\r
-                break;\r
             case SINGLE_DIAL_FILE_RECV_CMD:\r
+                if (decode_single_dial_info( buffer_handle) == ERRCODE_SUCC)\r
+                {\r
+                    ble_reply_cmd(SINGLE_DIAL_FILE_RECV_CMD,1);\r
+                }else{\r
+                    ble_reply_cmd(SINGLE_DIAL_FILE_RECV_CMD,2);\r
+                }         \r
+                break;\r
+            case EPO_DATA_RECV_CMD:\r
                 break;\r
             default:\r
                 break;            \r
@@ -5032,11 +5364,19 @@ errcode_t cancel_recv_file(ble_read_data *buffer_handle)
             fclose(buffer_handle->file_recv_stat.file);\r
             buffer_handle->file_recv_stat.file = NULL;\r
         }\r
+        if (buffer_handle->file_recv_stat.file_name != NULL)\r
+        {\r
+            free(buffer_handle->file_recv_stat.file_name);\r
+            buffer_handle->file_recv_stat.file_name=NULL;\r
+        }\r
         buffer_handle->file_recv_stat.recv_file_stat = -1;\r
+\r
         ble_reply_cmd(FILE_RECV_REPLY_STAT_CMD,0);//接收失败\r
     }\r
     return ERRCODE_SUCC;\r
 }\r
+\r
+\r
 errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t event_size)\r
 {\r
 \r
@@ -5054,8 +5394,14 @@ errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t
             buffer_handle->file_recv_stat.file = fopen("/update/update.fwpkg","w+");\r
             printf("create file /update/update.fwpkg %X\n",buffer_handle->file_recv_stat.file);\r
         }else{\r
-            buffer_handle->file_recv_stat.file = fopen(buffer_handle->file_recv_stat.file_name,"w+");\r
-            printf("create file %s %X\n",buffer_handle->file_recv_stat.file_name,buffer_handle->file_recv_stat.file);\r
+            char filepath[128]={0};\r
+            if (get_file_recv_file_path(buffer_handle->file_recv_stat.file_name,strlen(buffer_handle->file_recv_stat.file_name),filepath,sizeof(filepath)) == ERRCODE_SUCC)\r
+            {\r
+                buffer_handle->file_recv_stat.file = fopen(filepath,"w+");\r
+                printf("create file %s %X\n",filepath,buffer_handle->file_recv_stat.file);\r
+            }else{\r
+                printf("create file %s error %X\n",buffer_handle->file_recv_stat.file_name,buffer_handle->file_recv_stat.file);\r
+            }            \r
         }\r
         if (buffer_handle->file_recv_stat.file == NULL)\r
         {\r
@@ -5089,6 +5435,11 @@ errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t
             fclose(buffer_handle->file_recv_stat.file);\r
             buffer_handle->file_recv_stat.file = NULL;\r
         }\r
+        if (buffer_handle->file_recv_stat.file_name != NULL)\r
+        {\r
+            free(buffer_handle->file_recv_stat.file_name);\r
+            buffer_handle->file_recv_stat.file_name=NULL;\r
+        }\r
         buffer_handle->file_recv_stat.recv_file_stat = 2;\r
         buffer_handle->receive_file_flag = 0;\r
         printf("handle_recv_file received success \n");\r
index 3073a46..ecacb80 100644 (file)
@@ -499,6 +499,25 @@ typedef struct
 }msg_get_sleep_param_info_t;//app获取睡眠设置
 #pragma pack()
 
+#pragma pack(1)
+typedef struct
+{
+    uint16_t dial_uid;//dial UID 
+    uint8_t file_name_len;//表盘名长度 0~255,不能为0
+    // uint8_t *file_name;//表盘名称 
+    // uint8_t filecount;//文件个数
+}msg_recv_dial_info_t;//表盘资源展示说明
+
+typedef struct
+{
+    uint16_t dial_uid;//dial UID 
+    uint8_t dial_count;//文件编号, 1~255,即该主题表盘中的第几个文件,最大为表盘文件汇总信息中的文件数目
+    uint8_t file_type;//0:表盘jSON文件(压缩后统一命名为local_page.lzma)1:图片文件(除缩略图外的其他图片)(背景图压缩后统一命名为main_bg.lzma) 2:缩略图:(压缩后统一命名为thumbnail.lzma) 
+    uint8_t file_name_len;//文件名长度 6~255,不能为0,文件后缀统一为.lzma
+    // uint8_t *file_name;//文件名称 
+    // uint32_t file_size;//文件大小
+}msg_recv_single_dial_info_t;//
+#pragma pack()
 
 #pragma pack(1)
 typedef struct
@@ -560,6 +579,8 @@ TYPE:02
 #define SET_BLE_NAME_CMD 0x0203 //修改蓝牙名称
 #define SET_TRAIN_TARGET_CMD 0x0204 //设置训练目标
 #define SET_address_book_CMD 0x020b //设置通讯录
+#define QUERY_DIAL_INSTALLED_PARAM_CMD 0x020D//获取某表盘ID是否已安装
+
 #define SYN_WATCH_LCD_PARAM_CMD 0x020E//同步屏幕参数app-watch
 #define SYN_VOICE_VIBRATION_PARAM_CMD 0x020f //同步参数app-watch
 #define SET_PHONE_INFOR_CMD 0x0210 //app发送手机信息
@@ -609,6 +630,7 @@ TYPE:05
 */
 #define FIND_PHONE_CMD 0x0501//查找手机
 #define GET_CURR_TIME_CMD 0x0502 //手表获取系统时间
+#define DIAL_INSTALL_REPY_CMD 0x0504 //表盘安装状态恢复
 #define SEND_PARI_SUCESS_CMD 0x0510 //发送配对成功消息
 #define GET_TRANS_END_CMD 0x0520 //app发送文件传输已完成消息
 #define SEND_FACTORY_RECORD_CMD 0x0530 //发送厂测结果
index 9e134ca..fc71fc2 100644 (file)
@@ -1295,12 +1295,21 @@ void blesrv_service_recv_msg_handler(uint16_t srv_handle, uint8_t * msg_data, ui
         return ;\r
     }\r
     memcpy_s((blesrv_mail.msg_data),msg_len,msg_data,msg_len);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"g_blesrv_queue :%d ble_recv:mail.msg_data %x %x %x %x msg_data:%x %x %x\r\n",g_blesrv_queue,blesrv_mail.msg_data,blesrv_mail.msg_data[0],blesrv_mail.msg_data[1],blesrv_mail.msg_data[2],msg_data[0],msg_data[1],msg_data[2]);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"g_blesrv_queue:%d ble_recv:mail.msg_data %X %02X %02X %02X msg_data:%02X %02X %02X\r\n",\r
+        g_blesrv_queue,\r
+        blesrv_mail.msg_data,\r
+        blesrv_mail.msg_data[0],\r
+        blesrv_mail.msg_data[1],\r
+        blesrv_mail.msg_data[2],\r
+        msg_data[0],\r
+        msg_data[1],\r
+        msg_data[2]\r
+        );\r
     ret = osal_msg_queue_write_copy(g_blesrv_queue, (void *)&blesrv_mail, sendlen , 0);\r
 \r
     if (ret != OSAL_SUCCESS)\r
     {\r
-        PRINT("Error blesrv Check send failed! err=0x%x! \r\n", ret);\r
+        PRINT("Error blesrv Check send failed! err=0x%X! \r\n", ret);\r
     }\r
 }   \r
 \r
@@ -1325,7 +1334,18 @@ static void blesrv_service_check_task(void const *arg)
         uint16_t server_handle = mail.service_handle;\r
         uint32_t msg_len = mail.msg_len;\r
 \r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"mail.msg_data:%x,g_blesrv_queue:%d ble_recv:%d %d %x %x %x mail.msg_data:%x %x %x %x\r\n",mail.msg_data,g_blesrv_queue,msg_len,server_handle,p_msgbuf[0],p_msgbuf[1],p_msgbuf[2],mail.msg_data ,mail.msg_data[0],mail.msg_data[1],mail.msg_data[2]);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"mail.msg_data:%X,g_blesrv_queue:%d ble_recv:%d %d %02X %02X %02X mail.msg_data: %02X %02X %02X\r\n",\r
+            mail.msg_data,\r
+            g_blesrv_queue,\r
+            msg_len,\r
+            server_handle,\r
+            p_msgbuf[0],\r
+            p_msgbuf[1],\r
+            p_msgbuf[2],\r
+            mail.msg_data[0],\r
+            mail.msg_data[1],\r
+            mail.msg_data[2]);\r
+\r
         #if 1\r
         if (server_handle == get_factory_ate_write_handl()) \r
         {\r
index e2385f9..e915795 100644 (file)
@@ -77,6 +77,7 @@ typedef struct
     uint8_t bt_earphone_connectstat;
     uint8_t android_app_connected;
     cat1_runtime_status_t cat1_runtime;
+    uint8_t current_dial_name[32];
 
 } runtime_status_t;